使用xargs进行并行处理-在某些服务器上花费太多时间(〜8小时)
我有一个脚本,可以扫描整个文件系统,并对选择性文件堆进行一些处理。我正在使用xargs并行执行此操作。使用xargs而不是使用GNU parallel是因为我必须在100台服务器上运行此脚本,并且不能在所有服务器上安装实用程序。
所有服务器都具有以下配置
体系结构:x86_64 处理器:24 每个核心线程数:2 每个插槽的核心数:6 插座:2
我尝试增加进程数量,但超出了无济于事的地步。我在某处读到,如果脚本是受I / O约束的,则最好使进程数等于内核数。真的吗?
find . -type f ! -empty -print0 | xargs -L1 -P 10 -0 "./process.sh"
我相信上面的代码将使我的脚本具有I / O约束?
我必须扫描整个文件系统。如何优化代码,从而可以大大减少处理时间。
此外,我的代码仅需要处理文件系统中文件的并行处理。可以并行处理服务器。
答案 0 :(得分:1)
您需要找到瓶颈所在。
从您的问题尚不清楚您是否已找到瓶颈所在。
如果是CPU,那么您可以将我们的100台服务器与GNU Parallel一起使用,而无需在所有服务器上都安装GNU Parallel(顺便问一下parallel --embed
自20180322以来是否可用?)
您只需在sshlogins前面加上CPU线程数和/即可。因此,对于24个线程:
find ... |
parallel -S 24/server1,24/server2,24/server3 command
如果瓶颈是磁盘,那么使用更多服务器将无济于事。
然后最好获得更快的磁盘(例如SSD,镜像磁盘,RAM磁盘等)。
实际上无法预测磁盘上使用的最佳线程数。它只能被测量。我有一个40轴RAID系统,最佳数量是10个线程。