记一次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…

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…

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产品介绍…

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

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

Java的BIO/NIO/AIO

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

ORACLE 19C RAC DIAG进程消耗大量内存的分析

近期一个ORACLE 19C的RAC环境,多次出现数据库实例的后台进程DIAG消耗很多内存(达到20G),节点1、节点2都出现过次问题。 问题分析:通过对DIAG进程TRACE分析,结合在ORACLE官方后台进行问题、BUG查询匹配&…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月,思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台,VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨,还进一步拓宽了研究…

台湾精锐APEX行星减速机噪音产生及优化策略

台湾精锐APEX行星减速机在各种机械装置中的应用逐渐广泛。然而,其噪音问题也日益凸显。噪音不仅影响工作环境,还可能对设备的正常运行和使用寿命产生负面影响。因此,了解APEX行星减速机噪音的产生以及优化噪音问题变得至关重要。 APEX行星减…

安卓自动化脚本制作流程详解!

在移动应用日益普及的今天,安卓自动化脚本制作成为了开发者提高工作效率、减少重复劳动的重要手段,本文将详细介绍安卓自动化脚本的制作流程,并通过五段源代码的实例,帮助读者更好地理解和掌握这一过程。 一、安卓自动化脚本制作…

从U盘到云端:企业数据泄露的那些事

在企业的日常运营中,数据安全无疑是极为关键的一环。无论是U盘还是云,数据泄露事件的发生都可能导致企业的核心机密被窃取,甚至损害企业的商业利益和声誉。以下是关于从U盘到云端,企业数据泄露的一些常见情况和应对策略。 U盘&…

各种流量包特征

[CVE-2013-1966] Apache Struts2 远程命令执行漏洞 要执行的命令在exec里面,而且回显数据包里面有明显执行结果回显 [CVE-2017-8046] Spring Data Rest 远程命令执行漏洞 回显不明显,考试提供的解码工具不能解密, [CVE-2017-12149] JBOSS…

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流:hzzxar)抖音成为了年轻人分享自己才华和生活的平台。然而,要在抖音上快速获得关注和粉丝,却不是一件容易的事情。今天,我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍,带…

API攻击为啥盛行,企业应该如何防范

一.API接口到底是什么 API,中文名称叫应用程序编程接口,是现代移动、SaaS 和 Web应用程序的一个关键组成部分。听起来很晦涩难懂,但其实我们每个人的生活都会接触 API:早上出门,打开手机看看天气,天气APP需要通过 API 提取数据;到了公司,被安排出差,赶紧上网查票,购票网站更新…

【3dmax笔记】027:配置修改器集、工具栏自定义与加载

文章目录 一、配置修改器集二、自定义工具栏三、加载工具栏 一、配置修改器集 可以把自己常用的修改命令放到右边框中的部分,便于自己的操作,省去了每次都要花半天时间找命令的尴尬。新建一个二维或者三维物体,点击修改面板,点击…