『壹』 怎麼用linux命令查看jvm進程有幾個線程
在LINUX上可以使用kill -3 pid > thread.info來取得當前JVM線程的信息;
jstack 這個是用來查看jvm當前的thread mp的。可以看到當回前Jvm裡面的線答程狀況。
這個對於查找blocked線程比較有意義;
『貳』 Linux下如何定位java進程直接內存的泄漏及top和jmap查看內存的關系
問題1:top的RES值和JAVA堆內存之間到底是一個什麼關系?
——大概1、2個月有個帖子討內論過,挺長的,不容過一下子找不到了;總的來說,兩者很難找到非常精確匹配的計算關系,因為兩者統計的口徑是不同的;操作系統關心的是被應用程序所佔用的,而JVM則只是關心堆中被分配出去的;這裡面有JVM自己開銷的、有碎片內存無法使用的、還有已使用完畢待回收的 等等問題。
——總的來說,我覺得如果不是為了底層開發之類的問題,不值得在此問題進行深入研究。
問題2:如何定位JAVA進程直接內存的泄漏?
——很遺憾,並沒有什麼招數來直接定位,否則內存泄露就不會是一個讓大家聞風喪膽的問題了;各類工具都只是提供給你一定的手段去發現徵兆、縮小懷疑范圍,沒有說直接幫你定位,那聽起來就不是IT而是神話了。
——常規招數就是:范圍 與 層次,兩個方向不斷通過測試和監控來縮小 懷疑范圍,從而最終定位內存泄漏點。
『叄』 Linux的JStat使用實踐linuxjstat
Linux下的JStat是一款適用於Linux操作系統的Java統計工具,它可以從正在運行的JVM(Java虛擬機)顯示有關Java類裝載、內存管理和其他垃圾收集等有用性能數據,進而幫助java開發者和運維人員監控java應用程序。
使用JStat有以下步驟:
第一步:確定JVM進程ID
為了運行Jstat,第一步是確定要監控的JVM進程ID,一般在Linux上可以通過ps -ef來獲取,關於JVM可以使用如grep ‘java’、grep ‘jre’等命令來篩選要定位的進程ID。
第二步:使用JStat連接JVM進程
在確定進程ID之後,可以使用以下命令來連接 JVM進程:
jstat –
其中vmid為上面確定的進程ID,option可以是收集數據的一些類型,例如-gcutil可以用來檢查垃圾收集的性能,-gc同時檢查多個:S0C、S1C、S0U、S1U、EC、EU、OC、OU、MC、MU、CCSC、CCSU,-gccapacity查看收集器的容量,等等。
第三步:使用Jstat分析JVM狀態
運行Jstat之後,可以收集到相應的數據,通過對數據的分析可以正確的了解JVM的狀態,一些不正常的狀態可能會出現停頓,停頓時長等信息,一般來說應用程序的性能效果會受到收集器、類載入,以及內存管理等因素的影響,可以根據數據來發現性能瓶頸以及自行調整優化應用程序。
總結
Linux下的Jstat是一款非常實用的Java統計工具,可以幫助java開發者和運維人員監控java應用程序,使用過程簡單,第一步是確定JVM進程ID,第二步使用Jstat連接,第三步分析JVM的狀態。Jstat可以收集數據並分析,能夠及時發現性能瓶頸,並保證應用程序的正常運行。