内存泄露排查并解决异常案例

正常运行的程序,在web页面突然登录不了,所有接口都超时。

登录服务器发现服务器特别卡,内存爆满,给程序重启了一下。

使用命令   jstack -l <进程id>   命令查看线程状态

发现别多的Thread命名的线程是unirest工具包产生的

通过查找代码原因是:

Unirest使用的是老版本的依赖
 <dependency>
      <groupId>com.mashape.unirest</groupId>
      <artifactId>unirest-java</artifactId>
      <version>1.4.9</version>
</dependency>

在方法中使用了Unirest.setTimeouts(0,0)

每次调用方法就会启动一个SyncIdleConnectionMonitorThread的线程类,并且线程不会停止,一直处于wait状态, 最终导致内存溢出的情况

解决方案:

static { Unirest.setTimeouts(60000,60000); }

使用静态代码块全局只加载一次, 又或者放到启动类中随着服务启动进行加载设置.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值