Linux 当jmeter压测时,JVM内存泄漏,端口不够问题,解决办法

Linux 当jmeter压测时,JVM内存泄漏,端口不够问题,解决办法,第1张

在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压测过程还有其他问题,比如宽带限制,负载均衡,关闭缓存等,多百度即可。

假如通过“Free”查看内存几乎耗尽,但通过 top/ps 命令却看不出来用户态应用程序占用太多的内存空间, 那么内核模块可能发生了内存泄露

SLAB 是Linux内核中按照对象大小进行分配的内存分配器。

通过SLAB的信息来查看内核模块占用的内存空间:

方法1. 查看meminfo文件

方法2. 查看slabinfo文件

一般查看slabinfo文件就足以,如果发现slabinfo中占用内存过大,那基本可以断定,内核模块出现了内存泄露了

还有个命令 slabinfo 也是可以看,其实也是去读 /proc/slabinfo 后可视化出来

Linux内核的Kmemleak实现内存泄露检测

看看下面这个函数是哪里导致的内存泄漏呢?

一眼可能不容易看出上面的有什么问题,有kmalloc,有kfree 成对出现的。

问题正好出在 pr_debug 这个函数中的参数传递, 熟悉函数调用传参的人应该会知道编译器一般对参数的处理采用堆栈的方式,是一个先进后出的过程,这样参数的执行一般是逆序的(由于编译器实现的不同,这个过程不是确定的),这样kfree会在kmalloc之前运行,导致每次运行都会泄漏一点内存。

Resolving Memory Leaks In Linux Kernel

Slab Allocator

Proc Info

Using Crash Debugger


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存