Tomcat正在运行但没有响应新请求

时间:2016-07-27 07:14:48

标签: java tomcat debian nio comet

我们的应用程序是使用CometProcessor开发的,用于提供长期连接。

但是,在建立多个连接然后丢弃之后(在任何时候,只有200个连接正在运行)。 Tomcat将停止响应新请求。

这是 server.xml

中的配置
%.d

Tomcat以以下 JAVA_OPTS

开始
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" acceptCount="50" processorCache="50" connectionTimeout="20000" keepAliveTimeout="20000" maxKeepAliveRequests="-1" maxThreads="500" acceptorThreadCount="2" maxConnections="-1" redirectPort="8443" />

服务器具有 3.7GB RAM和2个CPU核心

当发生这种情况时,我们也看到许多TCP连接进入CLOSE_WAIT状态。

-Djava.awt.headless=true -Xms512m -Xmx3072m -XX:MaxNewSize=768m -XX:MaxPermSize=192m -Xss4096k -XX:+UseConcMarkSweepGC

在CLOSE_WAIT状态下可以有多达200-300个连接

当我检查父PID状态时:

tcp6       1      0 10.36.0.29:8080         119.75.45.206:22621     CLOSE_WAIT  2936/java
tcp6       1      0 10.36.0.29:8080         10.36.0.85:50096        CLOSE_WAIT  2936/java
..

限制是:

Name:   java
State:  S (sleeping)
Tgid:   2936
Ngid:   0
Pid:    2936
PPid:   1
TracerPid:      0
Uid:    104     104     104     104
Gid:    107     107     107     107
FDSize: 1024
Groups: 107
VmPeak:  5583268 kB
VmSize:  5558668 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    405980 kB
VmRSS:    405980 kB
VmData:  5452352 kB
VmStk:       136 kB
VmExe:         4 kB
VmLib:     23304 kB
VmPTE:      2076 kB
VmSwap:        0 kB
Threads:        235
SigQ:   0/15034
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001002
SigCgt: 2000000181004ccd
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
Seccomp:        0
Cpus_allowed:   7fff
Cpus_allowed_list:      0-14
Mems_allowed:   00000000,00000001
Mems_allowed_list:      0
nonvoluntary_ctxt_switches:     2

HTOP显示CPU正在运行<5%而内存为843MB / 3774MB。事实上,Tomcat Log中没有显示任何内容,所有新请求都没有记录在catalina.out中。

所以,我试图分析PID:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15034                15034                processes
Max open files            4096                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15034                15034                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

发现这是旧Linux内核中的一个错误,但是,我们还将Linux内核更新为版本3.16:

sudo strace -p 2936
Process 2936 attached
futex(0x7f23022749d0, FUTEX_WAIT, 2937, NULL

一旦发生这种情况,重新启动Tomcat是唯一的出路。

这个问题困扰了我很长一段时间,所以任何帮助将不胜感激。

0 个答案:

没有答案