我有一个基于 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_page 或 _ _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/