我正在运行一个内存密集型的c ++应用程序,它被内核杀死,因为内存使用率过高。我本以为当ram变满时,操作系统会自动使用swap。但是,我不认为我的交换空间正在被利用。
我已阅读以下两个问题,但我无法将其与我的问题联系起来。
" How to avoid running out of memory in high memory usage application? C / C++"
Who "Killed" my process and why?
如果有人能给我一些提示/指示我可以解决这个问题,我将不胜感激。感谢。
编辑:我在64位机器linux机器上运行我的应用程序。我的ram和swap分别是6gb和12gb。
答案 0 :(得分:2)
我怀疑你的进程要求的内存比现有的多。在您知道的情况下,您将要使用您要求的内存,您需要禁用内存过量使用:
echo 2 > /proc/sys/vm/overcommit_memory
和/或把
vm.overcommit_memory=2
在/etc/sysctl.conf中,这样设置就可以重新启动。
如果您的进程在具有16 GB RAM +交换的计算机上要求32 GB的RAM,那么您的malloc()
(或new
...)呼叫可能会很好地成功,但一旦您尝试使用那个记忆你的过程会被杀死。
答案 1 :(得分:0)
也许您有(虚拟)内存耗尽并且正在尝试分配一个操作系统无法找到的大块内存作为连续的块? 例如,一个数组需要这个,但如果你在堆上创建一个大的链表,你应该能够分配非连续的内存。
您要分配多少内存以及如何分配,并且您是否拥有足够的免费资源?如果您调试应用程序,当进程被杀死时会发生什么?