M.N*_*M.N 5 apache tomcat tomcat6
有时,应用程序在承受负载时使用100%.
做一个kill -quit <pid>等待状态显示1100+螺纹:
Full thread dump Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode):
"http-8080-1198" daemon prio=10 tid=0x00007f17b465c800 nid=0x2061 in Object.wait() [0x00007f1762b6e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00007f17cb087890> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
- locked <0x00007f17cb087890> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
at java.lang.Thread.run(Thread.java:619)
"http-8080-1197" daemon prio=10 tid=0x00007f17b465a800 nid=0x2060 in Object.wait() [0x00007f1762c6f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00007f17cb14f460> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
- locked <0x00007f17cb14f460> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
at java.lang.Thread.run(Thread.java:619)
............
Run Code Online (Sandbox Code Playgroud)
即使取消部署应用程序上下文或重新启动数据库,状态也不会更改.
请提出可能的原因.
App Server:Apache Tomcat 6.0.26
最大线程数:1500
处于WAITING状态的线程:1138
“等待”不是问题。线程正在等待通知 - 在本例中它被锁定在 JIOEndpoint.Worker上
后台线程侦听传入的 TCP/IP 连接并将它们移交给适当的处理器。
所以我认为这是在等待实际请求的到来。
首先,当你有很多线程时,由于大量的上下文切换, CPU 利用率实际上会增加。你真的需要1500吗?你可以尝试减少吗?
其次,是否占用内存或 GC 过于频繁?
如果你看到这些, “等待”就会成为一个问题。您在堆栈跟踪中是否有任何 BLOCKED(在对象监视器上)或等待锁定()?
| 归档时间: |
|
| 查看次数: |
15700 次 |
| 最近记录: |