tomcat 的监控-排错


概述

未来通过各种监控工具(Zabbix/Grafana/Prometheus/....),监控Tomcat/java.
需要我们开启java远程监控功能(JMX remote)

步骤

tomcat配置中修改tomcat启动的选项.开启jmx远程监控功能.交给zbx就可以了(使用windows jdk连接tomcat).
catalina.sh 文件中125 后面
CATALINA_OPTS java环境变量,指定java启动的时候的选项
CATALINA_OPTS="$CATALINA_OPTS   \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=10.0.0.9"


⚠ 温馨提示:
1. 从tomcat 8.5开始 配置的每一行要通过\进行续行

image-20240806144428736

image-20240806144507484

windows下的操作

在windows下,通过jdk连接tomcat(模拟监控软件连接)
(C:\Program Files\Java\jdk1.8.0_201\bin\jconsole.exe

java故障案例


java命令

# a. jps
jps  java ps 命令,只显示java进程. 类似于 ps -ef |grep java


# b. jstack
jstack查看java进程内部信息,线程信息.
进程: 占空间,占系统资源,厂房.
线程: 厂房里面的工人,处理与用户的请求.
需要代码使用多线程技术. 通过ps aux 查看进程是否支持线程(是否使用多线程技术)

先过滤出java进程的pid
查看java进程的线程信息
jstack  1786
查看java线程状态
jstack  1786 |grep -i state
1、新建状态New;
2、就绪状态Runnable;
3、运行状态Running;
4、阻塞状态Blocked;
5、死亡状态Dead。


# c. jmap
jmap查看或导出jvm信息
查看jvm使用情况
1 jmap -heap java-pid 导出java进程的jvm内存使用情况.
导出jvm内存镜像
未来生产环境该文件较大.

jmap -dump:format=b,file=8081.hprof   1786
Dumping heap to /root/8081.hprof 
Heap dump file created
[root@web03 ~]# ll -h 8081.hprof 
-rw------- 1 root root 20M Sep 19 09:43 8081.hprof

mat分析工具

jvm内存映像文件,在windows/mac/ubuntu系统下通过MemoryAnalyzer Tool (MA/MAT)

1. 需要jdk环境
2. 软件包解压即可使用

 MemoryAnalyzer.exe
下载地址:https:Վˌwww.eclipse.org/mat/downloads.php

命令小结
jps-查看java进程信息(pid,进程名字),更加详细信息看ps 
jstack-查看java线程信息,过滤线程状态
jmap-查看jvm内存信息(导出)

image-20240806145422831

image-20240806145434973

java高负载排查

image-20240806145756299

image-20240806145811864

Java会话共享方案

image-20240806145845886