内存泄漏会导致我的进程被杀死吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存泄漏会导致我的进程被杀死吗?相关的知识,希望对你有一定的参考价值。
这是我的问题的简短描述:
背景:
硬件:Toradex Colibri VF61
分布:Angstrom v2014.12
内核版本:4.0.2-v2
软件语言:Qt / C ++
问题:我开发的应用程序需要在嵌入式产品上运行至少2周。我的问题是我的进程运行了5天,内存泄漏很少,我monitore whit“Top”,然后它被杀死了。 Top告诉我,我的过程变成了僵尸。
尝试1:我试图用Valgrind纠正内存泄漏,但是在我的程序中使用的库中有一些“可能”泄漏(很多都是malloc)。理解所有的图书馆是一项非常大的工作,而不是目标。
我认为内存泄漏大约是每天丢失的内存的1%,因此在2周内丢失了15%。这种泄漏对我来说是可以接受的,因为这个过程不会在2周后运行,并且嵌入式系统专用于这个过程,我没有在机器上运行任何其他大过程。 RAM监控显示该流程需要30%的资源,因此两周后估计为45%。
尝试2:我在Linux下询问了内存管理并了解了OOM-Killer。我推断OOM-Killer可以感觉到我的进程已经运行了太长时间,内存泄漏并将其杀死。所以我将我的进程的变量“oom_score_adj”设置为-1000以防止OOM-Killer杀死我的进程,我再次尝试运行我的内存泄漏很长时间。但是这次我的过程变成了“睡觉”而没有被杀死但是无法使用。睡眠状态与错误消息“错误输入'./app':malloc():内存损坏(快速):0x72518ddf”相关联。我确切地说我的代码中没有malloc,只在我使用的库中。
问题:
您是否认为像OOM-Killer这样的进程可能会将我的进程变成僵尸,因为我有内存泄漏并且我的程序已经运行了很长时间?
您是否认为Linux可能会将我的进程转为休眠模式,因为泄漏已经填满了分配给进程的内存?
关于你的第一个问题,OOM Killer将在oom_score(高内存消耗,对系统不太重要......)之后杀死一个或多个进程,以防系统内存少得多。因此,如果OOM Killer杀死主进程的子进程,这将使您的主进程变为僵尸。
对于第二个问题,如果没有针对此特定进程的资源,则Linux将进程置于休眠状态。但是在你的情况下,如果存在内存泄漏并且进程消耗大量内存,那么进程将被杀死然后进入休眠状态。
您是否在为应用程序使用UART?
顺便说一句,还有一个Toradex社区,工程师可以直接回答您的问题。
最好的问候,Jaski
以上是关于内存泄漏会导致我的进程被杀死吗?的主要内容,如果未能解决你的问题,请参考以下文章