在實習時接觸的是分佈式系統,公司實現了一套系統的日誌和性能監控架構,對問題的排查多是查異常日誌調接口。近來開始熟悉Linux系統,發覺合格的程序員除了異常這個突破點,也應掌握對系統本身性能問題的診斷能力。就像醫生診斷病人一樣診斷服務變慢的機器,很好玩的樣子。
大概整理出這樣的思路:
自上而下,做系統系能分析,主要是CPU,內存和IO三大塊
1.通過“top”命令查看負載情況
第一行load average表示:1分鐘平均負載,5分鐘平均負載,15分鐘平均負載分別是0.02,0.10,0.09。這些值不超過50%也沒有明顯升高跡象。若短期均值明顯高於長期則負載很重。‘
可進一步排查最耗CPU的Java線程
top -H //"-H"表示thread模式,也可配合grep更精準的定位
最後利用jstack獲取線程數,對比相應ID即可。
2.內存使用
"free"命令查看內存使用情況
JVM的性能不接受大量swap的使用
3.IO問題
- 網絡IO
- 磁盤IO-----"iostat"命令判斷磁盤狀況
JVM 層面的性能分析
jstat -help命令可查看分析GC的具體流程
jstat - [-t] [-h] [ []]