一、添加远程主机

VisualVm在jdk中,目录:Java\jdk1.8.0_102\bin,找到jvisualvm.exe。

端口默认为1099无需更改,若启动statd时指定了端口号,则填写自定义的端口号。

添加完不能监控?这就对了,因为还需要在远程做一些设置,方式由jstatd和jmc两种方式,这里只说明jstatd方式。

二、jstatd远程配置

加权限。在JAVA_HOME/bin目录下创建一个文件:jstatd.all.policy(可以是别的名字)。

也可以自定义目录创建,但在执行启动时文件目录需要手动指定。

cd $JAVA_HOME/bin
vi jstatd.all.policy

编写内容

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

执行启动命令

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.service.hostname=10.7.132.67 &

查看启动结果

sudo netstat -lpnt | grep jstatd

tcp6       0      0 :::1099                 :::*                    LISTEN      15384/jstatd
tcp6       0      0 :::48694                :::*                    LISTEN      15384/jstatd

三、远程监控

没错 ,回到VisualVM远程界面,双击远程服务器,会发现已经可以监控了。

如果过程中碰到了如下问题,莫慌,仔细检查一下启动命令是否写错了。

四、分析dump文件

文件->装入->选择文件类型,然后就可以开始你的表演了。

五、几个较常用的监控命令

jps 虚拟机进程情况

  • jps -l:输出进程号和jar包名称

jstat 虚拟机运行数据

  • jstat -gc pid:监视堆的情况,容量、已用空间、GC时长等
  • jstat -gcutil pid:和-gc差不多,但主要关注已使用空间占总空间的比例
  • 可以后缀时间如:jstatd -gcutil pid 5000,则每5S输出一次

jmap 内存映射

  • jmap -heap pid:展示堆详细信息,用了哪种回收器、参数配置、分代情况等
  • jmap -dump:format=b,file=xxx.hprof pid:生成当前时刻堆快照

jstack 堆栈跟踪

  • jstack pid:生成当前时刻线程快照 threaddump

可以将信息输出到指定文件如:jmap -hep pid >/xxx/jmapHeap.txt

更多命令入口:JVM故障处理工具,使用总结

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐