前序(公司应用为Web应用, 部署serverLinux + Nginx + Tomcat )

一天收到公司报警邮件,显示个别机器方法调用严重超时,寻常都是在100ms以内响应的方法,突然某段时间响应时间上升到几秒,開始怀疑是机器的问题,暂时把机器从线上摘掉。重新启动完之后再挂到线上,通过一段时间观察发现各方法响应时间正常。

又过了几天,发现好几台机器都出现这种情况,感觉不是机器的问题,開始对jvm进行分析,通过分析发现,系统young gc耗时从開始的10ms左右慢慢上升到几百毫秒,old区使用超过了90%。并且系统没有进行过full gc,再看其它方法响应时间正常的机器,young gc一般10ms左右。可是每隔一小时运行一次full gc,full gc耗时几百毫秒,而old区差点儿每隔四小时就会清空,感觉机器响应慢的问题与young gc耗时长有非常大关系。通过上网查找资料。发现young
gc耗时与old区使用大小有非常大关系,假设old区使用太大。运行young gc就会非常耗时。导致系统响应时间变慢。

尽管找到了系统响应时间变慢的原因,可是不知道详细是什么原因导致的。由于机器都是同样的,并且也没有显示调用System.gc()的代码,后来通过对照异常机器与正常机器的各项配置,发现正常的机器Tomcat版本号号为6.0.33。异常机器Tomcat版本号号都为6.0.44。咋一看感觉Tomcat版本号都一样。没有区别,只是还是不放心。就找到这两个Tomcat版本号的源代码。查找是否有显式调用System.gc()的方法,通过查找发现,Tomcat版本号6.0.33
的内存泄露监听器JreMemoryLeakPreventionListener。每隔一小时就会调用一次System.gc(),而Tomcat版本号6.0.44的内存泄露监听器调用一次System.gc()的时间间隔为Integer.max
-1 s,差点儿不会显式的调用System.gc()。

以上最终找到了问题所在,Tomcat版本号改为了6.0.33,之后系统恢复正常。

最新文章

  1. POJ-3032
  2. PYTHON lambda表达式
  3. HTML5本地存储——IndexedDB(一:基本使用)
  4. Spark源码学习1.4——MapOutputTracker.scala
  5. IOS第11天(2:UIPickerView自定义国旗选择)
  6. T4教程2 T4模版引擎之生成数据库实体类
  7. urllib下载文件
  8. eclipse debug时老提示edit source lookup path解决方案
  9. 10453 Make Palindrome (dp)
  10. 微软 PowerShell Script Explorer
  11. SpringMVC入门--编写一个SpringMVC小程序
  12. C++中“wchar_t* ”和“ char * ”之间的相互转换
  13. geopyspark入门
  14. vue中修改了数据但视图无法更新的情况
  15. Informatic学习总结_day02
  16. kubernetes1.3搭建dns服务
  17. js sort
  18. 下载win10
  19. 使用Xilinx K7 KC705开发板调试PCIe中的问题【持续更新】
  20. Gradle 命令之 --stacktrace , --info , --debug 用法

热门文章

  1. 【Statistics】CAP曲线
  2. 【Python】学习笔记四:数学运算
  3. ConfigurationManager读取dll的配置文件
  4. iOS 扫雷游戏
  5. Python 爬虫之 BeautifulSoup
  6. 在项目中增加自定义icon图标
  7. 常用排序算法及Java实现
  8. jQuery 树型菜单插件(Treeview)
  9. unity3d控制主摄像头移动
  10. Oracle 性能调优案例(代码级别)