使用JDK進行Performance Tuning

JDK裏有三個很好用的工具,jmapjconsolejvisualvm,三個工具都各有所側重,可是若是你的系統遇到性能瓶頸(內存不足或是CPU佔用率太高),你能夠經過這三個工具來發現應用裏的hot spot。我今天只記一下大概的用法,給本身作個備忘,詳細的使用說明,等忙完了這段時間,整理一下。html

先介紹一個小工具,jps,這也是jdk自帶的工具之一,能夠列出系統裏全部的java進程。java

jmap能夠查看程序中堆的使用狀況,具體的用法是:工具

jmap –histo:live <pid>;性能

以及能夠將堆dump到一個文件,命令是:spa

jmap –dump:format=b,file=heap.bin <pid>;線程

請在<pid>處填入相應的進程的id。code

jconsole能夠查看某個java進程的內存使用、CPU佔用率等,orm

若是想要遠程查看某一java程序,則須要在該程序啓動參數里加下以下參數:htm

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9001 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false進程

上文使用的9001是監聽的端口號,你能夠指定其餘的值。而後在你的終端鍵入jconsole,選擇鏈接遠程進程,並填入相應的主機名和端口便可。若是沒法鏈接,請修改/etc/hosts裏的內容,將localhost綁定到機器的外部ip地址。

相應的數據能夠導出爲一個csv文件,這個很方便。

jvisualvm功能與jconsole的基本相似,可是能夠作性能分析。

便可以分析出CPU時間被哪些線程所佔用了,等等,而且它支持jmx,這東西我只據說過沒用過,先放一邊不表。

配置jvisualvm不須要改動原程序的啓動參數,只須要在遠程主機上運行jstatd便可。

新建一個叫jstatd.all.policy的文件,內容是:

grant codebase "file:${java.home}/../lib/tools.jar" { 
    permission java.security.AllPermission; 
};

而後使用以下命令啓動jstatd,

jstatd -J-Djava.security.policy=jstatd.all.policy

而後在

jvisualvm裏選擇添加遠程主機便可。若是沒法鏈接,請修改/etc/hosts裏的內容,將localhost綁定到機器的外部ip地址。

相關文章
相關標籤/搜索