使用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地址。

相关文章
相关标签/搜索