Java 性能调优并诊断性能问题(jconsole,jvisualvm)

8人阅读 评论(0) 收藏 举报
分类:

背景

在某次工作的环境中发生接口调用一段时间之后出现 gateway timeout 504 问题,并随着大量的请求数量增大导致所有的接口都无法进行访问,第一时间怀疑是 tomcat 的请求连接数或线程池被压满,后来利用本篇提到的方法进行跟踪发现了问题;所以记录了如何使用 JVM 调优工具对这个问题进行定位并有效分析之后进行解决。

初步查看(基于 Linux 系统)

  • 利用 top 查看 进程ID;
  • 利用 top -Hp 进程ID 查看线程数;
  • 利用 pstack 进程ID 查看线程堆栈等信息。

JVM 配置变量

配置以下 JVM 参数变量方便远程客户端工具进行监控。

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=6001
-Dcom.sun.management.jmxremote.rmi.port=6001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.16.1.10

注意:如果 java 程序跑在容器服务中(如:docker),则配置的端口号必须为 6001 ,否则将无法正常利用客户端工具进连接。

打开 jvisualvm 工具

我使用的是 Mac 电脑,所以对应的 JDK 目录及工具在 /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin 之中,直接打开 jvisualvm 输入 IP 地址与端口号即可。

IMAGE
图中右下角状态说明。

  • Running 线程正在运行;
  • Sleeping 线程睡眠中,也就是 Waiting;
  • Wait 线程等待中;
  • Park 线程等待中;
  • Monitor 阻塞状态,等待获取对象锁。

解决过程

打开调优工具之后,然后可以把服务进行重启,然后再查看目前 tomcat 所分配的线程数量(线程名格式:http-nio-8080-exec-1),然后再手动调用接口或程序来进行跟踪线程数量来查找问题进行解决;在大量的刷新接口之后,明显发现线程数进行大量的增加,然后我们点击右边的 Thread Dump 按钮把堆栈信息打印出来,下面两种图是随便挑选的两个堆栈信息,从而方便问题的分析。

图一

IMAGE

图二

IMAGE

结论

最后我们发现问题原来出现在连接池上面,导致大量的线程阻塞在获取连接处进行排队等待,所以我们加大了连接池的量最终解决了问题。

查看评论

JConsole&VisualVM监控总结

简介JConsole(以下写作jconsole),VisualVM(以下写作jvisualvm ) 都是比较好的JVM调优工具,且都属于JDK自带工具,可在命令行直接启动。应用示例Server端(需...
  • u012948976
  • u012948976
  • 2016-06-25 21:14:09
  • 2991

JVisualVM 进行性能分析及调优

VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具。它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览H...
  • wochunyang
  • wochunyang
  • 2016-10-14 10:19:00
  • 4092

jConsole, jVisualvm, btrace 使用体会

jConsole和jVisualvm(以下简称jVv)是jdk1.6及以上携带的java监控工具。btrace是一款可以在运行时更改执行代码的工具,在jVisualvm中有插件。 (由于jVisua...
  • ligeforrent
  • ligeforrent
  • 2017-07-13 23:29:52
  • 476

JVisualVM and JConsole

jvisualvm
  • nomad2
  • nomad2
  • 2011-05-06 20:51:00
  • 7113

Jvisualvm JTop包

  • 2016年08月10日 10:58
  • 9KB
  • 下载

JVisualVM、jconsole性能分析

官方网址 http://visualvm.java.net/download.html http://jiajun.iteye.com/blog/1180230
  • pdw2009
  • pdw2009
  • 2014-07-01 09:46:18
  • 681

jConsole,jvisualvm和jmap使用------观察java程序的运行,用于排错调优

Oracle JVM自带了一些工具,观察java程序的运行,用于排错调优。正文将会对 jConsole 、jvisualvm 和 jmap 进行简单介绍。 jConsole jvisual...
  • wenzhihui_2010
  • wenzhihui_2010
  • 2014-09-05 14:41:02
  • 612

JDK 内置工具 jstack,javah,jps,jstat,jmap,jinfo,jconsole,jhat,jdb,jvisualvm 的作用和使用

既然人家有了如此有条理的阐述,我就不再详细描叙了,详细地址:http://blog.csdn.net/fenglibing/article/details/6411999 做一个提纲提示自己各个命令都...
  • u012386696
  • u012386696
  • 2014-02-19 14:22:37
  • 2058

jconsole 和jvisualVM 监控远程 spring boot程序

在网上看了大部分教程都没有jconsole 和jvisual 对jar 包 的监控,要么是没有效果。 监控java 程序 增加启动参数  java  \ -Djava.rmi.server.hostn...
  • luosai19910103
  • luosai19910103
  • 2017-07-20 19:10:30
  • 2222

jvisualvm连接docker的tomcat

系统环境:Centos71.安装好docker;2.拉取centos7和tomcat7镜像:docker pull centos:7 docker pull tomcat:73.创建Dockerfil...
  • wang704987562
  • wang704987562
  • 2017-05-27 16:45:28
  • 646
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 1083
    排名: 4万+
    文章分类
    最新评论