jvm java 内存增长导致系统可用内存减少报警

博客讲述了作者在排查服务器内存不足问题时,发现由于使用Retrofit2与OkHttp,每次调用接口都会创建新的连接池对象,导致内存泄漏。通过分析JVM内存dump和使用jvisualVM,定位到问题在于OkHttp的connectionPool未被正确回收。最终,提出了两种解决方案,包括设置连接池最大空闲线程为0以允许GC回收和采用全局的代理service对象来复用连接池,以减少内存占用。
摘要由CSDN通过智能技术生成

jvm java 内存增长导致系统可用内存减少报警

发现问题

公司服务器监控报警,提示服务器可用内存不足30%
利用平台监控趋势图观察(事后截的图,不是当时现场监控):
服务器内存监控
上线新版本程序后系统内存剩余量少于30%,触发报警。配置为2c/4g/50g云主机,系统中仅部署了上线的应用程序。
利用top指令观察进程占用的内存情况
top指令
发现java进程占用3g+内存……

问题排查

利用jdk jmap工具dump出当前jvm内存镜像到本地win下分析
jmap -dump:live,format=b,file=/tmp/dump.txt 进程号 当前存活对象
jmap -histo:live 进程号 直接打印,对象太多看不全
jmap -dump,format=b,file=/tmp/dump.txt 进程号 所有对象
sz /tmp/dump.txt 转存到本地
800M 很慢

排查工具

jdk自带jvisualMV
j visual mv
导入转储的镜像

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值