
Ich verwende die Linux-Distribution Debian 8 auf zwei verschiedenen PC-Konfigurationen. Die erste Konfiguration, die Sie unten sehen, ist die, die ich schon sehr lange verwende. Diese Konfiguration nutzt zu Spitzenzeiten 100 % der CPU, daher habe ich beschlossen, einen neuen PC mit viel höheren Spezifikationen zu kaufen. Ich verwende eine alte 32-Bit-Linux-App namens samp03svr, die vor mehr als 10 Jahren auf den Markt gekommen ist. Dies ist eine Single-Thread-App, daher habe ich nur nach einer CPU mit hoher Frequenz gesucht. Xeon-Prozessoren würden mir nicht helfen. Die App benötigt eine höhere CPU-Frequenz als die Anzahl der Kerne.
Hier sind meine PC-Konfigurationen:
Eine ältere Konfiguration Motherboard: ASUS P8H61-M Prozessor: Intel i5-3570 @ 3,4 GHz RAM: 2x8GB Kingston 1333MHz
Eine neuere Konfiguration Motherboard: B250M-D3H-CF Prozessor: i7-7700K CPU @ 4,20 GHz RAM: 2x8GB Kingston 2133MHz
Ich hätte von der neueren Konfiguration eine deutlich geringere CPU-Auslastung erwartet, aber überraschenderweise ist das nicht der Fall. Tatsächlich ist die CPU-Auslastung etwa fünfmal höher als bei der älteren Konfiguration. Die Tests, die ich durchgeführt habe, wurden mit der gleichen Arbeitslast, dem gleichen Betriebssystem und den gleichen Treibern durchgeführt. Ich habe sogar versucht, Multithreading zu deaktivieren, aber es gibt keinen Unterschied in der CPU-Auslastung.
Was würden Sie empfehlen?
Antwort1
Wenn Ihr Ziel darin besteht, die Nachfrage während der von Ihnen genannten Spitzenzeiten zu decken, würde ich, wenn möglich, in Erwägung ziehen, das Serverprogramm auf beiden aktuellen Maschinen auszuführen und sie hinter einen Load Balancer wie haproxy zu stellen.
Wenn Ihr Ziel hingegen darin besteht, die CPU-Auslastung Ihres Serverprogramms zu reduzieren, stehen Ihnen mehrere Optionen zur Verfügung.
Sie können die Priorität Ihres Prozesses senken, damit der Kernel seine CPU-Zeit so einteilt, dass er Ihre CPU nicht dominiert. Dies kann mit den Befehlen nice
oder erfolgen renice
. Unter Debian reichen die Prioritätswerte von -20 bis +19, und der Standardwert (Starten eines Prozesses ohne Verwendung von nice) ist 0. Je höher der Wert, desto niedriger ist die Priorität. Es ist leicht zu merken, wenn Sie es sich so vorstellen: „Je netter ein Prozess ist, desto eher ist er bereit, seine CPU-Zeit an andere Prozesse abzugeben.“
Starten Sie Ihr Programm wie folgt mit unterschiedlichen Niceness-Werten:
nice -n +12 /path/to/your/program
Wenn Ihr Programm bereits läuft, können Sie es renice
mit seiner PID verwenden:
#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)
Eine weitere Möglichkeit ist die Verwendung eines Tools namens cpulimit
. Damit können Sie ein Programm ausführen und den maximalen Prozentsatz der CPU festlegen, den Sie ihm zugestehen möchten.
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program