JAVA 應用性能監控基礎

jopen 9年前發布 | 11K 次閱讀 性能 Java開發

一、序言

這里簡單介紹了JAVA 應用程序部署linux 服務器上的一些常用監控信息,雖然現在很多自動化監控的東西,但是一些基本的東西,我們還是需要了解。這里是簡單記錄一下:

二、操作過程

1.我習慣性先看看 CPU 和內存的使用情況,做一個簡單的關注

命令:top 可以關注運行狀態

命令:大寫P:按CPU 使用排序,大寫M:按內存使用排序,小寫c:詳細顯示應用

比如A應用出現

VIRT:虛擬內存總共2G,RES:物理已經內存占用:1.8G,并且有持續上升趨勢,有可能內存溢出

關于JDK 自帶命令,可以參考:http://blog.csdn.net/fenglibing/article/details/6411953

2.jstack -l -pid 查看堆棧信息

當然我習慣性輸出到文件:jstack 1234 > jstack_1234.txt

一般我用來分析死鎖:看看有什么blocked 之類的,如果有就具體分析對象吧

3.查詢內存信息 到文件

jmap -histo > jmap_1234.txt

# 會出現類似的東西,這里里面會出現 對象實例個數大小,含義相信都能看懂
# 如果有溢出危險,可以看看是不是有些不應該存在的對象過多,或者泄露~。~
num   #instances            #bytes  class name
----------------------------------------------
  1:         5639055        314750880  [C
  2:         5090750        122178000  java.lang.String
  3:          634655         50563800  [B
  4:          132871         49959496  com.taobao.api.domain.Trade
  5:          535513         30530896  [Ljava.lang.Object;
  6:          457581         27420936  [I
  7:          421408         23598848  com.taobao.api.domain.MsgList
#...
# 上面關注的對象,發現訂單Trade 占 49959496/8/1024/2024 = 5.95 
# 至于合理性,要根據自己系統進行判斷,如果是內存不夠,需要調大JVM內存
# jmap -histo:live 這是存活的對象 
# 當然如果你應用掛了,你可以jmap -dump  jmap -head 看下內存快照
# 正常情況不建議這么做,生成快照的時候應用會stop 一下!

4.關注GC信息

jstat -gcutil > jstat_1234.txt

# 會出現類似以下信息
S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
 38.69   0.00  90.60  79.89  59.31 150460 1693.925   609  137.180 1831.105

# 我喜歡主要關注FGC 的次數:609 當然這個要配合運行時間去看,你可以5-10分#鐘運行幾次,看看FGC 的增長率,快了肯定的調節

#當然你還可以觀察新生代 、老年代、永久代詳細信息,具體參數看上面的鏈接

小結:

1.雖然很多大部分情況下,公司有運維或者專門的監控工具做這些了,但是了解一下還是有好處的,當然基本的得清楚JVM 的一些分布、原理基礎。

2.關于一些常用調優手段,有機會結合實際場景 再分享吧,脫離場景的 都感覺 不太好。

3.也可以用遠程的一些工具去操作這些

原文  http://greemranqq.iteye.com/blog/2190684

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!