使用GNU Parallel仅启动90个并发进程的原因排查
排查GNU Parallel未启动预期并发进程的问题
嘿,我来帮你分析下这个问题——你遇到的情况其实和GNU Parallel的工作逻辑以及配置密切相关,咱们一步步拆解排查:
1. 先搞懂GNU Parallel的并发调度逻辑
首先得纠正一个常见误解:GNU Parallel默认不会一次性启动所有任务,它会保持--jobs参数指定的进程数同时运行——旧的进程执行完毕退出后,才会启动新的任务补位。所以你用ps抓到的90个进程,只是某一时刻的并发快照,而非总任务数。
你可以先查下当前parallel的默认并行数配置:
parallel --showrc | grep jobs
如果输出里显示--jobs 90,那这就是核心原因——parallel被配置为最多同时跑90个进程,自然不会出现120个并发的情况。
2. 强制指定120个并发进程
如果你确实需要同时运行全部120个任务,直接在命令里加--jobs 120参数即可:
parallel --jobs 120 'node /home/parunkarthick/NodeProject/nodescript_pd.js F_CHARGES' ::: {1..20} ::: {1..6} | grep "Query Executed"|wc -l
(顺便把你的参数列表简化成{1..20}和{1..6},写起来更简洁)
3. 验证所有任务是否真的执行了
哪怕并发数是90,parallel最终还是会跑完所有120个任务。你可以去掉最后的grep | wc -l,加上--verbose参数跟踪每个任务的状态:
parallel --verbose --jobs 120 'node /home/parunkarthick/NodeProject/nodescript_pd.js F_CHARGES {} {}' ::: {1..20} ::: {1..6}
这样会打印每个启动的任务,你数一下输出条数,就能确认是不是120个任务都执行了。
4. 排除系统隐性限制
虽然你已经确认ulimit -u是2000,但还有几个地方可以检查:
- 系统进程总数限制:
cat /proc/sys/kernel/pid_max,这个值一般远大于120,不过确认下更放心 - 内存资源限制:用
ulimit -a看所有限制,尤其是内存相关的——如果你的node脚本吃内存较多,系统的OOM killer可能会悄悄杀掉部分进程(这种情况可以用dmesg | grep oom查日志)
5. 检查Parallel版本是否有坑
有些旧版本的GNU Parallel可能存在参数解析或调度的bug,你可以先看一下版本:
parallel --version
如果是2020年之前的老版本,建议升级到最新稳定版再测试。
内容的提问来源于stack exchange,提问作者arunb2w
相关产品推荐
相关产品推荐

