【发布时间】:2013-10-06 04:55:32
【问题描述】:
所以我的...错误...应用程序执行以下操作:
- 在队列中收听“工作”
- 每台服务器产生大约 100 个工作人员(跨约 3 个服务器),每个工作人员都在队列中侦听
- 每个工作人员基本上都会做一些网络工作(ssh、snmp 等)(I/O 密集型),然后搅动输出(CPU 密集型)
我已经在multiprocessing 下工作了,而且效果很好。但是:每个工人使用的内存都比我想要的多(根据顶部,大约 30MB RES,450MB VIRT)。所以我有两个问题:
对我来说确定开销为何如此之高的最佳方法是什么?我猜 COW 运行得不太好......我可以使用哪些模块在多处理之前获取所有主线程内存的快照,以便我可以尝试减少初始占用空间?
鉴于我的大部分进程都受 CPU 限制,将我的代码移植到 gevent/twisted 是否有好处?我想利用每台服务器的双六核。
谢谢!
【问题讨论】:
-
30MB 真的太高了吗?即使其中大部分是共享的?
标签: memory multiprocessing twisted cpu gevent