背景:程序部署在客户机器上,不定期异常崩溃,且无日错误异常日志记录。

day1:初步排查是内存问题导致的,考虑使用分析工具记录分析。另外代码review仔细排查,怀疑有可能跟大量网络socket没有释放有关。

程序种使用到了httpclient,其中用的较多的get请求设置的超时时间如下:

 RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(180000).setConnectionRequestTimeout(180000)
.setSocketTimeout(180000).build();
request.setConfig(requestConfig);
CloseableHttpClient httpClient = getHttpClient();

在此,仔细了解了下这3个超时参数分别代表什么意思,之前只是拿工具类直接来使用,没有深究。再次记录一下。

三个超时时间分别代表,连接池获取可用连接超时,连接超时,读取数据超时

Httpclient源码如下:

RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(config.connReqTimeout)   //从连接池中获取连接的超时时间//与服务器连接超时时间:httpclient会创建一个异步线程用以创建socket连接,此处设置该socket的连接超时时间.setConnectTimeout(config.connTimeout).setSocketTimeout(config.socketTimeout)               //socket读数据超时时间:从服务器获取响应数据的超时时间.build();httpClient = HttpClientBuilder.create().setMaxConnTotal(config.maxConnTotal)                   //连接池中最大连接数/*** 分配给同一个route(路由)最大的并发连接数。* route:运行环境机器 到 目标机器的一条线路。* 举例来说,我们使用HttpClient的实现来分别请求 www.baidu.com 的资源和 www.bing.com 的资源那么他就会产生两个route。*/.setMaxConnPerRoute(config.maxConnPerRoute).setDefaultRequestConfig(requestConfig).build();

1.从连接池中获取可用连接超时:HttpClient中的要用连接时尝试从连接池中获取,若是在等待了一定的时间后还没有获取到可用连接(比如连接池中没有空闲连接了)则会抛出获取连接超时异常。

2.连接目标超时connectionTimeout:

指的是连接目标url的连接超时时间,即客服端发送请求到与目标url建立起连接的最大时间。如果在该时间范围内还没有建立起连接,则就抛出connectionTimeOut异常。
如测试的时候,将url改为一个不存在的url:“http://test.com” ,
超时时间3000ms过后,系统报出异常:
org.apache.commons.httpclient.ConnectTimeoutException:The host did not accept the connection within timeout of 3000 ms

3.等待响应超时(读取数据超时)socketTimeout :

连接上一个url后,获取response的返回等待时间 ,即在与目标url建立连接后,等待放回response的最大时间,在规定时间内没有返回响应的话就抛出SocketTimeout。
测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test,在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。

怀疑是以下代码设置超时时间过长导致的socket资源一直没有释放导致的。先调整超时时间观察一下。后续观察内存情况。

转载于:https://www.cnblogs.com/falcon-fei/p/11060206.html

java内存泄漏问题排查相关推荐

  1. Java内存泄漏的排查

    1.内存溢出 一种通俗的说法. 1.内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出. 2.内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该 ...

  2. 一次 Java 内存泄漏的排查

    由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...

  3. jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!

    点击上方"Java之间",选择"置顶或者星标" 你关注的就是我关心的! 作者:枕边书 来源:https://zhenbianshu.github.io 一.由来 ...

  4. java 内存泄露对象排查_记录一次 java内存泄漏的排查

    1.问题:jar进程会随着时间由 30% 上涨到 70% 直到虚机报警.重启过后,还是会缓慢上涨: 进程数也在上涨: 2.在排查内存问题时,可能会使用的命令 1)查看 java 进程:jps -l 可 ...

  5. 分享一次 Java 内存泄漏的排查

    由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...

  6. 一次恐怖的 Java 内存泄漏排查实战

    转载自  一次恐怖的 Java 内存泄漏排查实战 最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家. 这两天对JVM内 ...

  7. unity如何检测内存泄漏_如何排查Java内存泄漏?看懂这一篇就够用了

    原文:https://www.toptal.com/java/hunting-memory-leaks-in-java 作者:Jose Ferreirade Souza Filho 译者:Emma来源 ...

  8. 什么是内存泄露?该怎么排查?Java内存泄漏策略

    什么是内存泄漏 内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的, ...

  9. 透彻分析JAVA内存泄漏和内存溢出的区别

    JAVA内存泄漏和内存溢出的区别和联系 1.内存泄漏memory leak : 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出. 2 ...

最新文章

  1. python脚本 数据库压力测试_python-网站压力测试脚本
  2. 添加流程_艾多美手机商城苹果ios系统的主屏幕添加流程
  3. c语言编程:输入一个数看它是不是素数
  4. jstatd - Virtual Machine jstat Daemon
  5. linux下安装boost
  6. 将spark默认日志log4j替换为logback
  7. 类与接口(四)方法重载解析
  8. cauchy problem of 1st order PDE from Partial Differential Equations
  9. android 内存抖动_android内存泄漏怎么破?一招教你搞定!
  10. 微pe工具箱 系统安装教程_通用PE工具箱装系统(V4.0)——安装原版WIN7系统
  11. 使用JAVA向word中插入图片
  12. 计算机辅助翻译与人工智能,2018年机器翻译行业概述与现状,人工智能让人人实现国际化交流...
  13. Android集成环信IM,实现为某一个好友设置消息免打扰
  14. 完整的生产车间管理流程是怎样的?六大步骤分享
  15. Pr:抠像与视频合成
  16. CSS clip:rect矩形剪裁功能及一些应用介绍
  17. FFmpeg转换格式与视频合并
  18. 出现/usr/lib64/erlang/erts-10.3/bin/beam.smp: error while loading shared libraries: libtinfo.so.5解决方法
  19. 口才训练,简单、易行、见效的训练方法大全!
  20. Linux指令入门学习

热门文章

  1. CentOS 7部署OpenStack(9)—部署dashboard
  2. TypeKit ,use online fonts
  3. Classloader内存泄露
  4. 做国内最好的ITSM服务管理软件
  5. SQL Server中读取XML文件的简单做法
  6. javascript网络_没有JavaScript的网络外观
  7. wincc vbs mysql_Wincc VBS操作txt及SQL2005
  8. 软件缺陷生命周期图示及当中涉及到的缺陷的状态
  9. baidumap api MySQL_百度地图API开发笔记一(基础篇)
  10. 跨进程通信,到底用长连接还是短连接