
저는 2개의 서로 다른 PC 구성에서 Debian 8 Linux 배포판을 사용하고 있습니다. 아래에서 눈에 띄는 첫 번째 구성은 제가 오랫동안 사용하고 있는 구성입니다. 이 구성은 피크 시간대에 CPU를 100% 사용하기 때문에 훨씬 더 높은 사양의 PC를 새로 구입하기로 결정했습니다. 저는 출시된 지 10년이 넘은 samp03svr이라는 오래된 32비트 Linux 앱을 실행하고 있습니다. 싱글쓰레드 앱이라 고주파 CPU만 검색해봤습니다. Xeon 프로세서는 나에게 도움이 되지 않습니다. 앱에는 코어 수보다 더 높은 CPU 주파수가 필요합니다.
내 PC 구성은 다음과 같습니다.
이전 구성 마더보드: ASUS P8H61-M 프로세서: Intel i5-3570 @ 3.4 GHz RAM: 2x8GB Kingston 1333MHz
최신 구성 마더보드: B250M-D3H-CF 프로세서: i7-7700K CPU @ 4.20GHz RAM: 2x8GB Kingston 2133MHz
새로운 구성에서 기대할 수 있는 것은 CPU 사용량이 훨씬 낮다는 것입니다. 하지만 놀랍게도 이런 일은 일어나지 않습니다. 실제로 CPU 사용량은 이전 구성보다 약 5배 더 높습니다. 제가 수행한 테스트는 동일한 작업량, 동일한 운영 체제 및 드라이버를 사용하여 수행되었습니다. 멀티 스레드를 비활성화하려고 시도했지만 CPU 사용량 차이는 없습니다.
무엇을 하라고 권하고 싶나요?
답변1
귀하의 목표가 귀하가 언급한 피크 시간 동안 수요를 충족시키는 것이라면 가능하다면 현재 보유하고 있는 두 시스템 모두에서 서버 프로그램을 실행하고 이를 haproxy와 같은 로드 밸런서 뒤에 배치하는 것을 고려할 것입니다.
반면, 서버 프로그램의 CPU 소비를 줄이는 것이 목표라면 몇 가지 옵션이 있습니다.
커널이 CPU를 지배하지 않는 방식으로 CPU 시간을 예약하도록 프로세스의 우선 순위를 낮출 수 있습니다. 이는 nice
또는 renice
명령을 사용하여 수행할 수 있습니다. Debian에서 우선순위 값의 범위는 -20에서 +19이고 기본값(nice를 사용하지 않고 프로세스 시작)은 0입니다. 값이 높을수록 우선순위는 낮아집니다. "프로세스가 좋을수록 다른 프로세스에 CPU 시간을 더 많이 포기할 의향이 있습니다"라고 생각하면 기억하기 쉽습니다.
다양한 niceness 값을 사용하여 다음과 같이 프로그램을 시작하세요.
nice -n +12 /path/to/your/program
프로그램이 이미 실행 중이라면 renice
해당 pid와 함께 사용할 수 있습니다.
#first find the pid
pgrep your_program_name
#or
ps aux | grep your_program_name
#now use the pid here
renice -n +12 pid_of_your_program
#or if you are comfortable combining these
renice -n +12 $(pgrep your_program_name)
또 다른 옵션은 이라는 도구를 사용하는 것입니다 cpulimit
. 이를 통해 프로그램을 실행하고 허용하려는 CPU의 최대 비율을 정의할 수 있습니다.
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program