我们有一个新的 Linux el6.x86_64 服务器,将所有作业(主要是 java/C++/python/shell)进程移至该新服务器后,我们观察到进程运行缓慢。例如,在以前的服务器上运行的 python 脚本将在 30 分钟内完成,在新服务器上需要 4 小时才能处理。
下面是来自新服务器的 CPU 使用率统计信息(使用 top 捕获),其中一次仅显示一个活动任务。我需要你的帮助来理解以下内容:
- 如果有32个CPU,不是应该有32个任务并行运行吗?
- 所有这些 CPU 均在线,并通过 /sys/devices/system/cpu 进行验证。是否还有其他系统将 CPU 可用性设置得很低?
top - 02:04:04 up 5 days, 6:56, 32 users, load average: 3.63, 3.91, 3.47
Tasks: 1208 total, 1 running, 1207 sleeping, 0 stopped, 0 zombie
Cpu0 : 23.4%us, 3.0%sy, 0.0%ni, 73.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 15.4%us, 5.6%sy, 0.0%ni, 79.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 12.2%us, 1.0%sy, 0.0%ni, 86.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 3.9%us, 0.3%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 19.3%us, 2.0%sy, 0.0%ni, 78.4%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu5 : 6.9%us, 0.3%sy, 0.0%ni, 92.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 1.3%us, 0.0%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 1.0%us, 0.3%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 1.0%us, 0.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu16 : 42.2%us, 4.0%sy, 0.0%ni, 53.5%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu17 : 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu18 : 26.0%us, 2.0%sy, 0.0%ni, 71.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu19 : 0.7%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu20 : 53.8%us, 4.0%sy, 0.0%ni, 41.2%id, 0.0%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu21 : 29.3%us, 1.3%sy, 0.0%ni, 69.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu22 : 2.0%us, 0.7%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu23 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu24 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu25 : 0.7%us, 1.0%sy, 0.0%ni, 98.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu26 : 0.7%us, 1.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu27 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu28 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu29 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu30 : 2.6%us, 0.0%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu31 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 396867664k total, 391584344k used, 5283320k free, 414764k buffers
答案1
这些进程不会利用额外的核心来运行得更快,除非它们是通过使用线程或其他并行机制来设计的。
由于以下原因,Python 通常不擅长利用多核:吉尔(全局解释器锁)。您可以尝试使用“多处理”Python 模块来实现更多的软件优化。
除了购买具有更高时钟速度的 CPU 之外,您无法采取太多措施来提高单核(非 I/O 受限进程)的性能。但有时您会发现内存访问和内存缓存瓶颈。例如,如果您的计算机包含多个通过以下方式连接在一起的 CPUNUMA连接,并且进程在这些 CPU 之间频繁移动,可能会出现 CPU 必须频繁访问内存的情况NUMA通过其他 CPU 的连接(连接到另一个 CPU 的内存的访问速度可能比直接连接到 '这' 中央处理器)。
尝试使用 cpuset(1) 命令将进程固定到特定 CPU 可能是值得的。如果这有效,您还应该研究各种 Kenel NUMA 行为调整参数。
编辑添加:另一个需要关注的领域是电源管理,也许由于省电过程,CPU 频率正在降低。您可以使用 cpupower(1) 命令检查和设置 VPU 电源管理设置。