首页 > 其他分享 >tomcat负载高查询方法

tomcat负载高查询方法

时间:2023-01-17 15:12:01浏览次数:42  
标签:负载 java tomcat 查询方法 util 线程 16983 ThreadPoolExecutor

整体思路与流程:

1 先定位tomcat的线程
2 各种导出统计线程、进程信息
3 与开发一起查看

基础排查流程:

1 通过ps aux/top命令排查出tomcat有问题
2 通过top -Hp tomcatpid
3 通过jmap命令和jstack命令 导出与显示进程的信息并过滤线程信息

例如:

top -Hp 16983 #查看到17015线程占用较高
jstack 16983 #这个显示的线程是16进制的 需要转换一下 
[root@localhost ~]# echo 'obase=16;17015'|bc
4277
[root@localhost ~]# jstack 16983|grep -A10 4277
"http-nio-8080-exec-5" #21 daemon prio=5 os_prio=0 tid=0x00007f71e47b8000 nid=0x4277 waiting on condition [0x00007f71b8961000]
   java.lang.Thread.State: WAITING (parking) #主要是看这个状态 看是否是RUNNABLE或者是锁定状态
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000e412a070> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:141)
	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)

4 辅助手段tomcat日志

显示jvm内存使用信息: jmap -heap 16983
jvm内存内容导出:jmap -dump:format=b,file=/root/tomcat.bin 16983
需要使用windown中memoryanalyzer软件查看

标签:负载,java,tomcat,查询方法,util,线程,16983,ThreadPoolExecutor
From: https://www.cnblogs.com/zops/p/17057851.html

相关文章