OutOfMemoryError本地线程不足问题分析
java.lang.OutOfMemoryError本地线程不足问题
11月份中旬客户方的一个系统突然报内存异常,当时是早上上班的时候碰到该项目的项目经理,还跟该项目的项目经理开玩笑说你们系统上线将近8个月都没问题了,应该不会出现
系统故障等问题了吧,谁知刚说完,没半小时该项目经理突然给我打电话说,生产系统出现故障了,没办法使用了,原因为明。让我赶紧去客户方机房一起分析问题。
于是顾不上吃早餐,赶紧跑过去机房帮忙分析是什么故障问题。过去的时候发现客户方的领导以及公司的项目经理和几位开发人员以及合作公司的几位开发人员和领导也在那边围观在那边研究问题原因,看这架势问题估计很严重,不然怎么也会把合作公司的技术总监也叫上了。过去一听原委,原来系统有四个实例其中一个实例宕机,其他三个实例处于半死不活状态,也没办法正常运作,前端客户打电话反映没办法登录,或者登录进去打开页面都是异常信息等。我也很积极的投入他们围观中,一起分析问题发现后台日志一直刷屏似地的显示各种异常信息,看得眼花缭乱。
看了半天才看出一点眉目原来内存溢出,GC日志分析发现一直做大GC,而且还是做system.gc。客户方说明看能否尽快解决,而且客户方那边有规定,没有特殊情况下不能随意重启机器。
就是说白天在使用过程中,出现问题除非有修改东西之类的才能去重启机器,不能先重启让客户方立马使用,但是根据他们说,如果重启后不用一小时还是出现同样问题, 因为交易量很大,后台并发很多,程序代码有问题是肯定有的,不然不会出现此问题。一时半会儿我也定位不出哪里出问题,也不清楚怎么解决,看了日志问题,我也茫然了,犹豫了一会儿,我只能跟客户方说临时解决应急方案倒是有一个,但是不能只能治本不能治根,确保白天能正常使用,但是晚上凌晨还是要重启来缓解第二天的正常使用,至于能否完全解决,你们只能过会儿把日志文件等取过来我在静心分析下才能知道原因点。于是我就提供了修改方案,无非就是JVM配置问题新生代重新划分,而且禁用system。gc功能,然后客户方重启机器。就这样连续两天过去了,生产可以正常使用,但是后台还是时不时的报错,经过这两天的日志分析以及生产监控,发现主要问题是本地线程创建异常,其实就是线程使用不足引起的。根本原因是框架平台代码问题,修改此问题对系统的功能影响面很大,而且这个平台不是我们公司的是客户方买的一个平台,这意味着此问题没办法解决。思量了一天,说白了出事故后这两天,搞得我晚上都没办法睡觉,虽然可以说我可以不管这件事情,因为我只是测试人员,主要工作是做好部门管理,但是这毕竟我们公司的项目(虽然结项了),现在是我之前公司接了该项目,他们公司也派了开发人员和他们的技术总监参与分析解决问题,我们公司好歹也表个态比较以前也是我们做的项目,虽然接这个项目到结项没问题,但是突然在交接后立马出问题,也不能说是谁的问题,其实是平台的问题,两家公司都没责任,但是问题没人解决,这样也不好,大家都分析了两三天也没得出结论,而生产只是客户方暂时借用我的应急方案顶住,但是反映不是很好。
苦恼了,三天后,也让客户方查看了各自资源的分配情况,线程开启数量,内存使用情况等各种内存占用计算分析,两天都在加班在本子上鬼画符似的计算各自内存分配。
最终给出了三个解决方案。增加系统线程数thread_max ,被客户方否决原因说要重启系统风险更大,那就降低线程栈的大小吧,客户方回应默认就行,修改这个数值风险太大。
深受打击,最后我只好说,既然两项不行,那就把-XMX从1200M,改为1024m吧,反正你们最多也是只能用到900M,好吧这种解决方案风险最低。修改最方便。被采纳了,改为1001M,修改后重启了。其实在跟客户方提供解决方案沟通期间,还很费劲的解释了,JAVA NEW一个线程引发的后期血案等等,说明了线程创建后什么时候会占用系统内存、对内存,是谁占用怎么占用等等一大堆原理,才被采纳。其实我也是半吊子不是很懂,但是都是围绕了此问题,进行解释,才说服他们。就这样过了三周了,到现在貌似没出现任务错误,也看了,客户方前台操作响应很快,应该没问题了。希望不要在出问题了,记得今年四月份上线,出了问题,也是搞得我头昏脑胀的,那时不是数据库表分区,就是建索引要么改SQL实现方式,要么要修改应用代码设计,还要改各自参数配置,整个项目的人员一起忙得不亦乐乎,最终问题是解决,但是竟然还没顶住8个月又出问题了,这次我算是迷糊中解决了,但是下次在出现,不知道会是什么情况,只能拭目以待了,应该说下次出现了,不关我事了,这个项目交接给我之前的老东家了。
OutOfMemoryError本地线程不足问题分析的更多相关文章
- Java调优之jvm和线程的内存分析
本文来源于铁木箱子的博客http://www.mzone.cc 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立 ...
- 【Java线程与内存分析工具】VisualVM与MAT简明教程
目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...
- JVM 内存溢出详解(栈溢出,堆溢出,持久代溢出、无法创建本地线程)
出处: http://www.jianshu.com/p/cd705f88cf2a 1.内存溢出和内存泄漏的区别 内存溢出 (Out Of Memory):是指程序在申请内存时,没有足够的内存空间供 ...
- Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...
- 本地线程-ThreadLocal
线程本地存储是一个自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储.简单来说,就是对于某个变量,针对不同的线程存储不同的值. 实例: import java.util.Random; i ...
- Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...
- Filter(过滤器)、ThreadLocal(本地线程)、Listener(监听器)
Filter(过滤器) Filter过滤器它的作用是:拦截请求,过滤响应. 过滤器链 1)执行的顺序依次是: A B C Demo03 C2 B2 A2 2)如果采取的是注解的方式进行配置,那么过滤器 ...
- JAVA线程池的分析和使用
1. 引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行.第三:提 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- Mybatis使用自定义类型转换Postgresql
Mybatis使用自定义类型转换Postgresql 主要目的 为了解决从数据库取出来之后再手动转换为javaBean的问题. 主要用mybatis提供的Handler来把处理前置 添加转换类 imp ...
- git中fatal: Authentication failed的问题
git中fatal: Authentication failed的问题 有两种办法,一种是删除重新认证,另一种是使用Ssh 删除重新认证 有控制面板->用户账户->管理windows凭据- ...
- Spring Cloud - Eureka /actuator/info 如何显示信息
在pom.xml中添加 <!-- actuator监控信息完善 --> <dependency> <groupId>org.springframework.boot ...
- python中根据时间获取周数,通过周数获取时间
# 时间## 时间和周数 import time import datetime # 获取今天是第几周 print(time.strftime('%W')) # 获取当前是周几(0-6,0代表周一) ...
- F#周报2019年第44期
新闻 Elmish.WPF教程 介绍Orleans 3.0 GC配置历史 介绍ONNX运行时1.0 介绍微软Q&A(预览) 使用App中心持续布署与监控你的UWP,WPF与Windows Fo ...
- WordCloud安装
1,下载 https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 2,安装 (window环境安装) 找的下载文件的路径 安装 1 pip inst ...
- UIScrollView的contentView 助于理解
- NOIP模拟 21
可爱的Dybala走了..(当然只是暂时) 又考了大众分.从rank5到rank17一个分. T1 折纸 秒切,爽啊 天皇偷看我代码,结束看见我A了还很惊讶,说我代码有锅 好沙雕哦 就跟个2b似的. ...
- csps模拟测试57
T1 天空龙 大神题,考察多方面知识,例如:快读 附上考试代码,以供后人学习 应某迪要求,我决定多写一点. 正如文化课有知识性失分和非知识性失分一样,OI也同样存在. 但非知识性失分往往比知识性失分更 ...
- 使用Typescript重构axios(十九)——请求取消功能:实现第二种使用方式
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...