gdb - 如何调试从 lustre 读取产生的悬挂作业?
问题描述
我有一份处于可中断睡眠状态(S)的工作,挂了几个小时。
- 不能使用 gdb(附加到 PID 时 gdb 会挂起)。
- 无法使用 strace,strace 将恢复挂起的工作 =(
WCHAN 字段显示 PID 正在等待 ptlrpc。网上搜索了一下,貌似这是个光彩操作。打印文件还显示该程序卡在从 lustre 读取数据。关于如何进行诊断的任何想法或建议?或者挂起发生的可能原因?
解决方案
您可以检查/proc/$PID/stack
客户端以查看整个进程堆栈,这将为您提供有关进程正在做什么的更多信息(ptlrpc_set_wait()
只是通用的“等待 RPC 完成”功能)。
也就是说,更有用的是检查内核控制台错误消息(dmesg
和/或/var/log/messages
)以查看发生了什么。当出现问题时,Lustre 绝对不会羞于记录错误。
这很可能表明客户端正在服务器上等待完成 RPC,因此您还必须检查dmesg
和/或/var/log/messages
查看服务器上的问题。有几个现有的文档详细介绍了如何调试 Lustre 问题:
- https://wiki.lustre.org/Diagnostic_and_Debugging_Tools
- https://cug.org/5-publications/proceedings_attendee_lists/CUG11CD/pages/1-program/final_program/Wednesday/12A-Spitz-Paper.pdf
此时,您可能最好在 https://jira.whamcloud,com/ 上检查现有的 Lustre 错误,以搜索报告的第一条错误消息,或者可能是堆栈跟踪。很有可能(取决于遇到的错误)已经有可用的修复程序,升级到最新的维护版本(当前为 2.12.7)或应用补丁(如果最近修复了错误)将唯一你的问题。
推荐阅读
- electron - 为什么 Select2 不会覆盖 Electron 中的正常选择框?
- python - Pandas str.replace 完全匹配重复字符
- arrays - 从列表中随机选择值并从列表中删除该项目
- c# - 从 Azure Functions(c#)通过代理连接到 REST API
- c# - AutofacWebApiDependencyResolver 方法不存在
- python - 将一系列字符串转换为一系列 pandas Timestamp 对象
- c++ - 按下时将图像添加到按钮
- docker - Elasticsearch 和 kibana docker 映像无法正常工作
- snowflake-cloud-data-platform - 变体列中唯一元素的雪花查询性能
- coredns - CoreDNS 未进入就绪状态