08-性能监控

nobility 发布于 2021-07-17 2228 次阅读


性能监控

对JVM运行期间的内部情况进行监控,比如JVM参数、CPU、内存、堆等信息,从而辅助进行新能调优以及解决程序运行时的一些问题,比如内存泄漏、线程死锁、锁争用、Java进程消耗CPU过高等

JDK自带的命令行工具

  • jps:(JVM Process Status Tool)主要用来输出JVM中运行的进程状态信息,没有名字的就是IDEA开发工具
  • jinfo:打印指定Java进程的配置信息
  • jstack:查看某个Java进程内的线程堆栈信息
  • jmap:查看某个Java进程的堆内存使用情况,需要指定显示方式,可使用 -histo:live参数
  • jstat:JVM统计监测工具,查看各个区内存和GC情况,使用-options查看所支持的哪些参数,指定参数进行查看
  • jstatejstated是JVM的jstat的守护进程,主要用于监控JVM的创建与终止,并提供结构,用来远程监控工具附加到本地系统上运行JVM
  • jcmd:JVM诊断命令工具,将诊断命令请求发送到正在运行的JVM,图形化工具就是使用该工具进行命令发送操作JVM的,比如可用来导出堆,查看Java进程,导出线程信息,执行GC等

图形化工具

jconsole

jconsole是一个JDK自带的,用于监视Java虚拟机的符合JMX的图形化工具,可监视本地和远程JVM,也可以监视和管理应用程序

直接在命令行中执行jconsole命令即可打开该图形化工具

jmc

jmc(JDK Mission Control)Java任务控制,包括用于监视和管理Java应用程序的工具,而不会引入通常与这些类型工具相关联的性能开销

jmc在1.8_202版本是伴随JDK一起发行的,现在需要单独下载,从Oracle官网下载JDK页面查找JMC下载即可

VisualVM

VisualVM是一个基于插件(Visual GC插件是必备插件)的图形化工具,提供了有关在Java虚拟机中运行的基于Java技术的应用程序的详细信息,通常使用该工具就够了

jvisualvm在1.8版本是伴随JDK一起发行的,现在需要单独下载,从GitHub官方网站上下载即可

远程监控连接方式

IP地址填写外网IP即可,在进行连接实验时将所有防火墙端口放行,而并非单单放行设置的两个端口,否则会出现连接不上的情况

JMX连接方式

JMX连接可查看系统信息、CPU使用情况、线程、手动执行垃圾回收等比较偏向于系统级层面的信息

在服务器中配置JMX的支持,需要在tomcat的bin/catalina.sh的第二行添加以下配置(应该是没有换行的):

CATALINA_OPTS="
-Xms800m -Xmx800m -Xmn350m -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=IP地址
-Dcom.sun.management.jmxremote.port=访问端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
"

jstatd连接方式

jstatd连接可查看JVM内存分布详细信息、垃圾回收分布图、线程、甚至可以查看某个对象使用内存的大小,所以在VisualVM中需要手动添加JMX后即可看到CPU使用情况

在服务器中配置jstatd的支持,需要在tomcat根目录自定义一个java.policy文件,根据JDK版本的不同挑选添加以下授权信息**(JDK是从Oracle官网下载的rpm包,并非yum在线安装的)**

若是JDK11使用下面配置

grant codebase "jrt:/jdk.jstatd"{
  permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat"{
  permission java.security.AllPermission;
};

若是JDK8使用下面配置

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

启动tomcat后,并执行jstatd -J-Djava.rmi.server.hostname=IP地址 -J-Djava.security.policy=java.policy -p 端口号 &命令,默认端口是1099

此作者没有提供个人介绍
最后更新于 2021-07-17