一、添加远程主机
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包名称
jstatd 虚拟机运行数据
- jstatd -gc pid:监视堆的情况,容量、已用空间、GC时长等
- jstatd -gcutil pid:和-gc差不多,但主要关注已使用空间占总空间的比例
- 可以后缀时间如:jstatd -gcutil pid 5000,则每5S输出一次
jmap 内存映射
- jmap -heap pid:展示堆详细信息,用了哪种回收器、参数配置、分代情况等
- jmap -dump:format=b,file=xxx.hprof pid:生成当前时刻堆快照
jstack 堆栈跟踪
- jstack pid:生成当前时刻线程快照 threaddump
更多命令入口:JVM故障处理工具,使用总结