linux java 線上問題排查

轉自: 

http://www.myexception.cn/operating-system/415201.html

 

線上故障問題排查技能記載一

1. pgrep 查詢進程的工具 
pgrep 是通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。在服務器的配置和管理中,這個工具常被應用,簡單明瞭
用法: pgrep 參數選項 程序名

eg: pgrep java #查詢出JAVA進程的進程號
常用參數:
-l 列出程序名和進程ID
-o 進程起始的ID
-n 進程終止的ID

2. 彙總某個進程下所有的線程數

方法一 :ls /proc/20967/task/|wc -l : 20967是進程號

方法二 : ps -eLf | grep 20967 |wc -l

ps:該方法對於排查JAVA各種容器(eg:tomcat)由於創建過多線程,導致cpu耗費大量的資源進行上線文切換非常有幫助。

我們可以寫一個腳本,當線程數>閥值,則進行jstack dunp

3. TOP命令看線程資源使用情況

第一步:輸入TOP命令

第二步: 輸入 shift+h ,打開線程模式,查看目前最耗系統資源的線程是哪些

可以再按 1用CPU模式看各個CPU資源的使用情況 按O查看幫助



4 top+jstack 
使用top命令看線程資源使用情況後,可以得到這些線程的pid,然後把這些線程號轉換成16進制,
jstack -l pid(java進程號) :把java線程快照給dump下來.可以用來排查死鎖,以及耗費系統資源線程當前的運行情況

eg: jstack -l pid >jstack_dump.log #將當前JVM線程快照dump到jstack_dump.log文件中

grep jstack_dump.log 16進制號 #這樣可以看看當前這些耗費資源的線程的內存情況

 

5. jstack 打印當前線程堆棧情況 
命令格式: jstack [-option] jvm_pid
參數: -l 打印關於鎖的堆棧信息(long listing. Prints additional information about locks)
-m 混合打印模式,可打印C++和JAVA的堆棧信息
-h 打印幫助信息

 

 

6.查看運行時gc情況命令: 
$JAVA_HOME/bin/jstat -gcutil `pgrep java` 1000 10 (後三個參數是PID,掃描間隔時間單位毫秒,掃描次數)

$JAVA_HOME/bin/jstat -gc `pgrep java` 1000 10

 

 

7.對於網絡問題的定位 :
可以通過netstat命令來查看某個時間段的網絡重傳率。
通過netstat -l enX -sp tcp
收集發送的TCP包數和retransmit的包數,間隔一定時間過後
再次收集這兩個數值,分別相減後相除,可得出在此採樣時間內的TCP重傳率

 

發佈了91 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章