새로운 Linux el6.x86_64 서버가 있고 모든 작업(주로 java/C++/python/shell) 프로세스를 이 새 서버로 옮긴 후 프로세스가 느리게 실행되는 것을 관찰했습니다. 예를 들어, 이전 서버에서 실행된 Python 스크립트는 30분 안에 완료되고 새 서버에서 처리하는 데 4시간이 걸립니다.
다음은 새 서버의 CPU 사용량 통계(top을 사용하여 캡처)로, 한 번에 하나의 활성 작업만 표시합니다. 다음 사항을 이해하는 데 도움이 필요합니다.
- CPU가 32개라면 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 바인딩이 아닌 프로세스)의 성능을 향상시키기 위해 할 수 있는 일이 많지 않습니다. 그러나 때로는 메모리 액세스 및 메모리 캐시 병목 현상이 발생하는 경우도 있습니다. 예를 들어, 컴퓨터에 여러 개의 CPU가 다음을 통해 함께 연결된 경우누마연결 및 프로세스가 이러한 CPU 간에 자주 이동하므로 CPU가 메모리에 자주 액세스해야 하는 상황이 있을 수 있습니다.누마다른 CPU를 통한 연결(다른 CPU에 연결된 메모리는 직접 연결된 것보다 더 빠르게 액세스될 수 있습니다.이것'CPU).
cpuset(1) 명령을 사용하여 프로세스를 특정 CPU에 고정하는 것이 좋습니다. 이것이 작동한다면 다양한 Kenel NUMA 동작 조정 매개변수도 조사해야 합니다.
다음을 추가하도록 편집되었습니다.또 다른 우려 사항은 전원 관리입니다. 아마도 절전 프로세스로 인해 CPU 주파수가 줄어들고 있는 것 같습니다. cpupower(1) 명령을 사용하여 VPU 전원 관리 설정을 확인하고 설정할 수 있습니다.