当前位置: 首页 > news >正文

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

背景,服务器上的一个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程序的运行生成该日志

 

 

相关文章:

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

背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:26…...

数画-AI绘画-免费的人工智能AI绘画网站

文章目录 AIGC什么是AI作画?Prompt数画AIGC的未来发展结语 AIGC AIGC(AI Generated Content)是指利用人工智能生成内容。是利用人工智能来生成你所需要的内容,GC的意思是创作内容。与之相对应的概念中,比较熟知的还有P…...

ElasticSearch安装、启动、操作及概念简介

ElasticSearch快速入门 文件链接:https://pan.baidu.com/s/15kJtcHY-RAY3wzpJZIn4-w?pwd0k5a 提取码:0k5a 有些软件对于安装路径有一定的要求,例如:路径中不能有空格,不能有中文,不能有特殊符号&#xf…...

Linux用户管理

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 前言 努力是最好的捷径! 目录 1.Linux基于用户身份对…...

Docker 的安装和镜像容器的基本操作

文章目录 一、Docker 概述1、Docker的概念2、容器的优点3、容器与虚拟机的区别4、容器在内核中支持2种重要技术5、Docker核心概念 二、Docker的安装1、docker的安装步骤2、实例操作:安装docker 三、Docker 镜像操作1、搜索镜像2、获取镜像3、镜像加速下载4、查看镜像…...

被盗的ChatGPT账户在暗网热销,ChatGPT的隐私和安全问题依旧值得关注

在过去的一个月,Check Point研究人员在暗网上观察到了与ChatGPT相关的各种讨论和交易。暗网上最新的活动包括泄露和免费发布ChatGPT账户的凭据,以及交易被盗的ChatGPT账户。 根据Check Point进行的一项研究,从今年3月以来,被盗的…...

OpenCV2 计算机视觉应用编程秘籍:6~10

原文:OpenCV2 Computer Vision Application Programming Cookbook 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线…...

如何对农田温室气体进行有效模拟?

农业是甲烷(CH4)、氧化亚氮(N2O)和二氧化碳(CO2)等温室气体的主要排放源,占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主,如何对农田温室气体进行有效…...

java数据结构刷题练习

class Solution {public boolean containsDuplicate(int[] nums) {Arrays.sort(nums);for(int i1;i<nums.length;i){if(nums[i-1]nums[i])return true;}return false; } }作者&#xff1a;affectionate-albattani7tn 链接&#xff1a;https://leetcode.cn/problems/contains…...

《商用密码应用与安全性评估》第一章密码基础知识1.6密钥交换协议

密码协议是指两个或者两个以上参与者使用密码算法时&#xff0c;为了达到加密保护或安全认证目的而约定的交互规则。 密钥交换协议 公钥密码出现之前&#xff0c;密钥交换很不方便&#xff0c;公钥密码可以在不安全信道上进行交换&#xff0c;交换的密码协议是为了协商会话密钥…...

Qt Quick - TabBar

Qt Quick - TabBar使用总结 一、概述二、调整选项卡三、Flickable标签三、定制化 一、概述 TabBar其实就是选项卡&#xff0c;TabBar是由TabButton控件填充&#xff0c;TabBar可以与任何提供currentIndex属性的布局或容器控件一起使用&#xff0c;如StackLayout或SwipeView。T…...

ElasticSearch集群搭建

一、ElasticSearch 集群 1.1 搭建集群 Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群&#xff0c;三个Master节点最多只能故障一台Master节点&#xff0c;如果故障两个Master节点&#xff0c;Elasticsearch将无法组成集群.会报错&…...

【pan-sharpening 攻击:目标检测】

Adversarial pan-sharpening attacks for object detection in remote sensing &#xff08;对抗性泛锐化攻击在遥感目标检测中的应用&#xff09; 全色锐化是遥感系统中最常用的技术之一&#xff0c;其目的是将纹理丰富的PAN图像和多光谱MS图像融合&#xff0c;以获得纹理丰…...

nginx反向代理_负载均衡的配置

说明 两台虚拟机&#xff1a; 88节点是自己的虚拟机 66节点是小组成员的虚拟机&#xff0c;我们暂且叫同学机 tomcat端口&#xff0c;分别为8081和8082 总结就是&#xff1a; 自己虚拟机上面安装nginx和tomcat8082 同学机上安装tomcat8081 一、开始安装nginx&#xff08;只安装…...

程序员随时担心被抛弃......大厂外包值不值得去?

外包”这个词经常被人提及&#xff0c;而且也经常被我们所“鄙夷”&#xff0c;很多人都在四处问&#xff1a;“软件外包公司到底能不能去”&#xff1f; 外包公司到底能不能学到真正的技术&#xff1f; 外包大厂能不能去&#xff1f; 今天就给大家详细分享下外包的利与弊 做…...

C++解释器模式实战:从设计到应用的全面指南

目录标题 第一章&#xff1a;解释器模式简介&#xff08;Introduction to the Interpreter Pattern&#xff09;1.1 模式定义&#xff08;Pattern Definition&#xff09;1.2 解释器模式的用途&#xff08;Uses of the Interpreter Pattern&#xff09; 1.3 解释器模式的优缺点…...

使用华为云免费资源训练Paddle UIE模型

一、创建虚拟环境 好习惯&#xff0c;首先创建单独的运行环境 conda create -n uie python3.10.9 conda activate uie 二、安装paddle框架及paddlenlp 2.1 参考官方文档安装paddle 开始使用_飞桨-源于产业实践的开源深度学习平台 首先查看自己服务器cuda版本&#xff0c;…...

深度学习12. CNN经典网络 VGG16

深度学习12. CNN经典网络 VGG16 一、简介1. VGG 来源2. VGG分类3. 不同模型的参数数量4. 3x3卷积核的好处5. 关于学习率调度6. 批归一化 二、VGG16层分析1. 层划分2. 参数展开过程图解3. 参数传递示例4. VGG 16各层参数数量 三、代码分析1. VGG16模型定义2. 训练3. 测试 一、简…...

Doris(3):创建用户与创建数据库并赋予权限

Doris 采用 MySQL 协议进行通信&#xff0c;用户可通过 MySQL client 或者 MySQL JDBC连接到 Doris 集群。选择 MySQL client 版本时建议采用5.1 之后的版本&#xff0c;因为 5.1 之前不能支持长度超过 16 个字符的用户名。 1 创建用户 Root 用户登录与密码修改 Doris 内置 r…...

深入浅出 Golang 内存管理

了解内存管理~ 前言&#xff1a; 本节课主要介绍了内存管理知识与自动内存管理机制&#xff0c;并对目前 Go 内存管理过程中存在的问题提出了解决方案&#xff0c;同时结合了上次课程学习的《Go 语言性能优化》相关知识&#xff0c;提供可行性的优化建议 … 自动内存管理 Go…...

Spring Boot 3.0 + Java 17 微服务实战:用Gradle统一管理多模块依赖与版本,告别配置混乱

Spring Boot 3.0 Java 17 微服务实战&#xff1a;用Gradle统一管理多模块依赖与版本 在微服务架构中&#xff0c;依赖管理往往成为开发者的噩梦。想象一下&#xff0c;当你需要在十几个子模块中同步更新Spring Boot版本时&#xff0c;传统的做法是在每个模块的构建文件中逐一修…...

Conda环境管理全攻略:从零配置到VSCode无缝衔接(附清华镜像加速)

Conda环境管理全攻略&#xff1a;从零配置到VSCode无缝衔接&#xff08;附清华镜像加速&#xff09; 在数据科学和机器学习领域&#xff0c;Python环境的配置与管理往往是项目开始的第一步&#xff0c;也是最容易让初学者感到困惑的环节。不同项目可能需要不同版本的Python解释…...

Phi-4-mini-reasoning入门指南:用Gradio Blocks构建多步解题UI

Phi-4-mini-reasoning入门指南&#xff1a;用Gradio Blocks构建多步解题UI 1. 认识Phi-4-mini-reasoning Phi-4-mini-reasoning是一款3.8B参数的轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、…...

从豆瓣到StyleTalk:手把手教你用真实场景数据微调你的中文对话模型

从豆瓣到StyleTalk&#xff1a;手把手教你用真实场景数据微调你的中文对话模型 当你已经掌握了基座模型微调的基础技能&#xff0c;如何让模型真正理解特定领域的专业术语&#xff0c;或是模仿某种独特的说话风格&#xff1f;本文将带你深入实战&#xff0c;从数据清洗到效果评…...

本地Cookie管理工具:安全导出与高效应用指南

本地Cookie管理工具&#xff1a;安全导出与高效应用指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字化环境中&#xff0c;Cookie作为…...

创维E900V22D_S905L3S(B)芯片-安卓9.0-免拆线刷固件包及短接神器使用指南

1. 创维E900V22D刷机前的准备工作 拿到创维E900V22D机顶盒的第一件事&#xff0c;就是确认它的硬件配置。这个型号采用的是晶晨S905L3S(B)芯片方案&#xff0c;运行的是安卓9.0系统。我遇到过不少朋友因为没看清芯片型号就开刷&#xff0c;结果把盒子刷成砖的案例。所以一定要先…...

请解释 Linux 操作系统中的进程与线程的区别,并举例说明它们各自的应用场景。

在 Linux 操作系统中&#xff0c;**进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;**是程序执行的基本单位&#xff0c;但它们在资源管理、隔离性、通信方式和性能开销上有显著区别。一、核心概念对比特性进程 (Process)线程 (Thread)定义操作系统进…...

从单工具到插件集:在Coze IDE里用Python/Node.js打造你的专属工具链

从单工具到插件集&#xff1a;在Coze IDE里用Python/Node.js打造你的专属工具链 在当今快速发展的AI应用开发领域&#xff0c;开发者们不再满足于简单的API调用和单一功能实现。随着业务逻辑的复杂化&#xff0c;如何高效地构建、管理和部署一系列相互关联的工具链&#xff0c;…...

游戏服务器开发者的选择:用Fastutil的Object2ObjectOpenHashMap优化NPC数据存储

游戏服务器性能优化实战&#xff1a;Fastutil的Object2ObjectOpenHashMap在NPC数据管理中的应用 在大型多人在线游戏&#xff08;MMO&#xff09;开发中&#xff0c;NPC&#xff08;非玩家角色&#xff09;系统的数据管理往往成为性能瓶颈。传统Java集合在高频更新场景下容易引…...

Overleaf-Workshop:在VSCode中实现Open Overleaf项目的无缝协作与高效管理

Overleaf-Workshop&#xff1a;在VSCode中实现Open Overleaf项目的无缝协作与高效管理 【免费下载链接】Overleaf-Workshop Open Overleaf/ShareLaTex projects in vscode, with full collaboration support. 项目地址: https://gitcode.com/gh_mirrors/ov/Overleaf-Workshop…...