linux - 确定嵌入式设备上是否存在内存泄漏

标签 linux memory-leaks embedded embedded-linux

我有一个基于 Linux 的嵌入式设备,在该设备上运行 QT GUI 应用程序以及控制某些硬件的第二个应用程序。两者通过TCP相互通信。

我最近运行了一个系统测试,我使用 Squish 刺激 QT 应用程序整整一周。在测试开始和结束时,我为两个进程分别提取 smap 和 pmap 文件。同样,我提取了 meminfo 文件。

如何比较之前和之后的文件,以大致了解整个设备是否存在内存泄漏问题?另外,如果检测到泄漏,我如何粗略地估计设备何时将停止正常运行?

最佳答案

How might I compare the before and after files to get a rough idea as to whether I have a memory leak problem for the device as a whole?

答案:

我认为您可能需要知道内核空间中使用了多少内存设备驱动程序,因此slab信息是值得研究的地方。

最初,您可以执行以下操作(运行脚本):

cat /proc/meminfo | grep -i Slab

监控值(长时间运行后的任何增加)。

如果确实如此,您可以借助 cat/proc/slabinfo 查看每个条目,将泄漏的泄漏与泄漏之前的泄漏进行比较。

如果您熟悉每个条目的名称(如果您确定它一定是该驱动程序中的泄漏并且大致了解它如何分配内存),您可以做出合理的猜测。

例如

size-4194304           0      0 4194304    1
kmem_cache           136    180    128   30

如果“kmem_cache 条目”泄漏,那么您的驱动程序可能会调用 kmem_cache_create 和 kmem_cache_alloc() 但不是免费的

如果是“size-4194304”,您的驱动程序可能会调用 get_zeroed_pa​​ge 或 _ _get_free_pages 但不是 free。

how might I make a rough, rough estimate as to when the device will stop functioning correctly

答案:

如果您的用户空间没有泄漏任何内存,并且泄漏仅发生在您的驱动程序中,您可以使用“free”命令来获取有多少可用的空闲系统内存。

然后就可以粗略计算一下会用多久:

(总可用内存(kbyte)/内存泄漏_速度(kbyte/s))=秒数。

,但是内核在此之前会提示。

关于linux - 确定嵌入式设备上是否存在内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265380/

相关文章:

linux - 停止 qt 写入/dev/tty0

php-fpm 重启后 PHP kill exec() 后台进程

linux - 如何在Ubuntu中搭建delphi开发环境?

iphone - 释放 managedObjectContext 对象 c

javascript - 有没有办法在测试中发现 JavaScript 内存泄漏?

c - 设置位的宏扩展

linux - 如何在特定时间内将内存使用量增加到特定级别

c - 如何在 linux 中获取当前进程名称?

c++ - 计算矩阵的行列式时内存泄漏

embedded - 将 ROMFS 附加到 RAM 中意味着什么?