我的一个应用程序运行了大约100个工作进程。起初它是一个线程应用程序,但遇到了性能(延迟)问题。因此,我将这些工作进程转换为multiprocessing.Process。下面的基准测试显示,在牺牲更多内存使用(6倍)的代价下,成功减少了负载。
那么如果Linux使用cow且工作进程不共享任何数据,具体来说内存使用情况从哪里产生?
如何减少内存占用?(另一个问题:如何减少线程的负载?)
在Linux 2.6.26、4个CPU和2G RAM上进行基准测试: (请注意,CPU使用率以一个CPU的%为单位给出,因此满负荷为400%。这些数字是通过查看Munin图表得出的。)
那么如果Linux使用cow且工作进程不共享任何数据,具体来说内存使用情况从哪里产生?
如何减少内存占用?(另一个问题:如何减少线程的负载?)
在Linux 2.6.26、4个CPU和2G RAM上进行基准测试: (请注意,CPU使用率以一个CPU的%为单位给出,因此满负荷为400%。这些数字是通过查看Munin图表得出的。)
| 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
背景:该应用程序正在处理来自网络的事件,并将其中一些存储在MySQL数据库中。