AWK Akka Dockerfile Docker命令 Docker环境 ELK ElasticSearch Elasticsearch Flume Git命令 Go HBase HDFS Hadoop Hadoop原理架构体系 Hive JVM Java Web,Socket,Python Jenkins环境 Kafka Kibana Linux命令 Logstash Mac MapReduce Maven配置 MongoDB MySQL Nginx Redis Shadowsocks Shell Spring Storm Zookeeper 其他

使用jstatd方式远程监控Linux下的JVM运行情况

在${JAVA_HOME}/bin目录下创建jstatd.all.policy安全策略文件

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

jstatd 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
jstatd 命令
options
-nr : 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的RMI Registry
-p : port 端口号,默认为1099
-n : rminame 默认为JStatRemoteHost;如果多个jstatd服务开始在同一台主机上,rminame唯一确定一个jstatd服务
-J : jvm选项
$ cd $JAVA_HOME/bin
# 启动jstatd服务,使用内部RMI Registry默认端口号1099
$ ./jstatd -J-Djava.security.policy=jstatd.all.policy
# 注册一个RMI端口
$ rmiregistry 2020&
# 启动jstatd服务,指定安全策略文件,使用外部RMI Registry指定端口号2020
$ ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.100 -p 2020

若出现下面的问题,是因为没有给jstatd指定安全策略,如上新建安全策略文件后运行指定文件即可

1
2
3
4
5
6
7
8
Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.System.setProperty(System.java:725)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)
1
2
# 下载并启动VisualVM
$ ./visualvm --jdkhome $JAVA_HOME --userdir ~/

启动成功后,新建一个Remote Host(指定你要监控的主机IP地址),就可以看到对应的使用JVM的进程以及PID了,还可以查看具体进程的CPU,Heap,Threads等情况。

JMX方式监控

这里使用Kafka举例,Kafka启动的时候指定开启的JMX端口9999

1
$ JMX_PORT=9999 ./kafka-server-start.sh ../config/server.properties &

然后使用VisualVM工具监控Kafka,先安装MBeans插件

  • 添加一个JMX连接
  • JMX连接的端口是我们前面启动使用的9999
  • MBean插件显示具体的监控信息
  • 参考文章:

  • http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html
  • https://my.oschina.net/u/218540/blog/263704
  •