如何调试因读取lustre数据导致挂起的作业
进一步诊断步骤
- 采集进程内核态调用栈:无需附加进程,直接执行
cat /proc/<对应PID>/stack即可获取卡在ptlrpc阶段的具体内核函数,确认是RPC等待、锁竞争还是IO阻塞类型的挂起 - 排查Lustre客户端状态:
- 执行
lfs df确认所有 Lustre OST/MDT 都处于可用状态,无离线标记 - 执行
cat /proc/fs/lustre/osc/*/import查看OST导入状态,若存在reconnecting、inactive标记说明客户端到对应OST的连接异常 - 执行
lfs getstripe <卡住程序读取的目标文件路径>确认文件对应的OST列表,缩小排查范围
- 执行
- 检查节点系统日志:执行
dmesg | grep -E 'lustre|ptlrpc'查找是否存在RPC重传、连接超时、IO错误相关报错,同时结合sar -n DEV 1 10、ss -s排查节点网络是否存在丢包、连接数满等异常 - 排查Lustre服务端状态(如有权限):登录目标文件对应的OST节点,执行
iostat -x 1 10确认磁盘是否处于100%使用率的hung状态,查看服务端Lustre日志是否存在RPC堆积、服务异常退出的记录 - 检查Lustre挂载参数:执行
mount | grep lustre确认挂载的timeout、max_retry等参数是否设置过大,导致RPC异常后无限重试不返回
挂起现象的可能原因
- Lustre 网络通信故障:客户端到OST的链路丢包、防火墙规则变更、交换机故障,导致ptlrpc请求无法送达服务端,一直等待响应
- Lustre 服务端故障:OST对应的物理磁盘IO hung、Lustre OST服务崩溃,无法响应客户端的读请求
- 分布式锁冲突:读取的文件被其他进程持有Lustre分布式独占锁(ldlm),锁资源一直未释放导致读请求持续等待
- RPC队列堆积:客户端或服务端的ptlrpc处理队列塞满待处理请求,新的读请求无法被调度执行
- 目标文件损坏:文件部分stripe所在OST离线、stripe校验错误,触发Lustre读重试逻辑,无限循环重试无返回
内容的提问来源于stack exchange,提问作者llodds
相关产品推荐
相关产品推荐

