最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

記一次tomcat進程cpu占用過高的問題排查記錄

 更新時間:2020年02月24日 15:09:02   作者:yiduyangyi  
這篇文章主要介紹了記一次tomcat進程cpu占用過高的問題排查記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文主要記錄一次tomcat進程,因TCP連接過多導致CPU占用過高的問題排查記錄。

問題描述

linux系統下,一個tomcat web服務的cpu占用率非常高,top顯示結果超過200%。請求無法響應。反復重啟依然同一個現象。

問題排查

1、獲取進程信息

通過jdk提供的jps命令可以快速查出jvm進程,

jps pid

2、查看jstack信息

jstack pid

發(fā)現存在大量log4j線程block,處于waiting lock狀態(tài)

org.apache.log4j.Category.callAppenders(org.apache.log4j.spi.LoggingEvent) @bci=12, line=201 (Compiled frame)

搜索相關信息,發(fā)現log4j 1.x版本存在死鎖問題。

發(fā)現問題,于是調整log4j配置,僅打開error級別日志,重啟tomcat。此時stack中block線程消失,但進程cpu占用率依然高漲。

3、進一步排查

分析每個線程的cpu占用量,此處需要引入一個大神貢獻的腳本,計算java進程中,每個線程的cpu使用量。

#!/bin/bash

typeset top=${1:-10}
typeset pid=${2:-$(pgrep -u $USER java)}
typeset tmp_file=/tmp/java_${pid}_$$.trace

$JAVA_HOME/bin/jstack $pid > $tmp_file
ps H -eo user,pid,ppid,tid,time,%cpu --sort=%cpu --no-headers\
    | tail -$top\
    | awk -v "pid=$pid" '$2==pid{print $4"\t"$6}'\
    | while read line;
do
    typeset nid=$(echo "$line"|awk '{printf("0x%x",$1)}')
    typeset cpu=$(echo "$line"|awk '{print $2}')
    awk -v "cpu=$cpu" '/nid='"$nid"'/,/^$/{print $0"\t"(isF++?"":"cpu="cpu"%");}' $tmp_file
done

rm -f $tmp_file

腳本適用范圍

因為ps中的%CPU數據統計來自于/proc/stat,這個份數據并非實時的,而是取決于OS對其更新的頻率,一般為1S。所以你看到的數據統計會和jstack出來的信息不一致也就是這個原因~但這份信息對持續(xù)LOAD由少數幾個線程導致的問題排查還是非常給力的,因為這些固定少數幾個線程會持續(xù)消耗CPU的資源,即使存在時間差,反正也都是這幾個線程所導致。

除了這個腳本,簡單點兒的方法則是,查出進程id后,通過如下命令查看該進程中每個線程的資源使用情況

top -H -p pid

從這里獲取pid(線程id),轉換為16進制,然后去stack信息中查找對象的線程信息。

通過上述方法,查出tomcat進程對應的線程cpu占用率累積之和約80%,遠小于top給出的200%+

說明并不存在長期占用cpu的線程,應該是屬于有許多短暫性的cpu密集計算。進而懷疑是不是jvm內存不足,頻繁gc導致。

jstat -gc pid

發(fā)現jvm內存使用并未出現異常,gc次數明顯暴漲

查完內存,由于本身是一個網絡程序,進一步排查網絡連接。

4、問題定位

查詢tomcat對應端口的tcp鏈接,發(fā)現存在大量EASTABLISH的鏈接,還有部分其它狀態(tài)的連接,總計400+。

netstat -anp | grep port

進一步查看這些連接的來源,發(fā)現是該tomcat服務的應用端,存在大量后臺線程,在頻繁輪詢該服務,導致該服務tomcat 連接數被打滿,無法繼續(xù)接收請求。

netstat狀態(tài)說明:

  • LISTEN:偵聽來自遠方的TCP端口的連接請求
  • SYN-SENT:再發(fā)送連接請求后等待匹配的連接請求(如果有大量這樣的狀態(tài)包,檢查是否中招了)
  • SYN-RECEIVED:再收到和發(fā)送一個連接請求后等待對方對連接請求的確認(如有大量此狀態(tài),估計被flood***了)
  • ESTABLISHED:代表一個打開的連接
  • FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
  • FIN-WAIT-2:從遠程TCP等待連接中斷請求
  • CLOSE-WAIT:等待從本地用戶發(fā)來的連接中斷請求
  • CLOSING:等待遠程TCP對連接中斷的確認
  • LAST-ACK:等待原來的發(fā)向遠程TCP的連接中斷請求的確認(不是什么好東西,此項出現,檢查是否被***)
  • TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
  • CLOSED:沒有任何連接狀態(tài)

5、根源分析

直接觸發(fā)原因是客戶端輪詢,請求異常,繼續(xù)輪序;客戶端不斷有新的后臺線程加入輪詢隊伍,最終導致服務端tomcat連接被打滿。

到此這篇關于記一次tomcat進程cpu占用過高的問題排查記錄的文章就介紹到這了,更多相關tomcat進程cpu占用過高內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 修改Tomcat服務中的端口配置方法

    修改Tomcat服務中的端口配置方法

    今天小編就為大家分享一篇修改Tomcat服務中的端口配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 關于如何將tomcat卸載干凈記錄

    關于如何將tomcat卸載干凈記錄

    Tomcat軟件自帶卸載工具無法將自身卸載干凈,卸載后注冊表、服務項仍然存在,導致后續(xù)安裝的新版本Tomcat無法正常使用,這篇文章主要給大家介紹了關于如何將tomcat卸載干凈的相關資料,需要的朋友可以參考下
    2023-06-06
  • 解決Tomcat使用shutdown.bat關閉會將其他Tomcat關掉的問題

    解決Tomcat使用shutdown.bat關閉會將其他Tomcat關掉的問題

    這篇文章主要介紹了解決Tomcat使用shutdown.bat關閉會將其他Tomcat關掉的問題 ,解決方法很簡單,具體內容詳情大家跟隨小編一起通過本文學習吧
    2018-10-10
  • Tomcat 多個應用配置方法

    Tomcat 多個應用配置方法

    Tomcat 多個應用配置方法,需要的朋友可以參考下。
    2010-12-12
  • 詳解從源碼分析tomcat如何調用Servlet的初始化

    詳解從源碼分析tomcat如何調用Servlet的初始化

    這篇文章主要介紹了詳解從源碼分析tomcat如何調用Servlet的初始化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Tomcat如何監(jiān)控并刪除超時Session詳解

    Tomcat如何監(jiān)控并刪除超時Session詳解

    這篇文章主要給大家介紹了關于Tomcat如何監(jiān)控并刪除超時Session的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Tomcat具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Tomcat啟動閃退的解決方法總結

    Tomcat啟動閃退的解決方法總結

    有沒有碰到過這種情況:你滿懷期待地啟動Tomcat,結果它閃了一下就消失了?是的,沒錯,Tomcat君在跟你玩捉迷藏呢!別擔心,今天我們就來一探究竟,揭開這個神秘的面紗,感興趣的小伙伴跟著小編一起來看看吧
    2024-07-07
  • 如何修改tomcat默認端口號8080的方法

    如何修改tomcat默認端口號8080的方法

    本篇文章主要介紹了如何修改tomcat默認端口號8080的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 修改Tomcat運行時jvm編碼問題

    修改Tomcat運行時jvm編碼問題

    這篇文章主要介紹了修改Tomcat運行時jvm編碼問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • tomcat服務安裝步驟及詳細配置實戰(zhàn)教程

    tomcat服務安裝步驟及詳細配置實戰(zhàn)教程

    Tomcat是由Apache開發(fā)的一個開源Java WEB應用服務器,下面這篇文章主要給大家介紹了關于tomcat服務安裝步驟及詳細配置實戰(zhàn)教程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

姚安县| 芷江| 雅安市| 南宁市| 石屏县| 葫芦岛市| 兰西县| 祁阳县| 罗江县| 新源县| 绍兴市| 绥江县| 静安区| 噶尔县| 贵阳市| 广德县| 仁寿县| 景德镇市| 青田县| 张家口市| 黄平县| 翁源县| 巢湖市| 锦屏县| 娱乐| 万安县| 稷山县| 泰兴市| 孝感市| 新津县| 辽源市| 喀喇| 晋宁县| 六安市| 桂平市| 英吉沙县| 彭泽县| 临西县| 伊宁县| 土默特右旗| 峨眉山市|