一個線上的問題是如何從定位到解決的?
設計埋點
埋點就是你要監控啥,你必須在程序開啓時設置一些參數來輔助監控,例如把日誌輸出到哪裏,便於另外的監控系統監控。
例如 -XX:+PrintGCDetails -Xloggc:/home/xx.log 形成的LOG文件
啓動參數
nohup java ${DEBUG_OPTS} ${JAVA_OPTS} -jar ${WORK_DIR}/abc-1.0-release.jar >/dev/null 2>&1 &
日誌參數
出現問題難道不應該是先看日誌?
哈哈,這就要看你的日誌打印的詳不詳細了。。。
發現問題
監控軟件報警
響應變慢
服務不可用
定位問題
1,cpu
top 打頭陣
jstack -lF pid
線程狀態信息,包含鎖信息
jmap -dump:format=b,file=/usr/local/logs/gc/dump.hprof {pid}
下載內存信息
MAT
發現佔用內存的大對象
2,磁盤
iostat -m 1 10
每塊磁盤的讀寫速度
3,內存
jmap -heap pid
打印jvm信息(具體含義,不是-Xx..)
Mat
4,網絡
netstat -p
5,jvm
jps -lvm | grep pid
輸出完整包名主類名和jvm參數信息
jinfo -flag name(=value)
打印/設置參數名稱,但是部分參數不支持設置
jstat -gc pic
打印gc信息
解決問題
修改程序
提升單機硬件資源
網絡問題
大殺器:Arthas
阿里出品,必屬精品
https://alibaba.github.io/arthas/index.html
大家都說好,誰用誰知道,牆裂推薦!
附錄
jvm參數信息:
-Xms:初始堆大小,默認爲物理內存的1/64(<1GB);默認(MinHeapFreeRatio參數可以調整)空餘堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默認(MaxHeapFreeRatio參數可以調整)空餘堆內存大於70%時,JVM會減少堆直到 -Xms的最小限制
-Xmn:新生代的內存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的New gen是不同的。整個堆大小=新生代大小 + 老生代大小 + 永久代大小。在保證堆大小不變的情況下,增大新生代後,將會減小老生代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。
-XX:SurvivorRatio:新生代中Eden區域與Survivor區域的容量比值,默認值爲8。兩個Survivor區與一個Eden區的比值爲2:8,一個Survivor區佔整個年輕代的1/10。
-Xss:每個線程的堆棧大小。JDK5.0以後每個線程堆棧大小爲1M,以前每個線程堆棧大小爲256K。應根據應用的線程所需內存大小進行適當調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。一般小的應用, 如果棧不是很深, 應該是128k夠用的,大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"-Xss is translated in a VM flag named ThreadStackSize”一般設置這個值就可以了。
-XX:PermSize:設置永久代(perm gen)初始值。默認值爲物理內存的1/64。
-XX:MaxPermSize:設置持久代最大值。物理內存的1/4。
-XX:+HeapDumpOnOutOfMemoryError 打印oom信息
線程狀態信息:
NEW:未啓動的。不會出現在Dump中。
RUNNABLE:在虛擬機內執行的。運行中狀態,可能裏面還能看到locked字樣,表明它獲得了某把鎖。
BLOCKED:受阻塞並等待監視器鎖。被某個鎖(synchronizers)給block住了。
WATING:無限期等待另一個線程執行特定操作。等待某個condition或monitor發生,一般停留在park(), wait(), sleep(),join() 等語句裏。
TIMED_WATING:有時限的等待另一個線程的特定操作。和WAITING的區別是wait() 等語句加上了時間限制 wait(timeout)。
TERMINATED:已退出的。
有用的參考文章:
https://www.cnblogs.com/java-chen-hao/p/10654071.html
https://www.cnblogs.com/mfmdaoyou/p/7349117.html?spm=a2c4e.10696291.0.0.297b19a4YDnKng