我已经通过make文件编译了我的cpp
文件。我也通过这个make文件运行我的文件。
这个多线程应用程序也使用99%的CPU。我使用Ubuntu 16.04.1 LTS
作为我的操作系统。
运行三天后,我意识到应用程序突然停止了,我在终端上看到了这个意外的错误消息。
Makefile:: recipe for target 'myMain' failed
make: *** myMain Killed
没有其他错误消息。此应用程序失败,没有异常错误消息。尽管没有人正在编写完整的证明申请,但我对我写的程序(关于失败)非常密切。
我之前从未见过make: *** something Killed
的消息。
不幸的是,这是一个我不能轻易重复的情况,看看有什么不对。
我想知道make
应用程序或Ubuntu
是否有任何机制可以在长时间运行并占用大量资源时终止任何应用程序?
更新
感谢用户 Basile Starynkevitch ,这是我从dmesg
收到的结果:
[351059.556308] Out of memory: Kill process 2794 (main) score 882 or sacrifice child
[351059.556318] Killed process 2794 (main) total-vm:30432908kB, anon-rss:13530324kB, file-rss:0kB
答案 0 :(得分:1)
您的程序最有可能是Linux内核OOM Killer的受害者。另请参阅此question and answers。
答案 1 :(得分:0)
内存不足:杀死进程
您最有可能将源代码编译为用户,并且您的环境受到ulimit -a
命令(内存或进程数)列出的资源限制的限制。一旦达到硬限制,该进程将被Linux内核终止。
如果你有足够的内存,可以增加这些限制(ulimit -Sv
),否则你需要增加机器的内存或添加一些extra swap space。
有关此行为的详细信息,请参阅:Kernel - Out Of Memory Management。
当机器内存不足时,旧的页面框架将被回收,但是尽管回收页面可能会发现即使以最高优先级扫描也无法释放足够的页面来满足请求。如果它确实无法释放页面框架,则会调用
out_of_memory()
以查看系统是否内存不足并且需要终止进程。