日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java排查问题随笔

發布時間:2023/12/10 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java排查问题随笔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  常言道:“好記性不如爛筆頭”,確實很有道理。在日常工作中,偶爾處理下線上問題還是很常見的,經常出現的情況就是忘記一些常用命令(套路)的用法了,因此整理下來非常用必要,以便關鍵時刻可以節省到處搜索的時間。

常用Linux命令

  1. top命令,直觀查看機器資源使用情況。

(1)top -Hp PID 查看指定進程具體線程、內存使用情況 (2)輸入top后,按P以CPU 占用率大小的順序排列進程列表 (3)輸入top后,按M以內存占用率大小的順序排列進程列表

?

  2. free命令,這個命令估計大家也肯定經常用, 但是命令結果每行每列具體含義,經常容易忘記。

 

1)先看第一行   
       total used free shared buffers cached
Mem:? ? ? ? ? 7804 ? ? ? 7643? ? ? ? 161? ? ? ? 153? ? ? ? 333 ? ? ? 2658
機器總的總內存(total)為7804MB、其中使用了(used)7643MB、還剩下(free)161MB未使用,這幾個指標應該是最好理解的。
另外某部分內存是可以共享的,比如程序代碼片段可以被多個進程共享,這部分就是shared指標的含義了,也就是說有153MB內存被用于做共享內存了。
重點說下buffers和cached兩個指標,這2個指標所占用的內存都是Linux為了提高訪問性能而用來做高速緩存的,查了下資料有說cache是用于文件系統緩存,buffer是用于塊設備緩存,還有的書籍說內核2.2以后cache和buffer整合成了一個"通用數據塊層",想要深究只能自行查詢更官方的文檔了。簡而言之,這部分內存是Linux內核自行維護的,不需要我們關心,正因為有了這些高速緩存,linux才不需要頻繁IO操作,性能才得以提高。

2)第二行

  -/+ buffers/cache: ? ? ? 4651 ? ? ? 3153

  這行的含義經常容易搞混。其實它想表達的是如果系統禁用buffer和cache高速緩存,那么系統實際就只使用了4651MB內存,還剩余3153MB內存。換個說法,就是第一行的

used = 實際使用的內存 + buggers/cache的內存, 而第一行的free= total - used。

 3)第三行

  Swap:? ? ? ? 30517? ? ? ? 231? ? ? 30286

  這行的數據表示交換空間的總量、使用量、和剩余量。由于交換空間是在內存不足的情況下,使用磁盤當內存用,所以這行如果出現了使用量比較多的情況,那就真的事內存不夠,要好好檢查下是不是有什么內存泄漏了。

?

 4)總結下

  實際上判斷內存使用情況,直接看第二行就行了,這行是系統程序實際使用的內存情況,而對于buffer和cache完全是由內核去控制的,應該是不建議我們去干預的。另外如果第三行數據有異常,就該認真排查了。

?

查看JVM堆棧命令

  1. jmap?

1)jmap -dump:file=hprof-jvm.bin -F PID 轉存jvm堆棧信息文件
獲取到堆棧信息的二進制文件后,可以使用Eclipse的MAT去分析是否存在異常情況,MAT這個東西確實好用,而且能幫我們自動分析去一些異常,比如內存泄漏什么的。附上下載地址 http://www.eclipse.org/mat/。

2)jmap -histo PID 獲取每個class的實例數目,內存占用,類全名信息. VM的內部類名字開頭會加上前綴”*”. 如果live子參數(-histo:live )加上后,只統計活的對象數量.

  

  2.jstack -l PID >> jstack.data。打印活動線程信息

?

查看GC日志

  目前接觸項目都是CMS比較多(不知道是不是我們公司比較土~~),GC日志打印內容非常多,第一次看的話確實是懵。了解 CMS 垃圾回收日志,里面有比較清晰說明。這里我只摘錄查閱資料后幾點個作為筆記。

1)我們的CMS full gc時,經常會看到如下信息:CMS: abort preclean due to time, 這個問題有篇文章講的很透徹:https://blogs.oracle.com/jonthecollector/entry/did_you_know。主要的意思是:preclean是為了加速下一級的remark過程,因為remark過程是STW的。preclean過程中為了更好的使用parallel,它會等待一次小gc(默認等待5s),如果5s內小gc沒來,就會強制開始STW remark過程,并打印信息abort preclean due to time。就是說,出現這個log實際上關系不大,除非我們發現remark過程耗時過久。

2)
13901.282: [GC 13901.283: [ParNew: 8766574K->400883K(9216000K), 1.9300940 secs] 10239467K->1917256K(11578944K), 1.9309390 secs] [Times: user=13.68 sys=0.07, real=1.93 secs]
這段ParNew GC日志最后有三個時間
[Times: user=13.68 sys=0.07, real=1.93 secs]含義是指user是用戶態花費的時間,sys是內核態花費的時間,而real是實際花費的時間,user+sys是CPU時間,每個CPU core單獨計算,所以這個時間可能會是real的好幾倍。

?

參考鏈接

  linux top命令中的cache & buffers

  Linux Top 命令解析 比較詳細

  關于CMS: abort preclean due to time

  通過 jstack 與 jmap 分析一次線上故障

?  ?了解 CMS 垃圾回收日志

  

?

轉載于:https://www.cnblogs.com/yipaihushuo/p/9901704.html

總結

以上是生活随笔為你收集整理的Java排查问题随笔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。