JMX为某个java实例的监控,可以查看线程,对Cpu及内存进行抽样,可以强制回收垃圾;
jstatd为整个java环境的监控,可以查看GC状态;
Jmx配置
jmx的权限文件通常在 /usr/lib/jvm/java-1.8.0-openjdk-版本号/jre/lib/management/
jmxremote.password 及 jmxremote.access 两个文件,一个用于记录账号密码,一个用于设置权限
jmxremote.password 文件默认没有,复制jmxremote.password.template文件即可,最下面这两行反注释掉即可启用
1 2 |
# monitorRole QED # controlRole R&D |
账号为monitorRole,密码为QED,注意:jmxremote.password权限需为600
权限级别观察jmxremote.access文件底部。
java的启动语句里添加
1 2 3 |
-Dcom.sun.management.jmxremote.port=3000 \ -Dcom.sun.management.jmxremote.authenticate=true \ -Dcom.sun.management.jmxremote.ssl=false \ |
即可启动jmx监听3000端口。
Jstatd配置
jstatd通常位于 /usr/lib/jvm/java-1.8.0-openjdk-版本/bin
,必须找到目录并添加jstatd.all.policy
文件。
找不到可以用ls -lh /usr/bin/jstatd
一步步寻找软链接。
jstatd.all.policy文件内容写:
1 2 3 |
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; |
随后在bin目录下用此指令启动,如果希望直接在任意目录下启动,请把jstatd.all.policy部分的路径补全
./jstatd -J-Djava.security.policy=jstatd.all.policy
启动之后若jvisualvm连接不上,可以使用
./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=IP地址
如果还是连接不上,尝试修改hosts文件,确保hostname -i
显示的是自己机子的外网IP即可~