故障重现, JAVA进程内存不够时突然挂掉模拟

news/2024/4/24 20:35:08/

背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下:

# Set larger code cache with -XX:ReservedCodeCacheSize= # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:2673), pid=28610, tid=139813184919296  

日志分析原因很简单,服务器的内存不够用,导致进程崩溃

JAVA涉及到内存不够用分两种情况:

1, 当超出JVM的分配的内存时,JAVA进程并不会退出只是结束当前的线程

2, 当服务器内存不够时,linux杀死使用内存的一个进程

很简单,但很容易忽略,因为在启动JAVA进程时,服务器检查的是当前内存,并不是可用额度。如,服务器有1G内存,而启动了两个1G内存的JAVA服务是不会报错的,但当内存紧张时,linux会kill任意JAVA服务,造成影响

我用代码重现模拟下这种情况

准备如下

服务器1台,1G内存

模拟JAVA进程,以每秒递增10m内存分配的去榨干服务器

服务器内存总量

发现整个可用内存大小在 3G附近(小于)

加入一个JAVA程序,开启一个线程以每秒10m的内存去申请内存

代码如下:

模拟第一种情况

运行  java -Xmx1024m -Xms1024m org.hejinbin.memory.test.TestStepByStep

观察JVM垃圾回收情况,发现在程序把JVM的内存的heap慢慢耗光

直到再也无法分配10m大小的对象,然后程序输出

观察后发现, 知道JVM内存被榨干,这条JAVA线程已经被停止,但JAVA进程

也是存活的,而且等待下一次垃圾回收,死去线程的内存将被回收,系统恢复。 造成的影响仅仅是影响本次请求。

模拟第二种情况

我模拟3个JAVA服务进程,每个进程分配1G, 然后同时递增分配内存

开启多个linux窗口同时运行:

java -Xmx1024m -Xms1024m org.hejinbin.memory.test.TestStepByStep

一段时间后:

the total use : 830m 
the total use : 840m 
the total use : 850m 
the total use : 860m 
Killed

其中一条线程被kill了

另外两个进程继续跑,知道线程异常,当然最后两个进程也不会挂掉

另:观察到kswapd0占用CPU 高,交互虚拟内存

结论:

1, 当超出JVM的分配的内存时,JAVA进程并不会退出只是结束当前的线程

2, 当服务器内存不够时,linux杀死使用内存的一个进程

3,  把系统拆分成多个服务部署在同一台机时需要特别注意,JVM启动时分配的内存只是申请(其实体现在VIRT),当一台服务器运行多个JAVA进程时请保留足够的可用内存 (大于分配给各个JVM的进程之和)

接下来的问题:

1, 如何确认是因为内存过大被linux系统kill掉

答: 可以去linux的日志在/var/log/syslog 里能找到日志,如: grep "Out of memory" syslog , 能找到刚刚被杀线程的原因

2,除了内存占用过大被kill,还有哪种原因会被kill

答: CPU时间占用过久也是会被杀掉,详情下一篇模拟

3,为什么我模拟的没有产生hs_err_pid*.log日志?

答: 因为日志是再进程尝试重启后产生, 当系统内存不足,系统kill掉进程,此时守护进程又尝试拉起进程,故产生了err日志。可以在进程A占用了大部分内存时手工重启线程B模拟,能在JAVA程序的运行生成该日志

 

 


http://www.ppmy.cn/news/46707.html

相关文章

小红书达人种草怎么收费?

随着小红书平台的快速发展,用户数量在不断的上升,市场上也涌现出了很多的小红书营销公司,小红书营销主要是以小红书代写代发、品牌植入广告等方式来做品牌种草品宣。 小红书达人种草怎么收费这个问题,相信很多商家朋友都非常关心…

Ubuntu18.04 Gitkraken GitCracken

参考资料: ubuntu 安装 Gitkraken 9.x Pro 版本_gitkraken ubuntu CSDN博客【GitCracken】v8.1.1_gitcracken不起作用_等风来不如迎风去的博客-CSDN博客 关键: 材料1:需要使用linux/GitKraken-v8.1.1.tar.gz材料2:需要使用wcxo…

【Linux】 密码相关。pwconv

密码相关。pwconv 在linux中,早期的用户密码(经过加密)存放在/etc/passwd文件之中,但是大多数的应用程序通常都需要读取这个文件,所以会造成一定的安全隐患 因此后来的linux(centos)系统将这个…

第二十三章 弹跳训练

一夜无话。 看着跳廊外静静挂在空中的上弦月,张弦月与下弦月,巴哥奔脑海里浮现出月光下那泛着淡金色光芒的草垛,那绿莹莹黄澄澄的池塘,那紫色拱门,那藏青小球,那逐层凹陷的螺旋状圆盘,那闪着或青…

openpnp - 顶部相机 - 辅助光(环形灯)的电路原理图

文章目录 openpnp - 顶部相机 - 辅助光(环形灯)的电路原理图概述END openpnp - 顶部相机 - 辅助光(环形灯)的电路原理图 概述 同学帮我做的简易灯板设计不太合理, 发热量极大. 想看看商用的环形灯电路啥样的, 如果有可能, 自己做块灯板, 塞进商用环形灯外壳中. 拆解了一个环形…

洛谷题解【入门一】顺序结构

目录 B2002 Hello,World! 题目描述 输入格式 输出格式 输入输出样例 B2025 输出字符菱形 题目描述 输入格式 输出格式 输入输出样例 P1000 超级玛丽游戏 题目背景 题目描述 输入格式 输出格式 输入输出样例 P1001 AB Problem B2005 字符三角形 题目描述 输…

ROS学习——艰辛的环境安装之路一Ubuntu

文章目录 Ubuntu安装和下载页面设置安装Vmware Tools安装VSCODE用几个常用命令简单熟悉下Ubuntu Ubuntu 安装和下载 Ubuntu的安装和下载 看这个链接 Ubuntu安装和下载1 或者这个链接 Ubuntu安装和下载2 页面设置 安装Vmware Tools 看这个链接 VMware Tools的介绍和安装 安…

Qt——Qt控件之按钮-QDialogButtonBox对话框按钮盒子控件的使用总结(例程:自定义按钮)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》

Spimes x5.0主题模板全开源源码/Typecho主题模板

☑️ 品牌:Typecho ☑️ 语言:PHP ☑️ 类型:主题模板 ☑️ 支持:PCWAP 🎉有需要的朋友记得关赞评,底部分享获取!!! 🎉 ✨ 源码介绍 Spimes x5.0主题模板全开…

SQL Server内存架构

2. 内存架构 所谓内存架构,这里是指SQL Server实例内存管理、使用与相关逻辑设计及实现等方面内容。更具体一点,就是讲SQL Server实例分配、管理和使用其内存空间的内部机制。本书1.1节中我们已经讲过,SQL Server实例包括多个内部机制各不相同的内存区域,在此,我们将讲解…

论文 : Multi-Channel EEG Based Emotion Recognition Using TCNBLS

Multi-Channel EEG Based Emotion Recognition Using Temporal Convolutional Network and Broad Learning System 本文设计了一种基于多通道脑电信号的端到端情绪识别模型——时域卷积广义学习系统(TCBLS)。TCBLS以一维脑电信号为输入,自动提取脑电信号的情绪相关…

牛顿法、梯度下降法与拟牛顿法

牛顿法、梯度下降法与拟牛顿法 0 引言1 关于泰勒展开式1.1 原理1.2 例子 2 牛顿法2.1 x 为一维2.2 x 为多维 3 梯度下降法4 拟牛顿法4.1 拟牛顿条件4.2 DFP 算法4.3 BFGS 算法4.4 L-BFGS 算法 0 引言 机器学习中在求解非线性优化问题时,常用的是梯度下降法和拟牛顿…

Python 无监督学习实用指南:6~10

原文:Hands-on unsupervised learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关…

量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

文章目录 前言一、三次多项式的例题二、Python实现1.引入库 总结 前言 本文还是大部分截图来自于:《最適化問題とWildqatを用いた量子アニーリング計算入門》 https://booth.pm/ja/items/1415833 终于有人问到怎么将QUBO中的三次多项式转换为二次多项式了。直接以…

人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)

在视频剪辑工作中,假设我们拿到了一段电影或者电视剧素材,如果直接在剪辑的视频中播放可能会遭遇版权问题,大部分情况需要分离其中的人声和背景音乐,随后替换背景音乐进行二次创作,人工智能AI库Spleeter可以帮我们完成…

HiveQL快速上手

HiveQL 一、CREATE Statements1、CREATE DATABASESyntaxExamples2、CREATE TABLESyntaxExamples3、CREATE VIEWDescriptionSyntaxExamples4、CREATE MARCODescriptionSyntaxExamples5、CREATE FUNCTIONDescription<

电子束与材料相互作用Matlab代码

标题 1 题目2 实验原理2.1 蒙特卡洛模拟的基本思想2.2 电子散射的基本概念 3 代码 1 题目 扫描透射电镜(STEM)的基本原理是用极细的扫描电子束透射样品,透射电子直接被具有一定张角的接收器所接收&#xff0c;透射电流的强度直接反应了样品的质量厚度。 对于一定厚度的样品&am…

Python爬虫自动化从入门到精通第10天(Scrapy框架的基本使用)

Scrapy框架的基本使用 Scrapy框架简介Scrapy框架的运作流程安装Scrapy框架Scrapy框架的基本操作Scrapy常用命令 Scrapy框架简介 Scrapy框架主要包含以下组件&#xff1a; Scrapy Engine(引擎)&#xff1a;负责Spiders、Item Pipeline、Downloader、Scheduler之间的通信&#…

IC 术语

ADC Analog to Digital Convert 模拟信号到数字信号的转换电路AHB Advanced High Performance Bus ARM公司推出的AMBA总线规范之一&#xff0c;主要用于高性能模块(如CPU、DMA和DSP等)之间的连接APR Auto place and route 自动布局布线&#xff0c;是数字后端版图实现的主要流程…

统信UOS专业版系统安装教程 - 全盘安装UOS系统

全文导读&#xff1a;本文介绍了UOS系统安装&#xff08;全盘安装&#xff09;的过程&#xff0c;如果没有特殊要求&#xff0c;推荐安装UOS系统都采用全盘安装。 准备环境 制作好统信UOS专业版启动U盘 一台CPU频率≥2GHz、内存≥4GB、硬盘≥64GB的电脑 安装步骤 一、制作…