【银河麒麟】系统内存使用异常现象分析及建议

news2024/10/3 2:25:14

1.现象描述

问题机器系统内存占用长时间90%以上,同时伴随着高iowait,在故障时无法ssh登录,同时也影响生产业务。但之后系统内存占用会突然掉下来,在内存自己掉下来后能ssh登录。

2.显示分析

2.1 sa日志分析

查看问题机器3月15日sa日志信息,首先来看问题发生时的系统内存使用情况。如下图所示,可以看到3月15日时系统内存基本已经耗尽,available经常在0K附近徘徊。

继续查看此时内存回收情况,如下图所示,可以看到此时系统的kswapd异步内存回收以及direct同步内存回收都已启用,但仍无法缓解系统内存紧张情况。结合上图的一个内存使用情况,大部分内存都为kbmemused,基本都是进程内存使用,无法被系统内存回收。

下一步查看问题发生时的系统CPU使用情况,如下图所示,可以看到问题发生时系统这边除了内存存在高占用情况,CPU也存在%iowait高,无空闲CPU资源的情况。

具体查看当时的磁盘使用情况,我们发现问题发生时存在大量的磁盘读现象,且磁盘读tps波动和CPU的%iowait波动情况一致,这说明当时CPU资源大都被大量的磁盘读取所使用。

综合上述我们可以看到在发生ssh无法登录、生产业务受影响时,系统的CPU、内存资源基本耗尽,且存在大量的磁盘读任务。

接下来我们来查看故障后的情况,如客户所说在问题发生后系统内存占用突然掉了下来,ssh等也恢复正常。对此我们同样查看sa日志,可以看到在长时间高内存占用后,系统内存使用率突然下降,同时磁盘读、CPU使用也同步降低。

系统内存、磁盘、cpu资源同步降低,这大概率是某些业务应用被终止了从而释放出了资源。对问题环境3月15日、重启后的3月19日以及正常机器3月19日的进程信息,我们发现问题环境3月15日系统资源使用率降低后的环境,java应用进程减少了4个,正常环境和重启后的问题机器都启动了5个java进程,但3月15日系统资源使用率降低后的环境中只剩下了1个。

2.2 问题环境java进程情况分析

如2.1节sa日志分析结果所示,导致问题环境内存、CPU资源基本耗尽的大概率是那几个java应用进程,且从sa日志的磁盘使用信息来看,这些业务进程当时应该在进行大量的磁盘读操作。

查看重启的问题环境机器,我们发现系统默认启动了5个java应用进程,从pstree来看,这些java进程都由同一脚本startserver.sh启动。

查看其进程启动参数,我们发现这些java进程是客户使用的自己编译的jdk1.7.0_67版本,而非麒麟这边的jdk。同时其设置了java进程初始堆内存和最大堆内存为2048M,永久代的最大内存为512MB。

考虑到其他java进程的堆外内存使用,这5个java进程最大可占用12.5G内存以上。再加上其他进程内存占用及各类缓存,在系统总内存为16G的情况下,遇到业务高峰,内存被耗尽是正常现象。如问题环境重启后的的sosreport日志所示,当前系统剩余内存仅剩余35M左右,available为1.8G。后续若是应用内存继续增长、再伴随大量磁盘读业务,很容易再次出现系统资源耗尽,无法ssh、业务受到影响的情况。

2.3 java进程内存使用分析

2.2节中,我们分析认为当前系统内存大小和java进程设置的最大内存使用上限及进程数量不太符合。但除了问题环境外,还有使用同样配置的其他机器未出现问题。对比两边java进程的内存使用情况后我们发现,二者java进程的虚拟内存申请大小基本一致,每个java进程基本都为7G左右,但实际的RSS却有不同,问题环境的java进程现在每个RSS基本为2-2.5G。

而正常环境java进程的RSS基本为1.4-1.6G,这大概率是导致两个环境系统资源使用不同的原因。

3.处理总结

综上所述,通过分析sa日志,我们可知问题环境15号ssh无法登录、业务受到影响的原因为系统内存、CPU资源基本耗尽,同时存在大量的磁盘读业务。对比多个sosreport文件信息后,我们能大致确定15号后续系统内存使用了降低、ssh恢复正常是由于5个java业务进程中4个挂掉了,从而释放了大量空闲内存,降低了磁盘读,缓解了CPU压力。

之后我们通过查看java进程的启动参数,我们发现在当前系统总可用内存不到16G的情况下,单个java进程初始堆内存和最大堆内存为2048M,永久代的最大内存为512MB。考虑到其他java进程的堆外内存使用,这5个java进程最大可占用12.5G内存以上。再加上其他进程内存占用及各类缓存,遇到业务高峰,内存被耗尽是正常现象。对此需要应用方评估java进程的内存使用负载与系统总内存是否匹配。

最后通过对比问题环境和正常环境的java进程内存情况,我们发现在二者java进程虚拟内存基本一致的情况下,问题环境java进程的RSS要明显高出不少。由于当前java进程使用的jdk为客户自己编译的jdk1.7.0_67版本,且实际的java应用内存使用基准、收到业务压力影响等因素均未可知,建议业务组自行对java进程内存使用进行分析。

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

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

相关文章

STM32的 DMA(直接存储器访问) 详解

STM32的DMA(Direct Memory Access,直接存储器存取)是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM,不需要CPU的干预,从而释放CPU资源,提高CPU工作效率,本文基于STM32F…

浏览器中js外挂脚本的执行方式

1、开发工具控制台交互执行 网页中按F12打开开发者工具,选择“控制台”,键入js脚本命令回车执行,适用于临时使用脚本逻辑简单的场景,实例如下: // 获取网页元素的文本脚本 var elem document.getElementById("…

7.x86游戏实战-C++实现跨进程读写-跨进程写内存

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:6.x86游戏实战-C实现跨进程读写-通过基址读取人物状态标志位 上一个内容通过基…

硬盘分区读不出来的危机与数据拯救指南

在数字时代,硬盘作为我们存储珍贵数据的“保险箱”,其稳定性和可访问性至关重要。然而,当硬盘分区突然读不出来时,这份安全感瞬间化为泡影,让人心急如焚。本文将深入探讨硬盘分区读不出来的原因、提供两种实用的数据恢…

使用ssh服务器管理远程主机

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、配置网卡服务 1、配置网卡参数 2、创建网络会话 3、绑定两块网卡 二、远程控制服务 1、配置sshd服务 2、在Windows连接 3、安全密钥…

云原生必知必会-docker安装

文章目录 一、docker安装二、centos7 安装docker-compose三、修改docker的镜像源四、docker异常处理(没有那个文件或目录)五、配置虚拟机上docker的代理总结 一、docker安装 # 安装上传下载工具 上传命令rz -bey,下载命令sz 文件名 yum -y i…

自定义刷题工具-python实现

背景: 最近想要刷题,虽然目前有很多成熟的软件,网站。但是能够支持自定义的导入题库的非常少,或者是要么让你开会员,而直接百度题库的话,正确答案就摆在你一眼能看见的地方,看的时候总觉得自己…

Xubuntu24.04之设置高性能模式两种方式(二百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一:B站视频简介页面 代码: build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

虚拟机如何选择处理器和内核数量,实现最佳性能

一、基本概念 处理器数量指的是:虚拟的CPU数量。 每个处理器的内核数量指的是:虚拟CPU的内核数。 处理器内核总数处理器数量✖每个处理器的内核数量 此处虚拟机的处理器内核总数对应于真实物理机(或者叫宿主机)的CPU线程数&#x…

Python编程学习笔记(3)--- 操作列表

1、遍历列表 遍历列表可以采用for循环的方法,需要对列表中的每一个元素都执行相同的操作。 具体事实如下: name ["ada","cdb","dbc","bad","jinb"] for Name in name:print(Name)运行结果&#x…

灵活多变的对象创建——工厂方法模式(Python实现)

1. 引言 大家好,又见面了!在上一篇文章中,我们聊了聊简单工厂模式,今天,我们要进一步探讨一种更加灵活的工厂设计模式——工厂方法模式。如果说简单工厂模式是“万能钥匙”,那工厂方法模式就是“变形金刚”…

Windows10 企业版 LTSC 2021发布:一键点击获取!

Windows10企业版 LTSC 2021是微软发布的长达5年技术支持的Win10稳定版本,追求稳定的企业或者个人特别适合安装该系统版本。该版本离线制作而成,安全性高,兼容性出色,适合新老机型安装,力求带给用户更稳定、高效的操作系…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的: linux

db期末复习自用[应试向 附习题]

第一章 数据库系统实现整体数据的结构化,主要特征之一,是db区别于文件系统的本质区别。 数据库系统三个阶段:人工、文件、数据库系统。 数据库管理系统的功能:数据库定义、操纵 、(保护、存储、维护)、数…

Kubernetes 为pod指定DNS

在k8s里面,默认创建pod会给pod默认分配一个默认的dns,这个dns是哪来的呢?可不可以改成其他的dns呢? 先进入到pod里面来,可以看到这里面默认设置的DNS服务器,这个服务器地址为10.96.0.10。这个地址是k8s自动…

Linux基本命令的使用示例

目录 1实现效果:在downloads目录下创建1个空文件夹empty,创建1个空文件lake.txt,输入任意数据保存后退出 2实现效果:搜索包含关键字"泉眼"的行 3实现效果:重命名文件夹empty为full,复制文件cc…

C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?

1.题目描述: 任意输入一个字符,判断其 ASCII 是否是奇数,若是,输出 YES ,否则,输出 NO例如,字符 A 的 ASCI 值是 65 ,则输出 YES ,若输入字符 B(ASCII 值是 66)&#xff…

解决:Flink向kafka写数据使用Producer精准一次(EXACTLY_ONCE)异常

在使用flink向kafka写入数据报错:Caused by: org.apache.kafka.common.KafkaException: Unexpected error in InitProducerIdResponse; The transaction timeout is larger than the maximum value allowed by the broker (as configured by transaction.max.timeou…

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…