据我所知,理论上每个 CPU 核心乘以 1 的因子可以找出最佳平均负载。因此,具有 8 个 CPU 核心的服务器的最佳平均负载为 8,16 个核心 = 16,依此类推。但是,当使用 Imagemagick 的 mogrify 时,我可以看到巨大的平均负载数字:
top - 14:00:44 up 9 days, 20:12, 6 users, load average: 130.37, 87.53, 56.94
Tasks: 588 total, 11 running, 577 sleeping, 0 stopped, 0 zombie
Cpu(s): 99.8%us, 0.2%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 49555072k total, 33129928k used, 16425144k free, 3813092k buffers
Swap: 23438824k total, 47276k used, 23391548k free, 26145156k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29490 user1 20 0 121m 33m 2728 R 240 0.1 9:10.52 mogrify
29337 user1 20 0 121m 33m 2728 R 234 0.1 12:01.94 mogrify
29882 user1 20 0 121m 33m 2728 R 231 0.1 3:57.54 mogrify
29232 user1 20 0 121m 33m 2728 R 223 0.1 11:34.54 mogrify
29514 user1 20 0 122m 33m 2728 R 223 0.1 9:22.84 mogrify
29689 user1 20 0 121m 33m 2728 R 219 0.1 7:28.18 mogrify
29204 user1 20 0 121m 33m 2728 R 206 0.1 12:21.33 mogrify
从中可以清楚看出top
- 服务器没有问题。此行为仅在调用时发生mogrify
。
为什么会发生这种情况?我该如何修复它或至少将其调低一点?
谢谢!
编辑:通常它们会运行那么长时间。服务器像往常一样响应迅速。我正在处理 618 张平均大小为 2.5 MB 的图像。负载分散在几台服务器上,输出top
看起来非常相似。我读过此主题我还没有测试过。在我看来,mogrify(或 Imagemagick)“高估”了 CPU。因此每个作业的 CPU 使用率超过 200%。
答案1
你正在进行图形处理。这本质上是 CPU 密集型的。
解决方案是停止进行图形处理,或者至少少做一点 - 更新正在调用的内容,mogrify
这样它就无法运行那么多并行任务。如果这不是一个选项,请分担负载(添加另一台服务器并将部分工作发送到那里)。
请注意,如果您的平均负载为 130,并且您的系统仍然响应并及时执行您需要它做的所有事情,那么您就没有问题,您有一个“问题”(它看起来不太好,乍一看任何系统管理员都会告诉您它可能是一件坏事,您应该看看我上面描述的解决方案,但如果它没有损害任何东西并且在您扩大规模时它不会变得更糟,您可以将其忽略为“此环境的正常现象”)。
答案2
我找到了解决方案。我对ImageMagick
6.5.1 和 6.5.7 两个版本进行了测试。旧版本随 Ubuntu Karmic 9.10 一起提供,新版本随 Ubuntu Lucid 10.04 一起提供。两个版本都是 64 位版本。我注意到 6.5.7 版本比 6.5.1 版本更快,并且不会给服务器带来太多负载。正如人们所预料的那样,它产生了正常的个位数负载。两个版本mogrify
都是多线程的。
所以,现在我很满意。如果我有空,我会检查一下具体的区别是什么。