我在以下bash脚本中并行运行卷曲背景进程thounsand
START=$(date +%s)
for i in {1..100000}
do
curl -s "http://some_url_here/"$i > $i.txt&
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
done
我有49Gb Corei7-920专用服务器(非虚拟)。
我通过top
命令跟踪内存消耗和CPU ,它们离界限很远。
我ps aux | grep curl | wc -l
用来计算当前卷曲过程的数量。这个数字迅速增加到2-4千,然后开始连续下降。
如果我通过管道卷曲到awk(curl | awk > output
)添加简单的解析,则卷曲过程数只会增加到1-2千,然后减少到20到30 ...
为什么进程数量如此急剧减少?这种架构的界限在哪里?
我也建议使用
—
zhenech
parallel(1)
:对于这样的任务manpages.debian.org/cgi-bin/...
尝试
—
暂停,直到另行通知。
start=$SECONDS
并end=$SECONDS
-习惯使用小写或大小写混合的变量名,以避免潜在的名称与shell变量冲突。但是,实际上,您实际上只会获得每个过程开始的时间间隔越来越大的问题。由于该过程处于后台(并且start
仅计算一次),因此您不会花费多长时间。在Bash中,您可以(( diff = end - start ))
删除美元符号并允许间距更灵活。使用pgrep
如果您有它。
我同意HBruijn。请注意,如果将进程数加倍(通过添加
—
暂停,直到另行通知。
awk
),则进程数将减半。
@zhenech @HBrujin我启动了
—
zavg
parallel
,它说由于文件句柄的系统限制,我可能只运行500个并行任务。我提高了limits.conf的限制,但是现在当我尝试运行5000个simulaneus作业时,它甚至在开始之前就立即吞噬了我所有的内存(49 Gb),因为每个parallel
perl脚本都吞噬了32Mb。
ulimit
将显示其中一些限制。