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

查看进程的线程状态、线程数,排查线程死锁问题

通过查看进程的线程状态、线程数,排查线程死锁问题!!!

Claude Code排查这个问题用了一整天!!!,中间它甚至怀疑过设计问题、使用开源框架版本问题、配置问题 /(ㄒoㄒ)/~~## GDB 调试方法### 1. 检查进程线程数量


```bash
ps -eLf | grep 你的进程名称 | wc -l
```如果线程数量正常但只有部分线程输出日志,说明有线程阻塞。### 2. 查看所有线程列表```bash
gdb -batch -ex "info threads" -p <pid>
```输出示例:
```
[New LWP 649200]
[New LWP 649201]
...
This GDB supports auto-downloading debuginfo...
[Thread debugging using libthread_db enabled]
Using host libthread_db library...
```### 3. 查看所有线程堆栈```bash
gdb -batch -ex "thread apply all bt" -p <pid>
```关键输出分析:**正常线程(在 sleep):**
```
Thread 17 (Thread 0x798a5ebbb6c0 (LWP 649205) "你的进程名称"):
#2  0x0000611409b9922b in std::__1::this_thread::sleep_for(...)
#3  ........
#4 .......
```**死锁线程(在 futex_wait):** ``` Thread 16 (Thread 0x798a5d6a56c0 (LWP 649206) "你的进程名称"): #0 futex_wait (private=0, expected=2, futex_word=0x6114215a98a8) #1 __GI___lll_lock_wait (futex=futex@entry=0x6114215a98a8) #2 0x0000798a636a0101 in lll_mutex_lock_optimized (mutex=0x6114215a98a8) #3 ___pthread_mutex_lock (mutex=0x6114215a98a8) #4 0x0000611409b8c706 in std::__1::mutex::lock() () ```### 4. 分析死锁模式从堆栈可以看出死锁链:1. `DataProcessor::run()` 调用 `TimerTask::execute_expired_tasks()` 2. `execute_expired_tasks()` 持有锁,执行回调 `BlockManager::on_block_timeout()` 3. 回调调用 `TimerTask::remove_task()` 4. `remove_task()` 尝试获取同一个锁 → **死锁**### 5. 统计阻塞线程数量```bash gdb -batch -ex "thread apply all bt" -p <pid> 2>/dev/null | grep -c "futex_wait" ```如果多个线程都在 `futex_wait`,说明存在锁竞争问题。### 6. 检查锁地址不同线程等待不同锁地址表示各自独立的锁问题: ```bash gdb -batch -ex "thread apply all bt" -p <pid> 2>/dev/null | grep "futex_word=" ```### 调试技巧总结| 命令 | 用途 | |------|------| | `info threads` | 查看线程列表 | | `thread apply all bt` | 所有线程堆栈 | | `thread <n>` | 切换到指定线程 | | `bt` | 当前线程堆栈 | | `frame <n>` | 切换到指定栈帧 | | `p *mutex` | 查看锁状态 |

 

http://www.rkmt.cn/news/1456013.html

相关文章:

  • 2026年江苏实验室家具设备厂家推荐:PP实验台、通风柜、半导体家具、高氯酸/喷淋/自净化通风柜实力品牌盘点 - 品牌企业推荐师(官方)
  • 别再只设频率了!深入理解CST时域求解器的‘激励信号’与仿真终止条件
  • 降AI率天花板!AI率92%暴降至5%!实测10款降AIGC平台!薅羊毛技巧!
  • CST时域求解器收敛性实战:手把手教你设置Maximum Solver Duration和Accuracy,告别仿真警告
  • 终极指南:3步用OpenCore Legacy Patcher突破旧Mac系统限制
  • 量子近似优化算法(QAOA)实战:从理论到硬件实现
  • Hermes WebUI工作区路径信任级别:安全访问控制机制详解
  • 2026 盐城卫生间漏水维修免踩坑指南,靠谱的防水补漏公司权威推荐:卫生间、阳台、屋顶、地下室、飘窗、外墙漏水,专业防水公司TOP5口碑榜+全维度测评(2026年6月最新深度行业资讯) - 防水资讯
  • 5分钟掌握:高效歌词下载工具使用全指南
  • 为什么你的Mac鼠标体验总是不爽?3种安装方式让普通鼠标秒变专业神器
  • LabVIEW面向对象编程避坑指南:从‘device para’父类到‘network para’子类的完整创建流程
  • 5分钟快速上手:OpenCode AI编程助手完整本地部署与配置指南
  • HsMod炉石传说插件:解决玩家痛点的55项功能完整指南
  • Switch控制器PC连接终极指南:简单三步解决所有故障问题
  • 如何用Mermaid Live Editor彻底改变你的图表创作流程:免费在线编辑器的终极指南
  • 基于XC7A200T-L2SBG484E的PCIe高速数据采集系统设计:6.25Gb/s收发器实现
  • 【AI工具整合实战指南】:20年架构师亲授5大智能帮助系统无缝对接黄金法则
  • 3步终极指南:让普通鼠标在macOS上超越苹果触控板体验
  • 免费批量水印神器:3分钟让照片自动拥有专业拍摄信息
  • 别急着淘汰旧设备!用Apache+OpenSSL 1.1.1w打造一个兼容HTTP/2和TLS 1.3的‘时光机’服务器
  • LX Music桌面版:跨平台开源音乐聚合解决方案,解锁免费音乐新体验
  • 基于ESP8266与Home Assistant的智能温控器DIY全攻略
  • 2026 天津卫生间漏水维修免踩坑指南,靠谱的防水补漏公司权威推荐:卫生间、阳台、屋顶、地下室、飘窗、外墙漏水,专业防水公司TOP5口碑榜+全维度测评(2026年6月最新深度行业资讯) - 防水资讯
  • OptiScaler:打破显卡限制,让所有玩家享受高级上采样技术
  • AI元人文构想:新历史唯物主义——岐金兰智能时代理论总构想
  • Qwen2.5_7B_Instruct API详解:轻松集成到你的Python项目中
  • 解锁小爱音箱的音乐超能力:Xiaomusic让你的音箱变身智能音乐中心
  • dictalm2.0-instruct-fine-tuned对比分析:与其他希伯来语模型的终极性能比较指南
  • 跨平台泛中日韩字体工程实践:思源宋体的多语言排版解决方案
  • 惠普暗影精灵笔记本终极性能控制指南:3步解锁隐藏功率限制