Tomcat开启jmx监控及常见故障排查

开启jmx监控

先关闭tomcat服务
/app/tomcat/bin/shutdown.sh

编辑bin目录下catalina.sh文件在119行添加一下内容:

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.8.19 -Dcom.sun.management.jmxremote.rmi.port=8888"

注:tomcat8.5版本以后需要写在一行,否者无法正常开启
在这里插入图片描述

查看一下8888端口是否已经开启
在这里插入图片描述
除了指定的8888端口以外还会生成两个随机的端口,如果你是在云服务器上部署的话必须配置放行策略。

接下来在Windows打开jconsole(安装了jdk的情况下),一般在C:\Program Files\Java\jdk1.8.0_202\bin\jconsole.exe
在这里插入图片描述
选择不安全的连接
在这里插入图片描述
可以看到如下信息
在这里插入图片描述
还有一个工具是jvisualVM,我的在C:\Program Files\Java\jdk1.8.0_202\bin\jvisualvm.exe
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tomcat常见故障及排查

  • tomcat随机启动故障

在/etc/rc.d/rc.local下明明添加了/app/tomcat/bin/startup.sh但是下次开机的时候发现tomcat没有起来,查看日志:
在这里插入图片描述
发现线程被destroy掉了,原因是当初安装jdk的时候采用二进制的方式安装导致有些环境变量tomcat无法匹配到导致的,只需在/etc/rc.d/rc.local添加多一条. /etc/profile即可。

  • tomcat运行占用大量swap内存而物理内存占用较少

遇到该原因可能有以下两方面的原因造成的:
1.开发写的代码有bug
2.没有优化linux内核参数vm.swappiness=0(是否优先使用物理内存,值越小越优先)

  • tomcat负载过高

排查流程:

  1. 使用vmstat、top、ps aux找出那个进程导致的问题
  2. 通过top -Hp javaPID找出是哪个java线程的问题
  3. 将有问题的线程ID转换为16进制。echo ‘obase=16;ThreadID’|bc
  4. 使用jstack命令显示java进程信息。jstack 进程ID|grep -i -A 10
  5. 使用jmap命令显示java jvm信息。jmap -heap javaPID
  6. 导出jvm内存的内容。jmap -dump:format=b,file=/root/tomcat.bin PID
  7. 导出来之后使用mat工具进行分析:
    在这里插入图片描述
    在这里插入图片描述
    我相信大多数人还是能看懂的,如果不相信的话那就要找开发人员一起分析了。

猜你喜欢

转载自blog.csdn.net/nmb_jiang/article/details/106150413
今日推荐