我试图运行一个计算密集的python程序,内存占用量很大(约300Mb),受我的本地计算机,运行Windows 7 64位的4核i5英特尔w / 4GB RAM的限制。 我决定通过在数据集的3个分区上运行3个python进程来手动多处理MIMD样式,因为python只会将25%的cpu用于单个控制台。这些进程一直在缓慢运行,每个进程为25%cpu,内存为~300Mb。但是,我仅限于将此一台计算机用于所有工作流程,并希望利用AWS EC2卸载计算。
我创建了3个Ubuntu 14.4 EC2实例,每个实例有1个虚拟CPU和1GB RAM,复制了确切的数据集和代码,并试图运行(通过屏幕和sudo nohup python program.py&)三个相同的程序,每个VM上一个。
然而,ubuntu实例上的内存使用率要高得多,达到100%的使用率并导致内存错误。
是什么导致Ubuntu和Windows之间的内存使用差异,以及我可以做些什么来解决它,假设我已经优化了我的程序(即避免侵入式代码重构)?
我已经查看了unix上的内存限制,但我相信这只会导致我的程序更快地出现内存错误。
下面是我的背景python进程终止后dmesg的示例输出。
[ 1326.630939] python[1200]: segfault at 24 ip 0000000000537632 sp 00007fff55111400 error 6 in python2.7[400000+2bd000]
我在两台机器上运行Standard Python 2.7.6,并且只使用numpy除外的标准模块。 我看到了这个thread,并在python和ubuntu上检查了我的64位。
每台Ubuntu EC2机器只运行一个进程:
$ screen
$ sudo nohup python program.py &
top
显示python.exe在99%cpu下平稳运行,从低内存开始,但内存%缓慢增长。
我的本地Windows机器我打开了3个shell并在每个
中执行$ python program.py
TaskManager显示所有3个python进程的平坦,一致的内存使用情况。