HPC多任务提交报错:tmp内存不足与文件缺失问题求助
解决HPC上runSPRING.pl内存不足及文件缺失问题的建议
看起来你在批量运行SPRING分析时碰到了内存资源不足和中间文件缺失的连锁问题,我来帮你拆解问题根源并给出具体的解决办法:
问题根源拆解
核心问题:内存资源不足
报错里明确提示memalign could not allocate memory of 1874100330 bytes,这说明单条runSPRING.pl命令的内存需求已经和你申请的25G资源接近,而你同时并行运行6条命令,内存需求直接叠加,导致系统无法分配足够内存,进而中断了hhblits进程。
另外注意你脚本里的#PBS -m mem=25G是笔误,PBS的资源请求参数应该是-l,正确写法是#PBS -l mem=25G。衍生问题:中间文件缺失
因为hhblits内存分配失败,导致关键中间文件P06340_P43629A.a3m没有生成,后续的cp命令找不到目标文件,自然触发报错。
具体解决建议
1. 调整作业运行策略,避免内存竞争
不要同时并行运行多条runSPRING.pl命令,改成串行执行或者拆分单任务单独提交作业:
- 串行执行方案:让一条命令完全跑完再执行下一条,这样内存只需要满足单个任务的需求,脚本修改如下:
#PBS -l nodes=1:ppn=12 #PBS -l walltime=2:00:00 #PBS -l mem=32G # 适当调高内存预留,避免卡边界 #PBS -V #PBS -M kalyani.dhusia@einsteinmed.org #PBS -N spring_kaly cd $PBS_O_WORKDIR module load python/2.7.8/gcc.4.4.7 module load perl/5.28.0/gcc.4.9.2 module load numpy/1.9.0/python.2.7.8 module load cython/0.22/python.2.7.8 # 串行执行,完成一条再启动下一条 ./springdb/source/runSPRING.pl -seqname Q96F46_Q8NFR9 -datadir ./KALYANI/Q96F46_Q8NFR9 ./springdb/source/runSPRING.pl -seqname Q29983_Q68D85 -datadir ./KALYANI/Q29983_Q68D85 ./springdb/source/runSPRING.pl -seqname Q9Y5H8_Q9Y5E6 -datadir ./KALYANI/Q9Y5H8_Q9Y5E6 ./springdb/source/runSPRING.pl -seqname P13688_P08514 -datadir ./KALYANI/P13688_P08514 ./springdb/source/runSPRING.pl -seqname P07333_P29322 -datadir ./KALYANI/P07333_P29322 ./springdb/source/runSPRING.pl -seqname Q13349_P05556 -datadir ./KALYANI/Q13349_P05556 - 拆分单任务方案:把每个
runSPRING.pl命令单独写成一个PBS脚本提交,这样每个任务都能获取独立的内存资源,彻底避免竞争。
2. 精准匹配内存资源
先测试单个任务的实际内存需求:
- 提交一个仅运行单条
runSPRING.pl的测试作业,用qstat -f <作业ID>或者HPC节点的监控工具查看内存使用峰值,再根据实际数值调整mem参数(比如如果峰值是8G,申请10G即可,避免资源浪费)。
3. 检查临时目录状态
报错里的中间文件存放在/tmp/kdhusia/,需要确认:
- 该目录存在且你有读写权限;
/tmp分区有足够的剩余空间存放中间文件;- 如果
/tmp空间不足,可以手动指定临时目录:提前创建一个专属临时目录(比如/gs/gsfs0/users/kdhusia/my_tmp),然后在脚本开头添加export TMPDIR=/gs/gsfs0/users/kdhusia/my_tmp,让SPRING把中间文件写到这个目录。
4. 解除用户级内存限制
在脚本里添加ulimit -v unlimited,避免HPC节点的用户级内存限制干扰作业运行。
5. 先调试单条命令
先单独运行一条runSPRING.pl命令,确认没有内存和路径问题后,再批量处理。比如用这个测试脚本:
#PBS -l nodes=1:ppn=12 #PBS -l walltime=0:30:00 #PBS -l mem=10G #PBS -V #PBS -M kalyani.dhusia@einsteinmed.org #PBS -N spring_test cd $PBS_O_WORKDIR module load python/2.7.8/gcc.4.4.7 module load perl/5.28.0/gcc.4.9.2 module load numpy/1.9.0/python.2.7.8 module load cython/0.22/python.2.7.8 ./springdb/source/runSPRING.pl -seqname Q96F46_Q8NFR9 -datadir ./KALYANI/Q96F46_Q8NFR9
小补充
你脚本里的wait命令其实没必要,因为你是顺序执行命令(没有加&后台运行),wait不会起到任何作用。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

