记一次java进程频繁挂掉问题排查修复

前言

最近业务部门有个java服务进程会突然无缘无故的挂掉,然后这个服务会产生一堆类似hs_err_pid19287.log这样的日志。业务部门负责人就把hs_err_pidxxx的日志发给我,让我帮忙看下问题。本文就来回顾一下,我是如何帮业务部门进行问题排查

排查历程

首先hs_err_pidxxx的日志有提示如下内容

我就让业务部门那边配置下ulimit 。具体步骤如下

vim /etc/security/limits.conf# 在最后追加
* soft nofile 327680
* hard nofile 327680

不过业务部门负责人跟我反馈说,他们早就加过了,但是不管用。

接着继续分析hs_err_pidxxx的日志内容

看到新生代的内存出现100%,就问业务负责人说,你们是不是jvm内存设置比较小,结果得到的反馈是他们最近刚进行内存扩容,也进行了相应的jvm设置,内存肯定够,而且程序日志并没有oom的相关日志信息。

于是继续分析hs_err_pidxxx的日志内容,

看着大量的thread_blocked,感觉看到问题要被修复的曙光,于是跟业务负责人说,你们代码可能存在堵塞了,业务负责人说这个服务运行多年了,而且其他机子好好的,如果有这个问题,正常早就暴露出来了。

从这个hs_err_pidxxx日志,我能得到就这些信息。看着业务负责人的由期待再到眼神无光,我大大的感受他有一种所托非人的感觉。后面我跟他说,不然你jdk升级一个小版本,其实我只是试探,毕竟升级jdk,带来收益的时候,可能也带来风险,尤其在运行多年的项目上。没想到业务负责人回答说正有此意。

后面业务负责人就拿那台有问题机子进行jdk升级,事情就暂时告了一段落

问题后续

后来同部门的架构师在某次吃饭和我提起业务部门这个问题,我才发现业务部门升级jdk后,仍然没用。于是业务负责人找了部门的架构师进行求助。知道这个事后,我就主动去找业务部门负责人,问他问题解决没啊,得到他否定的答案后。

本着负责到底的心,我先向他们要来他们宿主机的messages日志。就是位于/var/log/messages。看到如下信息

里面日志有个abrt-server。这边科普一下。

什么是abrt-server

abrt是centos操作系统中的一个错误报告和跟踪工具。它可以自动收集应用程序和系统的错误信息,并生成错误报告。当系统发生错误时,abrt会收集相关的信息,如错误消息、堆栈跟踪、核心转储等。它会生成一个错误报告,包含了这些信息以及其他有用的调试信息。

它的记录保存在内核core文件,随着时间推移,core文件会不断变大,会占用磁盘空间。我们可以使用 abrt-cli list 确认core状态对应的进程及触发时间。并通过abrt-cli rm 【文件包】进行删除

示例:

abrt-cli rm /var/spool/abrt/oops-2022-09-27-14:22:55-13596-0

回归正题,我们通过/var/log/messages里面的内容

通过搜索资料,得知这个错误是因为无法创建ccpp文件导致。但这个是不是导致java进程频繁挂掉的原因,于是我们做了这么一步,将无法创建ccpp文件的时间点和生成的hs_err_pidxxx时间点做个对比

时间点基本上是吻合的,而且/var/log/messages里面还有一段

Executable '/usr/local/tomcat/jdk1.8.0_291/bin/java' doesn't belong to any package and ProcessUnpackaged is set to 'no'

后与业务负责人确认,这个jdk确实是目前这个业务所使用的jdk。综上基本上可以确定是因为无法创建ccpp文件导致,导致该业务的java进程频繁挂掉的原因之一

如何修复

方法一:将ProcessUnpackaged改为yes

这个参数的意思是表示ABRT将非rpm安装程序(如源代码包等)识别为未打包程序,会生成相关的警告和错误日志,因而会更好地抓住一些程序的 bug。如果为no,表示ABRT将不会跟踪和报告那些在未打包的应用程序中发生的崩溃信息,而只针对现有的软件包进行跟踪。因此,使用yes选项能够扩展 ABRT 的范围,提高异常程序的捕捉数量,但同时可能也会导致一些误报

sed -i 's/ProcessUnpackaged = no/ProcessUnpackaged = yes/g' /etc/abrt/abrt-action-save-package-data.conf&& systemctl restart abrtd.service

或者分步执行也可以

vim /etc/abrt/abrt-action-save-package-data.conf
ProcessUnpackaged = yes  
systemctl restart abrtd.service

不过这边还有个细节要注意,核心转储文件的默认最大大小为5000,我们可以按实际情况调整,也可以设置为0,为0表示核心转储文件的大小不作限制,不过设置为0有个风险点是可能会磁盘空间占满,因为core的文件正常比较大

可以通过如下配置,修改MaxCrashReportsSize参数

vim /etc/abrt/abrt.confMaxCrashReportsSize = 0   systemctl restart abrtd.service

或者执行如下命令

sed -i "s/MaxCrashReportsSize = 5000/MaxCrashReportsSize = 0/g"  /etc/abrt/abrt.conf && systemctl restart abrtd.service

方法二:禁用abrtd

abrt-hook-ccpp在进行执行崩溃转储操作时,使用的内存有可能会超过预期或系统能够提供的内存限制,导致影响其他应用程序。因此我们也可以直接执行如下命令,禁用abrtd

systemctl stop abrt-ccpp.service
systemctl disable abrt-ccpp.service
systemctl status abrt-ccpp.service

总结

执行了如上操作,业务部门观察了一段时间,没有再发现java进行频繁挂掉问题。

此外不管是容器化部署还是传统的宿主机部署,当出现问题时,没头绪时,我们可以通过查看/var/log底下的各种日志进行梳理。如下链接

https://www.cnblogs.com/deverz/p/8779357.html

是各种var/log的描述说明,感兴趣的小伙伴可以看看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章fpmarkets澳福盘点摇摆交易优缺点

通过之前的文章,我们各位投资者想必都已经明白了什么是摇摆交易,以及摇摆交易的特点和使用方法,今天fpmarkets澳福就一篇文章盘点摇摆交易优缺点: 摇摆交易策略优势: 更有利可图 与趋势策略不同,投资者可能会在摇摆交易…

Beego 使用教程 5:页面视图

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask beego 官网:http://beego.gocn.vip/ 上面的 bee…

Could not resolve placeholder ‘xx.xxx.host’ in value “xxx“问题解决

Could not resolve placeholder ‘xx.xxx.host’ in value "xxx"问题解决 众多原因其中之一 springboot 项目,idea 配置apollo 时,运行指定了配置文件 uat 所以使用本地配置文件启动 时,一直去找uat 配置文件,结果自…

rust使用serde_json转换Value为rust中的数据类型

为了方便转换未知json数据,我们可以使用serde提供的value类型来进行转换,将json字符串转化为Value值,然后可以快速使用get方法来获取值: let json_str r#"{"name": "John","age": 30,"c…

基于python+Django的二维码生成算法设计与实现

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

Satellite Communications Symposium(WCSP2022)

1.Power Allocation for NOMA-Assisted Integrated Satellite-Aerial-Terrestrial Networks with Practical Constraints(具有实际约束的 NOMA 辅助天地一体化网络的功率分配) 摘要:天地一体化网络和非正交多址接入被认为是下一代网络的关键组成部分,为…

Git === Git概述 Git安装

第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…

杰发科技AC7801——支持的纠错功能

1. 复位寄存器保留复位类型 低压检测复位(LVD Reset) 集成了一个低压保护系统,以便在电源电压发生变化期间保护存储器内容和控制 MCU 系统状态。该系统由上电复位(POR)电路和 LVD 电路组成,LVD 可以配置为不同的复位基准&#x…

MySQL的主从复制与主从切换详解

MySQL的主从复制与主从切换详解 一、MySql主从节点的搭建一、 master主节点的搭建1. 查看是否开启bin_log日志2. MySQL开启log_bin功能3. 创建主从复制用户并授权4. mysql数据库状态查看5. 主节点锁表并进行数据备份 二、solve从节点的搭建1. 配置文件添加内容2. 同步主库数据并…

【ITK配准】第七期 尺度(Metric)-直方图均方Metric

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的直方图均方Metric,即itk::MeanSquaresHistogramImageToImageMetric,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞…

Webshell绕过技巧分析之-base64/HEX/Reverse/Html/Inflate/Rot13

在网络安全运营,护网HVV,重保等活动的过程中,webshell是一个无法绕过的话题。通常出现的webshell都不是以明文的形式出现,而是针对webshell关键的内容进行混淆,编码来绕过网络安全产品(IDS,WAF&…

YOLO系列自研改进:基于注意力机制的多尺度特征提取模块

目录 一、原理 二、代码 三、在YOLO中的应用 一、原理 这个模块的原理仍然是利用不同大小的卷积核来提取不同尺度的特征,同样将通道划分为两部分,一部分通过注意力机制进行通道信息和空间信息的提取,另一部分通过多个不同大小的卷积核来提取多尺度的特征信息。 二、代码…

Baidu Comate——AI时代的软件开发利器

目录 Comate产品介绍 1.产品背景 ​编辑 2.产品优势 3.产品特性 4. 支持开发环境及语言 5.使用场景 Comate产品体验 Comate场景应用 2.快捷键的使用 专业插件体验 1.行间注释 2. 代码优化 3.解释说明代码 4.调优建议 5.AutoWork Comate实测体验感受 Comate产品介绍…

基于libmpv二次开发 使用函数整理

setlocale(LC_NUMERIC, "C");//必需要有,不然编译不过 mpv_handle *mpv mpv_create();//创建实例 WId widui->video->winId(); mpv_set_option(mpv,"wid",MPV_FORMAT_INT64,&wid);//设置播放器在哪个控件上显示 // Enable def…

Java 8特性(一) 之 手写Stream流filter、map和forEach方法

Java 8特性(一) 之 手写Stream流filter、map和forEach方法 今天看了一下Java 8的Stream流,学习了一下函数式编程,这才感受函数式编程如此爽,之前就使用过ES8.7.1的函数式编程,当时就在想啥时候咱也能写出这…

【日常运维】pm2起的应用删除应用日志后,发现磁盘控间没有释放,lsof | grep delete 也没看到相关进程,怎么办?

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

三维dp,LeetCode 1463. 摘樱桃 II

目录 一、题目 1、题目描述 2、接口描述 python3 cpp 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp 一、题目 1、题目描述 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。 你有…

FastJson==xml与json格式互转工具类

一、xml格式介绍 XML(eXtensible Markup Language)是一种标记语言,它的设计目的是为了存储和传输数据,而不是用于显示数据,这一点与HTML(HyperText Markup Language)不同。以下是XML的一些关键…

流畅的python-学习笔记_协议+继承优缺点

接口和协议 python动态语言,没有interface等概念,接口和协议方法有的也有替代品,所以类似于鸭子类型,只关注行为像鸭子,不关注它是不是鸭子。不是每个接口都得实现,这是允许的 猴子补丁 可动态给对象添加…

Java的BIO/NIO/AIO

1. Java中的BIO、NIO和AIO的基本概念及其主要区别 BIO (Blocking I/O): 传统的同步阻塞I/O模型。每个连接创建成功后都需要一个线程来处理,如果连接没有数据可读,则线程会阻塞在读操作上。这种模型简单易理解,但在高并发环境下会消耗大量系统…