当前位置: 首页 > article >正文

线程阻塞排除

例子

例如这种情况,假如java用@Scheduled 注解标识了一个定时任务,这定时任务会去调用第三方接口,有天这个第三方接口挂了,这里也没有做任何处理,相当于一直在等待第三方接口响应,导致其他定时任务无法调度,如果我不知道是这种情况的前提下我怎么排除呢

使用 jstack 或 VisualVM 检查线程状态

jstack:你可以通过 jstack 获取当前线程的堆栈信息。如果你怀疑某个线程(例如定时任务的线程)处于阻塞状态,可以通过 jstack 输出线程堆栈,查看是否有线程被 wait、block 或处于 BLOCKED 状态。

先使用jps获取pid,再用jstack分析


jstack <PID> > thread_dump.txt

通过分析堆栈信息,检查是否有定时任务的线程卡在等待外部接口的响应。如果是阻塞在网络调用上,堆栈中应该会显示类似 SocketInputStream.read() 或其他阻塞网络相关的栈帧。

案例

使用jstack查看到如下信息
我们可以看到线程卡在了 com.example.ExternalApiClient.callApi(ExternalApiClient.java:30) 这个代码行。这个信息直接告诉我们,在 ExternalApiClient 类的第 30 行调用了外部 API,但是由于某些原因(可能是网络问题或外部 API 延迟),该线程一直等待响应,没有释放。

"thirdPartyApiCaller" #18 prio=5 os_prio=0 tid=0x00007f07e32a4800 nid=0x1c14 waiting for I/O [0x00007f07e352d000]
   java.lang.Thread.State: WAITING (on I/O)
       at java.net.SocketInputStream.socketRead0(Native Method)
       at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
       at java.net.SocketInputStream.read(SocketInputStream.java:170)
       at java.net.SocketInputStream.read(SocketInputStream.java:141)
       at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
       at sun.security.ssl.InputRecord.read(InputRecord.java:503)
       at sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1055)
       at sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1130)
       at com.example.ExternalApiClient.callApi(ExternalApiClient.java:30)

总结

使用


http://www.kler.cn/a/545320.html

相关文章:

  • 回归预测 | Matlab实现PSO-HKELM粒子群算法优化混合核极限学习机多变量回归预测
  • java项目当中使用redis
  • Hyper-V管理器连接服务器提示你没有完成此任务所需的权限
  • 深入浅出:Python 中的异步编程与协程
  • 【EI Scopus 双检索 | 稳定EI检索】第二届通信技术与软件工程国际学术会议 (CTSE 2025)
  • vscode环境搭建
  • 【个人开发】deepseed+Llama-factory 本地数据多卡Lora微调
  • 有关Java中的接口
  • 计算机网络(1)基础篇
  • 服务器使用centos7.9操作系统前需要做的准备工作
  • c++TinML转html
  • Broker: Unknown topic or partition 问题解决
  • 爬虫代码中如何设置请求间隔?
  • Android 原生层SurfaceView截屏
  • PL/SQL 变量以及数据类型(上篇)
  • 【React】react-redux+redux-toolkit实现状态管理
  • 基于WebAssembly的后端服务突破:打造高性能、安全的新型微服务架构
  • 27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。
  • Golang 进阶训练营
  • Rocky Linux系统修改网卡全攻略