目录

1.前言:

2.如何监控

2.1.spring admin 

2.2.pass平台

2.3jvm 本地jdk监控本地服务

2.3.1介绍

2.3.2JVisualVM能做什么

2.3.3使用

2.4jvm 本地jdk监控远程服务

方式一

方式二


1.前言:

常规新项目上线,做非功能测试(性能测试),或者峰值测试时,常规要检查服务器性能,例如,cpu、内存、io他们的使用情况,以及波动是否合理,要进行参考了解(数据库服务器也不除外。)

2.如何监控

2.1.spring admin 

spring 自带的admin监控项目,相关资源,参考:基本使用

2.2.pass平台

现在常规服务部署流程,使用到了pass平台,附带的有监控功能,这里不进行展开了

或者可以使用第三方服务进行监控,

2.3jvm 本地jdk监控本地服务

2.3.1介绍

JVisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).

2.3.2JVisualVM能做什么

VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

2.3.3使用

1、监控本地的java进程

jvisualvm位于JAVA_HOME/bin目录下,如下图:

监控jboss的jvm健康状况 jvm 性能监控_监控jboss的jvm健康状况

 

如果只是监控本地的java进程,是不需要配置参数的,直接打开就能够进行监控。首先我们需要在本地打开一个Java程序,例如我打开IDEA,这时在jvisualvm界面就可以看到与IDEA相关的Java进程了:

在使用jonsole、jvisualvm时,不显示本地Java进程信息

 点击一个进程,就可以看到该进程的概述信息,该进程的JVM参数以及系统属性等信息都能够查看到:

点击 “监视” 就能够看到CPU、内存、类以及线程的活动状况,点击右上角的 “堆Dump” 就能够导出内存映像文件:

监控jboss的jvm健康状况 jvm 性能监控_java_02

点击 “线程” 就能够看到该进程内部的所有线程,以及线程的运行状况等信息。如果点击右上角的 “线程Dump” 就会导出一个内容与jstack打印内容一致的文件:

监控jboss的jvm健康状况 jvm 性能监控_java_03

目前没有访问,空跑,这么多空闲线程,要保证稳定运行性能指标时,没有多余的空闲线程即可 

运行:正在运行的
休眠:sleep
等待:wait
驻留:线程池里面空闲的线程
监视:阻塞的线程,正在等待锁
 

 

点击 “抽样器” 界面中的 “CPU ” 就可以动态的看到每个方法的执行时间,当我们的代码执行的比较慢了,就可以通过抽样器来查看是哪一个方法执行的比较慢:

监控jboss的jvm健康状况 jvm 性能监控_监控jboss的jvm健康状况_04

 而点击 “内存” 的话,就可以实时的、动态的查看到每个类实例对象的数量以及这些实例所占用的内存大小:

监控jboss的jvm健康状况 jvm 性能监控_jvm_05

在Profiler界面上,可以对CPU、内存进行性能分析,分析后会给出分析结果:

 

监控jboss的jvm健康状况 jvm 性能监控_jvm_06

 

2.4jvm 本地jdk监控远程服务

打开jvisualvm,双击 “远程” 选项,添加一个远程主机,即远程的服务器:

监控jboss的jvm健康状况 jvm 性能监控_jvm_07

然后编辑catalina.sh文件,在该文件中加入如下配置内容:
```c
[root@VM-0-5-centos ~]# vim /home/tomcat/apache-tomcat-9.5.8/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=106.52.186.223"

配置简单说明:

-Dcom.sun.management.jmxremote添加一个jmx远程连接属性
-Dcom.sun.management.jmxremote.port=9004 指定连接的端口号
-Dcom.sun.management.jmxremote.authenticate=false 是否启用验证
-Dcom.sun.management.jmxremote.ssl=false 是否启用ssl
-Djava.net.preferIPv4Stack=true 是否优先使用ipv4
-Djava.rmi.server.hostname=106.52.186.223 指定远程主机的ip地址
 

 

增加完配置后,重启Tomcat,查看是否有9004端口,有的话就代表配置成功了,如下:

[root@VM-0-5-centos ~]# netstat -lntp | grep java

回到jvisualvm中,添加JMX连接,配置连接地址和端口,如下:

监控jboss的jvm健康状况 jvm 性能监控_jvm_08

 

同样的,可以像监控本地进程一样,监控远程的进程,在界面的操作上是一模一样的。唯一不同的也就是需要添加一个远程主机,然后到远程的Java进程上配置一些jmx参数而已:

以上我们是以Tomcat这种服务型的进程作为一个示例,只需要去配置Tomcat的脚本文件就可以了。那么如果我们需要监控的是自己线上跑的一个Java进程需要怎么进行配置呢?

方式一

使用这些参数,只不过是作为启动参数,在启动项目的时候加上即可,如下:

[root@VM-0-5-centos ~]#  nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=106.52.186.223 -jar boke-2.0.jar  > /data/mylog.log 2>&1

方式二

编辑/etc/profile文件,在该文件中加入如下配置内容:

[root@VM-0-5-centos ~]# vi /etc/profile
export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=106.52.186.223"

成功启动后,也是使用同样的方式进行连接,注意端口不要弄错了: