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工具进行分析:
    在这里插入图片描述
    在这里插入图片描述
    我相信大多数人还是能看懂的,如果不相信的话那就要找开发人员一起分析了。
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值