内存泄漏会导致我的进程被杀死吗?

问题描述 投票:1回答:1

这是我的问题的简短描述:

背景:

硬件: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可能会将我的进程转为休眠模式,因为泄漏已经填满了分配给进程的内存?

linux memory-management memory-leaks malloc
1个回答
0
投票

关于你的第一个问题,OOM Killer将在oom_score(高内存消耗,对系统不太重要......)之后杀死一个或多个进程,以防系统内存少得多。因此,如果OOM Killer杀死主进程的子进程,这将使您的主进程变为僵尸。

对于第二个问题,如果没有针对此特定进程的资源,则Linux将进程置于休眠状态。但是在你的情况下,如果存在内存泄漏并且进程消耗大量内存,那么进程将被杀死然后进入休眠状态。

您是否在为应用程序使用UART?

顺便说一句,还有一个Toradex社区,工程师可以直接回答您的问题。

最好的问候,Jaski

© www.soinside.com 2019 - 2024. All rights reserved.