高级JAVA工程师解决生产环境JVM宕机Java进程挡掉操作系统内存异常实例讲解

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉内存溢出实例讲解

一、事故描述

生产环境Java进程莫名挡掉,JVM宕机。监控平台报警。生产停了,老板急了,客户爆了,怎么迅速解决事故?每次出现生产事故,都是一堆旁观者,真正解决问题的人其实很少。老板在旁边顶着,客户等着回复电话,甲方等着要说法!高级工程师其实没有那么容易!

二、核心JVM日志解读

JVM宕机就是java进程直接自己消失了,在jar包同级目录,会有JVM日志,这个日志,命名如下:

在这里插入图片描述

三、分析核心日志内容

日志内容如下:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 29360128 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
#   JVM is running with Zero Based Compressed Oops mode in which the Java heap is
#     placed in the first 32GB address space. The Java Heap base address is the
#     maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
#     to set the Java Heap base and to place the Java Heap above 32GB virtual address.
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2749), pid=983631, tid=0x00007fd6ba2e2700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_211-b12) (build 1.8.0_211-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.211-b12 mixed mode linux-amd64 compressed oops)
# Core dump written. Default location: /home/jk/core or core.983631
#---------------  T H R E A D  ---------------Current thread (0x00007fd6e4271800):  VMThread [stack: 0x00007fd6ba1e3000,0x00007fd6ba2e3000] [id=983646]Stack: [0x00007fd6ba1e3000,0x00007fd6ba2e3000],  sp=0x00007fd6ba2e13f0,  free space=1016k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xad3455]  VMError::report_and_die()+0x2e5
V  [libjvm.so+0x4e0537]  report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*)+0x67
V  [libjvm.so+0x910320]  os::pd_commit_memory(char*, unsigned long, unsigned long, bool)+0x100
V  [libjvm.so+0x90794f]  os::commit_memory(char*, unsigned long, unsigned long, bool)+0x1f
V  [libjvm.so+0x98c736]  PSVirtualSpace::expand_by(unsigned long)+0x56
V  [libjvm.so+0x98d9c8]  PSYoungGen::resize(unsigned long, unsigned long)+0xd8
V  [libjvm.so+0x98a166]  PSScavenge::invoke_no_policy()+0x1376
V  [libjvm.so+0x98a4fc]  PSScavenge::invoke()+0x4c
V  [libjvm.so+0x93a248]  ParallelScavengeHeap::failed_mem_allocate(unsigned long)+0x68
V  [libjvm.so+0xad4fa3]  VM_ParallelGCFailedAllocation::doit()+0x93
V  [libjvm.so+0xada1c6]  VM_Operation::evaluate()+0x46
V  [libjvm.so+0xad84fd]  VMThread::evaluate_operation(VM_Operation*) [clone .constprop.44]+0xcd
V  [libjvm.so+0xad8ae3]  VMThread::loop()+0x3a3
V  [libjvm.so+0xad8eb8]  VMThread::run()+0x78
V  [libjvm.so+0x90d952]  java_start(Thread*)+0x102VM_Operation (0x00007fd69cda24a0): ParallelGCFailedAllocation, mode: safepoint, requested by thread 0x00007fd5fd7cf000

核心内容:

#   The system is out of physical RAM or swap space
#   The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap

The system is out of physical RAM or swap space
The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
系统的物理 RAM 或交换空间不足
该进程在启用 CompressedOops 的情况下运行,并且 Java 堆可能会阻碍本机堆的增长

分析一下:
肯定跟操作系统内存有关系,内存相关的引起的宕机!

四、解决方法与思路

这段错误信息表明,Java 运行时环境(JRE)遇到了内存不足的问题。以下是一些可能的解决方法:

  1. 减少系统的内存负载:关闭一些不需要的进程或程序,以释放内存。
  2. 增加物理内存或交换空间:如果可能的话,可以添加更多的物理内存或增加交换空间的大小。
  3. 检查交换备份存储是否已满:确保交换空间有足够的可用空间。
  4. 减小 Java 堆大小:通过降低 -Xmx-Xms 参数的值来减小 Java 堆的大小。
  5. 减少 Java 线程数量:如果有过多的线程,可以考虑减少线程数量。
  6. 减小 Java 线程堆栈大小:降低 -Xss 参数的值可以减小线程堆栈的大小。
  7. 设置更大的代码缓存:使用 -XX:ReservedCodeCacheSize= 参数来增加代码缓存的大小。
  8. 如果 JVM 在零基础压缩Oops 模式下运行,并且 Java 堆位于前 32GB 地址空间中,可以使用 -XX:HeapBaseMinAddress 来设置 Java 堆的基础地址,并将 Java 堆放置在 32GB 虚拟地址之上,以允许本机堆增长。

请注意,具体的解决方法可能因系统配置和应用程序的具体情况而有所不同。你可能需要根据实际情况进行一些试验和调整。此外,确保你的应用程序没有内存泄漏问题也是很重要的。如果问题仍然存在,可能需要进一步调查和分析!

第一个解决思路就是增加物理内存的容量,如果增量至2倍4倍,整个大招基本都能解决!
第二个解决思路,扩展虚拟内存的容量到2倍!让物理内存占用降低,分离出更多的闲余内存!
第三个重复整个服务器,让内存重新释放!
第四个 减小 Java 堆大小:通过降低 -Xmx-Xms 参数的值来减小 Java 堆的大小。 将之前的配置减小!

特别情况

The system is out of physical RAM or swap space
The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap JAVA进程宕机,但是当前服务器还有剩余很多的内存,为啥还会内存不足呢?

当服务器还有剩余很多的内存,但仍然出现内存不足的错误时,可能有以下几个原因:

  • 进程内部资源没有释放:通过top命令分析进程编号,若进程占用内存高但使用CPU少,说明不是进程内存死循环造成的内存开销很大,而是由进程内部资源没有释放掉。
  • Java线程出现死锁或所有线程被阻塞。
  • 数据库连接池中的连接耗尽。
  • 内存泄漏导致了OutOfMemory
  • 服务器可用内存足够,但是分配给JVM的内存被耗尽。
  • 服务程序运行过程中替换了JAR包,但是没有进行重启服务。
  • 磁盘空间满。
  • 线程池满。

如果你遇到了内存不足的错误,可以根据实际情况检查上述可能的原因,并采取相应的解决措施。

解决思路

增大 Java 堆大小:通过降低 -Xmx-Xms 参数的值来增大 Java 堆的大小。
让操作系统分配更多的内存给到JAVA进程!

如下分析启动shell脚本!

#!/bin/sh
export JAVA_HOME=/home/java/jdk1.8.0_211
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarecho '' /home/jk/nasen.pid java -jar -Duser.timezone=GMT+08 -Xmx8000m -Xms6000m  /home/jk/nasen.jar >/dev/null &
#注意:必须有&让其后台执行,否则没有pid生成
echo $! > /home/jk/nasen.pid # 将jar包启动对应的pid写入文件中,为停止时提供pid

笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用公式在Excel中指定列值的变化实现自动间隔着色(不是按照固定的行数)

如果你的文件很小,可以手工着色;但如果很大,就要借助公式来着色; 目的是什么,其中之一是:提升可读性。 一起往下看吧!! 如果你想要根据Excel某列中值的变化来间隔着色,…

easyrecovery破解版百度云(含Mac/Win版)以及EasyRecovery可以恢复哪些设备

软件介绍 当不小心将回收站的文件删除了怎么办?想找回但是不知道怎么找回需要的数据文件?别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具,easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&…

景联文科技:提供行业垂直大模型训练数据

近年来,以大模型为代表的人工智能技术已成为国家科技实力竞争的焦点。其中垂直大模型作为重要方向,在相关政策引导及市场需求的驱动下,已展现出较强的发展活力。 行业垂直大模型是针对特定行业的需求和场景进行深度定制的。这意味着模型在训练…

蓝桥杯专题 bfs习题详解

1.离开中山路 #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<string> using namespace std; int x1,x2,y1,y2; int n,n1,m1; const int N1010;typedef pair<int,int> PII; queue<PII> q;int …

GIS软件应用(二)

任务&#xff1a; 1. 正确划分渔网并裁剪出研究区域 2. 渔网与poi数据正确空间链接并统计网格内类别POI数量 步骤&#xff1a; 将南京市边界进行投影变换&#xff0c;具体看我的这篇文章&#xff1a;GIS软件应用&#xff08;一&#xff09;-CSDN博客 选择ArcToolbox中的 Cr…

3.Linux/UNIX平台Python的下载、安装和配置环境变量——《跟老吕学Python编程》

3.Linux/UNIX平台Python的下载、安装和配置环境变量——《跟老吕学Python编程》 一、下载Linux/UNIX版Python1.Python官网2.Linux/UNIX版Python下载网址 二、在Linux/UNIX安装Python1.在Ubuntu Linux安装Python1.1 检查Python版本1.2 高级包管理工具1.3 添加存储库1.4 更新软件…

HTML静态网页成品作业(HTML+CSS)——电影肖申克的救赎介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

【Flink SQL】Flink SQL 基础概念:SQL 动态表 连续查询

Flink SQL 基础概念&#xff1a;SQL 动态表 & 连续查询 1.SQL 应用于流处理的思路2.流批处理的异同点及将 SQL 应用于流处理核心解决的问题3.SQL 流处理的输入&#xff1a;输入流映射为 SQL 动态输入表4.SQL 流处理的计算&#xff1a;实时处理底层技术 - SQL 连续查询5.SQL…

Netty架构详解

文章目录 概述整体结构Netty的核心组件逻辑架构BootStrap & ServerBootStrapChannelPipelineFuture、回调和 ChannelHandler选择器、事件和 EventLoopChannelHandler的各种ChannelInitializer类图 Protocol Support 协议支持层Transport Service 传输服务层Core 核心层模块…

Windows C++ 使用WinAPI实现RPC

demo下载地址&#xff1a;https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件&#xff08;创建helloworld.idl helloworld.acf&#xff09; 其中IDL文件&#xff1a; import "oaidl.idl"; import "ocidl.idl"; [ …

【LeetCode热题100】73. 矩阵置零(矩阵)

一.题目要求 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0…

2024考研计算机考研复试-每日重点(第二十期)

公众号“准研计算机复试”&#xff0c;超全大佬复试资料&#xff0c;保姆级复试&#xff0c;80%的题目都是上岸大佬提供的。 研宝们&#xff0c;App更新啦&#xff01; 计算机组成原理&#xff1a; 10.☆什么是数据存储的大端模式和小端模式&#xff1f; 大端模式&#xff1a;数…

github拉取项目找不到前端代码

今天从github上拉取了一个项目&#xff0c;使用docker部署在了服务器上&#xff0c; 代码正常运行&#xff0c;但是想在下载的项目中找前端代码遇到了问题&#xff0c;项目结构中的template模板只有一个页面&#xff0c;于是查看nginx配置文件 查看index.html 引入了一些js文件…

使用Julia及R语言生成正态分布的随机数字并写入CSV文件

在操作之前需要先下载Julia的Distributions包&#xff0c;这个包用于进行相关概率分布的函数调用。 在输入 ] 进入Julia包管理模式后输入&#xff1a; add Distributions 这里我使用我们自己实验室的实测数据 &#xff0c;平均值0.67&#xff0c;方差0.11&#xff0c;数据分…

聚氨酯封孔剂因为热爱

忙忙碌碌又一天,对每个顾客都用心服务,因为热爱,所以不辛苦,因为热爱,即使无数遍的重复也不会厌倦。 聚氨酯封孔材料的主要性能特点&#xff1a; 1、粘度低&#xff0c;易渗入微小裂隙&#xff1b; 2、粘合能力很强&#xff0c;具有持久强粘结性&#xff1b; 3、柔韧性.越&am…

HCIP —— BGP 路径属性 (上)

目录 BGP 路径属性 1.优选Preferred-Value属性值最大的路由 2.优选Local-preference 属性数值大的路由 3.本地始发的BGP路由优先于其他对等体处学习到的路由。 4..优选AS_PATH属性值最短的路由 BGP 路径属性 BGP的路由选路是存在优选规则的&#xff0c;下图为华为官网提供…

2 配置虚拟机

1.打开VM&#xff0c;主页的界面如下&#xff0c;点击"创建新的虚拟机" 2.选择“自定义&#xff08;高级&#xff09;”&#xff0c;然后点击下一步&#xff0c;如下图所示&#xff1a; 3.下图直接点击“下一步” 4.下图的界面上&#xff0c;注意&#xff0c;不要选择…

【STL】stack栈容器与list链表容器

1.栈stack 栈具有先进后出的特性&#xff0c;最先进入的数据压在最底下&#xff0c;最后出来 2.list链表容器 list链表容器是一种双向链表&#xff0c;两端都可插入与删除&#xff0c;是双向访问迭代器&#xff0c;与vertor随机访问迭代器有不同的区别 reverse&#xff08;&…

蓝桥杯-质因数问题

约数&#xff0c;又称因数&#xff1a;a % b 0,则b称为a的约数&#xff0c;包括1和a。 例如4的正约数有&#xff1a;1、2、4。6的正约数有&#xff1a;1、2、3、6。质因数&#xff1a; 质因数&#xff08;素因数或质因子&#xff09;在数论里是指能整除给定正整数&#xff08;…

基于SpringBoot+MYSQL+Vue的校园管理系统

目录 1、前言介绍 2、主要技术 3、系统流程分析 3.1、操作流程 3.2、添加信息流程 3.3、删除信息流程 4、系统设计 4.1 系统体系结构 4.2开发流程设计 4.3 数据库设计原则 4.4 数据表 5、运行截图(部分) 5.1管理员功能模块 5.2用户功能模块 5.3院校管理员功能模块…