我们正在使用带有嵌入式tomcat的springboot 1.3.3.RELEASE 。 该服务使用java 1.8.0_45在redhat Linux 2.6.32(64位)上运行。
在我们的加载环境中,我们注意到服务器已启动(java VM仍在运行)并响应非HTTP请求,但是通过SpringMVC Rest公开的HTTP请求不起作用,我们得到超时。
在比较健康和不健康系统之间的线程转储后,我们注意到在一个不健康的系统中缺少 http-nio- {port} -Acceptor 线程。
特别是从健康的机器中显示的转储从坏的丢失中丢失。
" HTTP-NIO-8080-接受器 - 0" #45 daemon prio = 5 os_prio = 0 tid = 0x00007f13fb9ef800 nid = 0x896b runnable [0x00007f146f3f4000]
java.lang.Thread.State:RUNNABLE at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) - 已锁定< 0x00000005cd5d0558> (一个java.lang.Object) 在org.apache.tomcat.util.net.NioEndpoint $ Acceptor.run(NioEndpoint.java:682) 在java.lang.Thread.run(Thread.java:745)
什么可能是Acceptor线程丢失的原因? 是否可以重新启动威胁,而无需重新启动整个应用程序? 这是我们无法为HTTP请求提供服务的原因吗?