问题现象:进程读取文件Hang,单进程读取正常,多个进程同时读取出现Hang,多个进程若在同一台服务器上提交,也可正常运行。
问题分析:从现象来看,分析可能产生的原因。
1、linux下同时打开文件数达到最大值?
2、mount挂载时缺少相关参数导致?
第一个问题比较好排查,ulimit -a即可查看当前配置的open files大小,再通过lsof / |wc -l即可统计当前打开的文件数量,通过查看当前系统打开的文件数量还远远未达到限制。
第二个问题需要做几次验证测试,lustre挂载命令中有个参数localflock、flock、noflock,集群当前客户端挂载统一使用的是localflock,于是将flock、noflock分别添加进行测试
,测试结果发现localflock和flock效果相同,对我们的任务没什么影响,如果使用noflock,不加锁,任务提交会失败。
至此,设想的两种可能都被排除。
为了更深层次了解程序运行状况,使用gdb进行调试,查看程序到底是hang在了什么位置:
正如所预料的,有一个CPU使用率为0的进程,卡在申请锁上: