Eine meiner Anwendungen läuft ungefähr 100 Arbeiter. Es begann als threading
Anwendung, aber Leistung (Latenz) Probleme wurden getroffen. Also habe ich diese Arbeiter in multiprocessing.Process
es umgewandelt. Der folgende Benchmark zeigt, dass die Verringerung der Last auf Kosten von mehr Speicherverbrauch (Faktor 6) erreicht wurde.Reduzierung des Speicherbedarfs durch Multiprocessing?
Woher kommt die Speichernutzung genau, wenn Linux Kuh verwendet und die Arbeiter keine Daten teilen?
Wie kann ich den Speicherbedarf reduzieren? (Alternative Frage: Wie kann ich reduzieren die Belastung für threading
?)
Benchmarks auf Linux 2.6.26, 4 CPUs 2G RAM: (Beachten Sie, dass die CPU-Auslastung in% einer CPU gegeben wird, so Volllast ist 400% . sind die Zahlen aus der Betrachtung Munin Graphen abgeleitet)
| threading | multiprocessing
------------------+-----------+----------------
memory usage | ~0.25GB | ~1.5GB
context switches | ~1.5e4/s | ~5e2/s
system cpu usage | ~30% | ~3%
total cpu usage | ~100% | ~50%
load avg | ~1.5 | ~0.7
. Hintergrund: die Anwendungsereignisse aus dem Netzwerk verarbeitet und in einer MySQL-Datenbank einige von ihnen zu speichern.