当前位置:首页 > 内存 > 正文

linux内存泄漏工具(windows 内存泄露检测工具)

  • 内存
  • 2024-08-10 18:29:32
  • 1821

一、LinuxKernel模块内存泄露分析

如果你已经用“free”确认了内存几乎耗尽,但是用top/ps命令看不到用户态应用程序占用了过多的内存,那么内核模块可能存在内存泄漏

SLAB是Linux内核中的一个内存分配器,根据对象的大小进行分配。

利用SLAB信息显示内核模块占用的内存空间:

方法一。查看meminfo文件

第二种方法。查看slabinfo文件

一般来说,查看slabinfo文件就足够了。如果发现slabinfo占用的内存很大,可以断定是内核模块存在内存泄漏。
还有一个slabinfo命令其实也可以查看,因为它读取的是/proc。/slabinfo可见

Linux内核的Kmemleak检测到内存泄漏

让我们看看哪里。以下函数会导致内存泄漏吗?

上面的内容可能不太容易一眼看出哪里出了问题。其中kmalloc和kfree是成对出现的。

问题是参数是在pr_debug函数中传递的。熟悉函数调用中传递参数的人应该知道,编译器一般采用栈的方式来处理参数,这是最先进入的,而参数通常是按照相反的顺序执行的(由于函数的实现不同)编译器,这个过程是不确定的),所以kfree会先于kmalloc运行,导致每次运行时都会出现轻微的内存泄漏。

解决Linux内核中的内存泄漏问题

SlabAllocator

ProcInfo

使用CrashDebugger


二、SRS性能(CPU)、内存优化工具用法SRS提供了一组用于查找性能瓶颈和内存泄漏的工具。这些工具的使用方法在./configure&&make后面的总结中给出,但实用性不是很强,所以本文具体介绍一下使用方法。
本文中的所有工具对于其他Linux程序也很有用。
RTC是UDP协议。首先设置网卡的队列缓冲区。UDP分析常用的命令如下:
也可以修改系统文件/etc/,重启也会生效:
显示信息接收和发送数据包丢失:
显示接收和发送数据包的长度:
下面是netstat的一些参数:
PERF是Linux的性能分析工具,参见[PERF](perfrecord-eblock:block_rq_issue-ag)。
可以实时查看当前SRS热点功能:
或者记录某段时间的数据:
记录批量和查看调用图:
GPROF是一个GNUCPU性能分析工具。请参阅SRSGPROF和GNUGPROF。
用法:
GPERF是googletcmalloc提供的CPU和内存工具,参见GPERF。
GCP是一个CPU性能分析工具,通常称为性能瓶颈。它确定哪些函数调用使用了过多的CPU。参见GCP。
使用方法:
图形显示,CentOS上点安装:
然后生成可以用Chrome打开的SVG图片:
GMD是GPERF提供的内存防御工具,可以检测内存越界和野指针。在边界之外书写通常不会造成损坏。相反,当切换到其他线程使用损坏的对象时,会发现损坏。因此,在使用越界和野指针时可能很难修复此类内存问题。执行coredump并定位问题。参考GMD。
用法:
GMC是一个内存泄漏检测工具,参见GMC。
用途:
GMP是一个内存性能分析工具,例如检测是否由于堆内存的频繁使用和释放而导致性能问题。参见GMP。
用法:
VALGRIND是SRS3支持的著名C语言分析工具。由于ST在SRS3之前使用,所以ST必须打补丁才能使用。
系统调用性能问题排查,请参见Centos6性能分析工具合集。
在OSX/Darwin/Mac系统中,可以使用xcodeselect中的Instruments和OpenDevelopTools来显示Go对于仪器,也可以直接找到这个程序,参见Profilingc++onmacosx
还有DTrace可以使用,参见动态跟踪技术(第2部分)-Dtrace、SystemTap、FlameGraph或动态跟踪技术DTrace的简短讨论。
如果是多核,网卡的软中断一般发生在CPU0上,可以将SRS调度到其他CPU上:
或者指定SRS运行在CPU1:
自定义后,可以运行top,然后按Pure1数字代码文件。可以看到每个CPU的利用率:
或者使用mpstat-PALL:
如果是的话,网卡中断可以在多个CPU上使用,例如:B.4CPU,绑定多个CPU。可以通过以下命令查看网卡中断的绑定状态:
我们可以强制将网卡软中断绑定到CPU0上,参见Linux:scalingsoftirqamongmanyCPUcores和SMPIRQaffinity:
然后将SRS的所有线程绑定到CPU0以外的CPU:
如果想获得极高的性能,可以在启动SRS之前运行SRS启动脚本中的命令绑定core和绑定soft中断。
您可以将SRS置为更高的优先级,以获得更多的CPU时间:
您可以通过查看ps(NI字段)来了解该进程的好处: