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

JVM无法分配内存

前言

😨不好啦❗ 天塌了❗ 系统崩了❗

😨今天下午,突然一半的系统瘫痪了

无法分配内存:


Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f1f2adf6000, 12288, 0) failed; error='无法分配内存' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 12288 bytes for committing reserved memory.
# An error report file with more information is saved as:
#/onty/hs_err_pid2482011.log

遇到这种大面积瘫痪,肯定是立马执行重启大法😁

排查过程

查看内存占用率

ps aux --sort=-%mem 按照内存使用率降序,查看内存占用情况:

USER         PID %CPU %MEM(占用率%VSZ(虚拟内存KBRSS(物理内存KBTTY      STAT START   TIME COMMAND
root           1  0.0  0.0 172328  9520 ?        Ss    2317  28:27 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root     1351641  0.1  0.0  32660  9496 ?        Ss   15:12   0:05 sshd: root [priv]
root     1348874  0.0  0.0  32660  9472 ?        Ss   14:48   0:00 sshd: root [priv]
root     1348945  0.0  0.0  26400  9468 ?        Ss   14:49   0:00 sshd: root [priv]
root     1557164  0.0  0.0  26400  9460 ?        Ss   16:05   0:00 sshd: root [priv]
root     1348599  0.0  0.0  26400  9452 ?        Ss   14:47   0:00 sshd: root [priv]
root     1419738  0.0  0.0  32660  9428 ?        Ss   15:29   0:00 sshd: root [priv]
root     1420875  0.0  0.0  26400  9412 ?        Ss   15:30   0:00 sshd: root [priv]
root     1641846  0.6  0.0  22140  8676 pts/9    S+   16:26   0:00 vim logger.out

上面的情况是事后模拟随便复制的一个中间信息

发现 vim logger.out 这个命令的进程占了好几个G的内存。

然后我们第一时间,就杀掉进程:kill -9 1641846 然后重启所有服务。

📕 第一个日志生产策略有很大问题!太大了!同时不知道是谁居然用 vim 命令查看了日志

整体分析系统内存情况

恢复所有服务之后,需要对内存整体的情况做一个分析以及剩余大小做一个分析。
执行free -m

‼ 生产环境数据不适合展示,所有随便调整了一下

              total        used        free      shared  buff/cache   available
Mem:          61551       58489        4910         137        3175        7527
Swap:             0           0           0

下面这个可以方便大家更直观的了解

内存类型总量(total)已使用(used)空闲(free)可分配给应用(available)
物理内存(Mem)615515848942316497
交换分区(Swap)0000

我们的总体内存在几十个G,剩余内存在几个G,因为有些日志好几个G了。使用VIM 编辑日志就直接把日志加载到内存导致内存占满。

为什么会存在大日志

❓排查logback-spring.xml 滚动策略,大小限制
看一下日志的滚动策略,是按月配置了的

	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件输出的文件名,按月分割,文件名带起始日期 --><FileNamePattern>${LOG_HOME}/${spring.application.name}-%d{yyyy-MM}.log</FileNamePattern></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern></encoder></appender>

❗发现名称规则和生产环境的logger.out 也对不上,并且路径也没对上。
看了一下启动命令,才发现问题,所有的日志都会一直定向的输入到logger.out中
>>/app/xx/logger.out &

✔所以不能这么搞啊,使用logback-spring.xml 配置的策略即可!同时需要排查logback的策略是否有文件大小限制,如下:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${spring.application.name}-%d{yyyy-MM-dd}.%i.log</FileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>5GB</totalSizeCap><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy>
</appender>

总结

启动命令存在严重的问题,导致把日志定向输出到logger.out文件中。导致日志文件日积月累到大几个G😨
再加上老铁查看日志用了不规范的命令,导致大日志文件加载到内存中,导致内存不足,jvm崩溃。

推荐阅读:上午系统崩溃(OOM),下午就喜提大礼包

http://www.dtcms.com/a/406709.html

相关文章:

  • CCIE网络工程师考哪个方向最好?CCIE选择攻略
  • 网站一般有哪些模块下载天马行市民云app
  • vscode:在保存less文件时,如何自动生成css文件,并且指定css文件的路径?
  • 网站的开发费用吗长春生物新冠疫苗
  • VR自然灾害学习机之VR台风应急避险系统
  • AI 绘画的未来趋势与发展前景
  • 网站建设的详细步骤软件开发方式
  • 电子信息专业课《数字电子技术》:硬件世界的逻辑基石
  • Kafka如何保证消息有序性
  • 茂名网站建设电话怎么把本地wordpress上传
  • 重量体积查询 API | 电商快递费用核算不再有争议
  • 建网站做哪方面阿里巴巴1688采购平台官网
  • 速通ACM省铜第十五天 赋源码(Creating a Schedule)
  • 软考 系统架构设计师系列知识点之杂项集萃(155)
  • ubuntu如何查看一个内核模块被什么模块依赖(内核模块信息常用命令)?
  • 做项目网站阿里云预安装wordpress
  • 提供网站推广公司电话wordpress分享微信插件下载地址
  • 用C#做CATIA二次开发(1)
  • 以事件响应为驱动的 iOS 混淆策略,把混淆做成可测、可回溯、可改进的安全能力(iOS 混淆、IPA 加固、事件响应)
  • 廊坊免费网站建设模板带着做计算机项目的网站
  • 帆软普通报表根据条件限制展示不同报表
  • 《2025年AI产业发展十大趋势报告》六十九
  • HTTP 请求方式当中GET请求需要请求头吗?
  • 如何做一个属于自己的网站秦皇岛黄金海岸
  • 【Android View】窗口机制
  • 基于Spring Boot的竞赛管理系统架构设计
  • php代码删除网站温州市建设工程管理网站
  • 【开题答辩全过程】以 Bug交流网站为例,包含答辩的问题和答案
  • Agent开发02-关键思想(ReAct、ReWOO、Reflexion、LLM Compiler等)
  • 【Python语法基础学习笔记】输入输出进阶