在LINUX上可以使用kill -3 pid > thread.info來取得當前JVM線程的信息;
jstack 這個是用來查看jvm當前的thread mp的。可以看到當前Jvm裡面的線程狀況。
這個對於查找blocked線程比較有意義;
B. Linux下如何定位JAVA進程直接內存的泄漏及top和jmap查看內存的關系
問題1:top的RES值和JAVA堆內存之間到底是一個什麼關系?
——大概1、2個月有個帖子討論過,挺長的,不過一下子找不到了;總的來說,兩者很難找到非常精確匹配的計算關系,因為兩者統計的口徑是不同的;操作系統關心的是被應用程序所佔用的,而JVM則只是關心堆中被分配出去的;這裡面有JVM自己開銷的、有碎片內存無法使用的、還有已使用完畢待回收的 等等問題。
——總的來說,我覺得如果不是為了底層開發之類的問題,不值得在此問題進行深入研究。
問題2:如何定位JAVA進程直接內存的泄漏?
——很遺憾,並沒有什麼招數來直接定位,否則內存泄露就不會是一個讓大家聞風喪膽的問題了;各類工具都只是提供給你一定的手段去發現徵兆、縮小懷疑范圍,沒有說直接幫你定位,那聽起來就不是IT而是神話了。
——常規招數就是:范圍 與 層次,兩個方向不斷通過測試和監控來縮小 懷疑范圍,從而最終定位內存泄漏點。