|
在开发大型Java项目时,我们可能会遇到内存溢出、性能问题等诸多问题,比如文件、数据库的连接未释放,程序未优化等。今天介绍一下VisualVM的使用,如何通过VisualVM看到程序的运行状况,来帮助我们分析程序的缺陷。(VisualVM在这里就不做介绍了)
第一步:服务端(需要监控的地方)Jstatd启动
1、创建XXX.policy文件
文件内容
grant codebase "file:$JAVA_HOME/lib/tools.jar" { permission java.security.AllPermission; };
注意:
- $JAVA_HOME是本机java的路径,自行替换
- 可以在任意目录下创建此文件,文件名随便起,但是后缀(.policy)不能变
2、启动Jstatd
启动命令,启动路径是$JAVA_HOME/bin
./jstatd -J-Djava.security.policy=/opt/visualvm-test/jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.124.18 -p 2222 -J-Djava.rmi.server.logCalls=true
后台运行启动命令
./jstatd -J-Djava.security.policy=/opt/visualvm-test/jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.124.18 -p 2222 -J-Djava.rmi.server.logCalls=true > /opt/visualvm-test/out.file 2>&1 &
XXXX.... > /opt/visualvm-test/out.file : 输出重定向到/opt/visualvm-test/out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1 :是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
注意:
- .policy文件路径根据自己目录替换
- 主机名可以是IP也可以是名称
- 端口任意,但需要放开
3、启动效果
ps -ef | grep jstatd
第二步:使用VisualVM远程链接



|