天天看點

Java線上常見問題排查

Java線上系統排查的四大工具:

top:監控CPU資訊

load average: 1min 5min 15min前到現在的平均值(不能持續大于cpu個數)

cpu percent:

us:使用者空間占用CPU百分比(長期大于50%,需要考慮優化使用者的程式)

sy:核心空間占用CPU百分比(us + sy 的參考值為80%,如果us+sy 大于 80%說明可能存在CPU不足)

id: 空閑CPU百分比(長期大于90%,說明資源浪費)

wa:IO等待所占用的CPU時間的百分比(磁盤或者網絡繁忙,大量磁盤讀寫的應用如資料庫)

技巧:輸入大寫P,則結果按CPU占用降序排序;輸入大寫M,結果按記憶體占用降序排序;輸入H顯示線程資訊

Java線上常見問題排查

free -m / top:檢視記憶體資訊

Mem: 實體記憶體

Swap: 交換區,也叫虛拟記憶體,使用磁盤替代記憶體(當記憶體不夠用時,會将不常用的程式踢到swap區)

buffers:是指用來給塊裝置做的緩沖大小,主要記錄檔案系統的metadata,cached:是用來給檔案做緩沖

實際程式可用記憶體 = free + (buffers + cached)

實際程式已用記憶體 = used – (buffers + cached)

Java線上常見問題排查
Java線上常見問題排查

iostat:監控磁盤資訊

iostat -d -k 2 ( -d 顯示裝置(磁盤)使用狀态;-k 磁盤讀寫速度機關為KB ;2 資料顯示每隔2秒重新整理一次)

iostat -d -m 2 (-m 表示磁盤讀寫速度機關為MB)

iostat -d -x -k 1 10 (檢視裝置使用率%util、響應時間await,10 顯示10次退出,-x 擴充選項)

await:平均每次裝置I/O操作的等待時間,機關毫秒,這個時間包括了隊列時間和服務時間

svctm: 平均每次裝置I/O操作的服務時間,機關毫秒

一般情況下,await大于svctm,它們的內插補點越小,則說明隊列時間越短,反之內插補點越大,隊列時間越長,說明系統出了問題

%util:  在統計時間内所有處理IO時間,除以總共統計時間,該參數暗示了裝置的繁忙程度,數值約大,磁盤越繁忙

Java線上常見問題排查
Java線上常見問題排查

netstat:檢視網絡資訊

-a: 擷取目前所有連接配接

-t:指明顯示 TCP 端口

-u:指明顯示 UDP 端口

-l: 僅顯示監聽套接字

-p:顯示程序辨別符和程式名稱,每一個套接字/端口都屬于一個程式。

-n:不進行 DNS 輪詢,顯示 IP (可以加速操作)

netstat -an | grep :80 | sort (80 可以用來監控http web 服務,如果同一個 IP 有大量連接配接,則判定該 IP 疑似存在單點流量攻擊行為)

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr (計算每個主機連接配接到本機的連接配接數)

netstat -nltu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr(檢查 ESTABLISHED 連接配接并且列出每個 IP 位址的連接配接數量)

netstat -nat | awk '{print $6}' | sort | uniq -c | sort -nr(TCP各種狀态清單清單,并按照數量排序)

netstat -antp | grep 8007(檢視端口占用的程序,程式啟動時會遇到端口已經占用,則可以根據端口查程序然後kill掉)

netstat -antp | grep 13722 (檢視程序占用的端口,了解目前程序所有開的端口号)

明天整理一下 jvm排查的7中指令:

jps(檢視哪些java程序處于運作狀态)、

jstack(檢視某個程序的堆棧資訊(常用指令:jstack pid))、

jinfo:輸出JAVA系統參數及指令行參數,并修改運作時的java 程序的opts(常用指令:jinfo pid)、

jstat:主要是針對Heap size和垃圾回收狀況的監控、

jmap:檢視堆記憶體使用狀況,dump堆記憶體,以及判斷是哪個Object占用了堆記憶體、

jhat:JAVA heap離線分析的工具