`
lixiaoxin
  • 浏览: 18490 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一次生产系统经常假死的问题排查

    博客分类:
  • java
 
阅读更多
系统经常出现假死情况,出发了自动重启脚本,基本每台机器每台都会重启一两次
在其中一台机器去掉自动重启脚本,在机器假死的时候
1. 使用jstat -gcutil 查看,发现jvm无法进行垃圾回收
2.尝试把内存从原来的4G增加到8G,其中新生代4G,
机器没有触发自动重启,但是运行一段时间经常响应缓慢
3 .再次使用jstat -gcutil查看,发现yangGc 十分频繁,fullGc完 old区占用内存50%左右,也就是有2G多没有被回收
4.使用 jmap -dump:format=b,file=xxx.hprof $pid 把内存dump下来,使用mat工具分析
4.1发现有410.3M内存空间比较可疑
使用Dominator Tree查看如下
FTPFile对象有412940个,估计是把远程FTP文件夹里面的所有的文件信息都读取了,用来判断文件是否存在。
经过对业务功能的了解,有一个功能需要读取别的系统的FTP文件,由于读取FPT文件太慢了,所以使用定时任务定期从别的系统FTP同步数据到本地作为本地文件缓存。
这里的同步实现方式有问题,需要从业务实现角度来解决。
4.2另外两个可疑的内存对象,一个是hibernate另一个是eache的,考虑到hibernate跟eache都有设计到缓存相关,暂时没有去分析。
 
5.第二天,系统没有自动重启,但是多次缓慢告警后自行恢复。
使用jstat -gcutil查看,发现yangGc 十分频繁,fullGc完 old区占用内存80%左右3G多
重新把内存dump下来,这次分析的结果如下:

5.1没有发现FTP相关的,但是hibernate跟ecache都增大了很多。
使用Dominator Tree查看如下

这下发现是hibernate的一级缓存,
查看hql语句
SELECT DISTINCT NEW org.openkoala.auth.application.vo.ResourceVO( r.identifier,'',r.name,r.desc) FROM Resource r JOIN r.authorizations auth JOIN auth.identity i WHERE i.id IN (:x10_, :x11_, :x12_, :x13_,......:x124948_) AND r.abolishDate>?2 and auth.abolishDate>?3
红色的.....省略的成千上万个
经过查阅资料在一篇博客中找到了思路:https://blog.csdn.net/dream_lixiang/article/details/77248292
QueryPlanCache会缓存sql,以便于后边的相同的sql重复编译,如果in后的参数不同,hibernate会把其当成不同的sql进行缓存,从而缓存大量的sql导致heap内存溢出。(拼凑sql也会导致这个情况出现)。
经过了一番代码的排查,果然是由于上述的原因引起的。
其中in里面的参数是查询出来的角色id
修改方式,新增一个不启用hibernate一级缓存的查询方法(对应这个业务场景来说,一级缓存可以说是多余的),
JPA API与hibernate API有一点点区别:
5.2 ecache确实使用占用堆内存,对外内,本地存在的,所以暂时不分析
5.3 既然都分析到这里,顺便分析一下172.3M的内存里面到底是什么
javax.crypto.JceSecurity,这个似曾相识的感觉
使用Dominator Tree查看如下
5.3.1查找到代码:
5.3.2首先对Cipher.getInstance("RSA", "BC")与
Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
这两个api区别
Cipher.getInstance("RSA", "BC") 会根据第二参数去查找一个已经注册的BouncyCastleProvider对象所以要先在静态块把BouncyCastleProvider对象注册进入
static {
if (Security
.getProvider(org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}
 
}
Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());

 
 
每次都会往verifyingProviders里面put一个对象,verifyingProviders是static final的不会被垃圾回收
所以会导致内存泄露
5.3.4 解决办法
1) 使用静态块预先注册
static {
if (Security
.getProvider(org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}
 
}
 
Cipher cipher = Cipher.getInstance("RSA", "BC");
2)
使用单例
private static org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = null; public static synchronized org.bouncycastle.jce.provider.BouncyCastleProvider getInstance() { if (bouncyCastleProvider == null) { bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider(); } return bouncyCastleProvider; }
 
Cipher cipher = Cipher.getInstance("RSA", getInstance() );
  • 大小: 12.6 KB
  • 大小: 70.8 KB
  • 大小: 13.7 KB
  • 大小: 86.3 KB
  • 大小: 13.7 KB
  • 大小: 12.8 KB
  • 大小: 8.1 KB
  • 大小: 88.8 KB
  • 大小: 2.8 KB
  • 大小: 44.5 KB
  • 大小: 27.5 KB
  • 大小: 5.7 KB
分享到:
评论

相关推荐

    服务器iis假死的原因及解决方法

    4. 系统漏洞或故障:Windows系统或者IIS本身的漏洞,以及其他软件故障也可能导致IIS假死。 为了应对上述原因导致的IIS假死问题,我们可以采取以下几种解决方法: 1. 合理设置应用程序池回收时间:应将应用程序池...

    excel假死问题解决方法

    Excel假死,通常指的是在使用Microsoft Excel...以上方法应按照步骤逐一排查,找出导致Excel假死的原因并解决。同时,养成定期保存工作、合理规划工作簿结构和优化计算公式的好习惯,也能有效预防Excel假死问题的发生。

    首钢公司双控系统(隐患排查)自动排查程序

    这是一个简陋的“首钢公司双控系统(隐患排查)自动排查程序源代码”框架,分享给同样被这个每天点勾系统折磨的同事们。2019-1-30日测试代码从打开到关闭浏览器整体可用。 整体思路就是使用webdriver与pyautogui...

    程序假死解决方法 delphi 、c++

    在编程过程中,我们时常会遇到程序假死的问题,这通常是由于资源管理不当或者无尽循环导致的。"程序假死解决方法 Delphi、C++"这个主题主要关注如何在使用这两种编程语言时处理这类问题。下面我们将深入探讨这个问题...

    Windows 7假死的几个常见情况以及解决方法

    Windows 7操作系统在使用过程中,有时会出现假死现象,即电脑反应迟缓,鼠标变成圆圈,无法正常...在遇到假死现象时,应先排查硬件和系统设置,然后针对具体情况采取相应措施,通常能显著提升系统的稳定性和使用体验。

    酒店生产安全事故隐患排查治理制度.doc

    《酒店生产安全事故隐患排查治理制度》是酒店业中一项至关重要的安全管理规范,旨在预防和减少生产安全事故的发生,保障酒店运营的稳定与宾客的安全。该制度遵循国家的安全生产管理法规,结合酒店的实际情况,制定了...

    Linux系统问题排查

    在Linux系统运维过程中,系统问题排查是一项基本而重要的工作。本文档将详细介绍Linux系统中常见的问题排查方法,包括CPU问题、内存问题、网络问题以及磁盘问题等。通过这些知识点的学习,可以帮助用户更高效地识别...

    基于智慧矿山的安全风险分级管控与事故隐患排查治理系统

    为了落实好“双重预防控制”工作,保证煤矿安全生产,通过研究煤矿企业在风险分级管控和隐患排查治理方面存在的问题,基于互联网+、云平台、智慧矿山、物联网、WebGIS等技术,研究设计了煤矿安全风险分级管控和事故隐患...

    安全生产隐患排查治理台账.pdf

    安全生产隐患排查治理台账是企业安全生产管理中的一个重要组成部分。它旨在通过对隐患的排查和治理,确保企业的安全生产,避免事故的发生,保护员工的生命和财产安全。 1. 安全生产隐患排查的重要性 安全生产隐患...

    寻求IE假死具体解决办法

    通过上述步骤逐一排查,相信能够有效解决大多数由IE假死引起的问题。需要注意的是,在执行任何操作之前,请确保备份好重要数据以防万一。此外,考虑到IE浏览器已逐渐退出历史舞台,建议适时转向更现代、更安全的...

    最新分散型控制系统(DCS)行业安全生产设备设施及隐患排查治理.docx

    DCS,即分布式控制系统,是现代工业生产中不可或缺的一部分,它通过将控制功能分散到多个独立的处理单元,实现了对复杂生产过程的有效监控和管理。然而,随着技术的发展,DCS系统的安全性不仅关乎企业的生产效率,更...

    web常见问题排查

    web常见问题排查

    Linux操作系统安全及入侵排查

    课程还介绍了针对系统入侵的应急排查步骤和要求,主要涉及的排查内容包括:检查系统日志及命令记录 、检查账户、检查文件、检查系统启动项和计划任务、检查进程和网络连接、检查是否存留后门等恶意程序,根据上述...

    性能问题排查方法

    生产中Java性能问题排查:请求响应过程、DNS查找过程、请求响应过程

    加油站安全生产事故隐患排查治理制度.pdf

    该制度旨在预防和减少安全生产事故的发生,通过定期和日常的隐患排查,及时发现并治理潜在的安全问题,以达到"安全第一,质量优先"的目标。 制度的核心内容分为以下几个方面: 1. **排查内容与频次**: - **月...

    数据库问题排查流程

    数据库问题排查流程----Oracle_DBA日常工作和职责

    四川省安全隐患排查治理系统培训(企业端)

    企业要建立和完善隐患排查治理自查自改自报系统每年第一季度更新企业信息每月底按时上报本月的隐患排查治理信息重大隐患应及时报送保证上报信息的完整性和准确性 四建立完善隐患排查治理信息系统 五开展全覆盖的

    k8s集群pod经常重启问题排查总结.doc

    k8s集群pod经常重启问题排查总结

Global site tag (gtag.js) - Google Analytics