jstack详解 博客分类: JAVA进阶
程序员文章站
2024-03-12 10:30:08
...
jstack
http://www.open-open.com/lib/view/open1456744049953.html
http://wenku.baidu.com/link?url=XGRAXwZGpPIyvYzcs0fqOGazbnKWWy6tsuDk5XhPUmVI4Y9jOT5TiYf6JVq0sPGafvMJmZFs1dNDlNtovldedF5xwr9ViMvv6WdRSaTGkn_
(案例:转)公司的一个web应用项目运行了很长一段时间,达半年之久,前段时间突然出现了服务不可用的情况,所有的请求都不可达,服务彻底挂了。查看tomcat进程还在,cpu使用率低,一时没找着问题,重启了服务。过了两天,又出现了这种情况, 开始排查最近更新上线的代码,但是也没有发现可疑之处。
开始怀疑JVM内存不够用了,通过jmap/jstat查看后,也没有发现存在JVM内存不够用,或者GC太频繁或者是FGC耗时太久的情况。
接着下来用jstack -F pid 把所有的线程信息dump下来,发现了很多“Thread 2341: IN_NATIVE”的线程,而且都来自同一个类;定位到该类,里面用了socket去跟第三方接口做交互,而socket没有设置SoTimeout时间,这样的话,socket将永久地等待,直到inputStream有数据; socket.setSoTimeout(3000)之后,报出了很多Read timed out 的异常信息,很明显就是第三方接口出问题了。
所以出现故障的原因就是:一个http请求过来,tomcat接收到请求,分配一个worker Thread处理它,处理该请求的代码用到了前面提到的类,该worker Thread将永久处于socket.read()方法的wait状态或者说是IN_NATIVE状态;当时间一长,所有的worker thread都被占用,都处于socket.read()方法的wait状态后,tomcat没有worker thread处理任何的http请求了,故而应用会彻底挂掉;
推荐阅读
-
jdk-源码中的一些坑 博客分类: JAVA基础JAVA进阶JDK源码 jdkRunnableTask
-
jstack详解 博客分类: JAVA进阶
-
Java GUI绘制时钟 博客分类: Java JavaSEGUIJFrameJPanel时钟
-
java图形界面基础之画图(使用Graphics类从画图形到图片到gif) 博客分类: java图形界面基础java图形界面基础,事件机制 javaGraphicsJFramegif
-
java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程) 博客分类: java图形界面基础,事件机制 javaJFrame监听器事件机制
-
更改Java JFrame图标跟鼠标图标 博客分类: Java JavaJFrame更改图标更改鼠标图标
-
继之前的线程循环加到窗口中运行 博客分类: java javathreadJFrameJPanel
-
五子棋代码——请各位指教指教——只到判赢 博客分类: Java基础 五子棋Java基础JFrameJPanel
-
控件位置可以配置的Swing桌面 博客分类: Java2D SwingWordPressSpringXMLF#
-
Java图像渐变 博客分类: Java2D JavaBlog