linux内核内存泄露检测

linux内核内存泄露检测,第1张

经常碰到系统跑着跑着一段时间内存满了,出现内存泄漏的问题,系统软件太庞大,这类问题又不好直接从源码中分析,所以需要借助工具来分析了,kmemleak就是这样的一个工具。

在Kernel hacking中打开CONFIG_DEBUG_KMEMLEAK =y即使能了kmemleak,其实就是开了一个内核线程,该内核线程每10分钟(默认值)扫描内存,并打印发现新的未引用的对象的数量。kmemleak的原理其实就是通过kmalloc、vmalloc、kmem_cache_alloc等内存的分配,跟踪其指针,连同其他的分配大小和堆栈跟踪信息,存储在PRIO搜索树。如果存在相应的释放函数调用跟踪和指针,就会从kmemleak数据结构中移除。下面我们看看具体的用法。

查看内核打印信息详细过程如下:

1、挂载debugfs文件系统

   mount -t debugfs nodev /sys/kernel/debug/

2、开启内核自动检测线程

   echo scan > /sys/kernel/debug/kmemleak

3、查看打印信息

   cat /sys/kernel/debug/kmemleak

4、清除内核检测报告,新的内存泄露报告将重新写入/sys/kernel/debug/kmemleak

   echo clear > /sys/kernel/debug/kmemleak

内存扫描参数可以进行修改通过向/sys/kernel/debug/kmemleak 文件写入。 参数使用如下:

  off 禁用kmemleak(不可逆)

  stack=on 启用任务堆栈扫描(default)

  stack=off 禁用任务堆栈扫描

  scan=on 启动自动记忆扫描线程(default)

  scan=off 停止自动记忆扫描线程

  scan=<secs>设置n秒内自动记忆扫描,默认600s

  scan 开启内核扫描

  clear 清除内存泄露报告

  dump=<addr>转存信息对象在<addr>

通过“kmemleak = off”,也可以在启动时禁用Kmemleak在内核命令行。在初始化kmemleak之前,内存的分配或释放这些动作被存储在一个前期日志缓冲区。这个缓冲区的大小通过配CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE设置。

在Linux环境,使用jmeter压测会遇到很多问题,比如:配置不对,权限不足这些都是很好解决。 但是遇到这几个问题: 1.内存泄漏   2.端口不够 遇到两个问题网上解决办法都很杂 ,没有一个清晰明了的解决办法,所以针对这两个问题,写出解决办法: 例如: 屏蔽“聚合报告”“查看结果数”,等插件脚本尽量最小变量 ,多个线程组下CSV文件设置,如果 只在当前线程组 使用变量,尽量不使用“全部现场”。 bin/下的jmeter文件(非jmeter.sh)编辑:(Windows环境编辑jmeter.bat) JVM_ARGS="-Xms4g -Xmx4g" 还有另一个方法:启动加参数设置:JVM_ARGS="-Xms2048m -Xmx2048m" jmeter -t test.jmx (上面调整内存格式可以1g 2g,也可以1024m 2048m,这样写都可以)Response code: Non HTTP response code: java.net.BindException Response message: Non HTTP response message: Address already in use: connect Linux本来的默认的端口欧范围:1024-65535,64511个,所以当压测接口调用超过65535个就会出现端口不够的问题。 查Linux支持多少端口, cat /proc/sys/net/ipv4/ip_local_port_range 然后找运维修改,或者: 修改文件  /etc/sysctl.conf 键入如下语句: net.ipv4.ip_local_port_range = 1024 65535压测过程还有其他问题,比如宽带限制,负载均衡,关闭缓存等,多百度即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8894372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存