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请求了,故而应用会彻底挂掉;
转载:http://825635381.iteye.com/blog/2357619
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jstack命令是JDK中的一个工具,用于打印正在运行的Java进程的线程栈信息。它可以通过以下几种方式使用: 1. 使用jstack命令连接到正在运行的进程,通过指定进程ID来获取线程栈信息。例如,可以使用以下命令查看进程ID为19332的线程堆栈信息: jstack 19332 2. 使用jstack命令连接到已挂起的进程,通过指定进程ID来获取线程栈信息。在某些情况下,jstack命令可能没有响应,可以使用选项"-F"来强制打印线程栈信息。例如,可以使用以下命令查看进程ID为19332的已挂起进程的线程堆栈信息: jstack -F 19332 3. 使用jstack命令连接到核心文件(core file),通过指定可执行文件和核心文件的路径来获取线程栈信息。例如,可以使用以下命令查看可执行文件和核心文件的路径为"executable"和"core"的线程堆栈信息: jstack executable core 除了以上用法外,jstack命令还支持一些选项来获取更详细的信息。例如,选项"-m"可以打印Java栈和本地方法栈,选项"-l"可以打印关于锁的额外信息。 总结来说,jstack命令是JVM自带的Java堆栈跟踪工具,用于生成当前时刻的线程快照,以定位线程出现长时间停顿的原因。它还可以用于获取core文件的Java堆栈和本地方法栈信息,或者附属到正在运行的Java程序中查看实时的线程堆栈信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [jstack 命令解读](https://blog.csdn.net/qq_19922839/article/details/115379649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [jstack命令解析](https://blog.csdn.net/weixin_44588186/article/details/124680586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值