linux 解决发现不到的 内存占用率

2023-09-21 11:06:24

1、问题浮现

项目做久了,你往往会遇到一些稀奇古怪的问题。下面咱就来聊聊关于内存无故使用率变大的真相。事情是这样的,最近一个客户的服务器,内存使用率在90%左右,这很不正常,导致某云的云安全中心一直报警,开始的时候没有关注。后面,有一个项目需要紧急上线,并且项目相当吃cpu和内存。于是,问题就出来了。90%的内存,系统是不会宕机的,但是多少有些些的抖动,也就是卡顿。当这个项目上线后,时间不久,服务器直接当机了。是的,你没有听错,是服务器宕机了。这是严重性优先级为1的问题,抓紧着手处理。因为是上线了一个项目导致的,所以先把项目停掉。果然内存使用率下来了,恢复到90%的状态.

当然,现在系统是可以正常运行的。

但是一想到刚才那一幕,后背发凉,直流汗。问题既然已经爆出来了,还是要解决的。所以,继续发挥拼命三郎的精神。开始查什么原因导致的。先从服务器运行进程查起,top命令(也可以使用htop,atop这些),个人觉得是感官上好看一些 ,画面好看一些,功能上基本是一样的,毕竟是老牌的 top。top发现进程的使用率并不高,远远达不到90%,截图如下:

截图中的使用率加起来,也不到70%,那是怎么来的88%。这个问题确实很头疼,并且项目也不会骗你,你一上线,系统就要宕机。继续解决。。。。查。。。查。。。查。。。。query。。。

query。。。query。。。

 2、问题解决

Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。

Huge Pages是从Linux Kernel 2.6后被引入的。目的是使用更大 的内存页面(memory page size)以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。

透明大页(Transparent Huge Pages)缩写为THP,这个是RHEL 6(其它分支版本SUSE Linux Enterprise Server 11, and Oracle Linux 6 with earlier releases of Oracle Linux Unbreakable Enterprise Kernel 2 (UEK2)) 开始引入的一个功能。

这两者有啥区别呢?

这两者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。相信有不 少人将Huge Pages和Transparent Huge Pages混为一谈。目前透明大页与传统HugePages联用会出现一些问题, 导致性能问题和系统重启。Oracle 建议禁用透明大页(Transparent Huge Pages)。在 Oracle Linux 6.5 版中, 已删除透明HugePages的支持。

注意:

标准大页

HugePages size的大小默认为2M,这个也是可以调整的。区间范围为2MB to 256MB。
同时HuagePages是不可以被SWAP到磁盘的。
Hugepages在/proc/meminfo中是被独立统计的,与其它统计项不重叠,既不计入进程的RSS/PSS中,又不计入 LRU Active/Inactive,也不会计入cache/buffer。如果进程使用了Hugepages,它的RSS/PSS不会增加。

注意:

透明大页

THP 目前只能映射异步内存区域,比如堆和栈空间。THP是可以被SWAP到磁盘的。
/proc/meminfo里AnonHugePages统计的是Transparent HugePages (THP)。它与/proc/meminfo的其他统计项 有重叠,首先它被包含在AnonPages之中,而且在/proc/<pid>/smaps中也有单个进程的统计,与进程的RSS/PSS 是有重叠的,如果用户进程用到了THP,进程的RSS/PSS也会相应增加,这与Hugepages是不同的。
 

到这里,你就能知道,为什么内存被吃掉这么多,都是这个透明大页搞的鬼!

查看:果然有3300

开始调整:

先暂时在服务器调整,这种在重启后就失效了。

 echo never > /sys/kernel/mm/transparent_hugepage/enabled

方框里面的英文是never说明已经关掉了透明大页。

如果此种方法没有生效,可以同时释放下缓存:

echo 3 > /proc/sys/vm/nr_hugepages

再次检查发现:

 

内存使用率降下来了,也符合预期。

 永久生效关闭透明大页方法:

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

以上就是解决内存使用率高的方法,需要的抓紧拿走吧。其实出现这些问题,只能说明我们自己还不够强大,猿们,抓紧强大起来吧!

最后,插播广告,喜爱技术,喜欢交流的,诚挚邀请你来交流群。

更多推荐

Go语言进化之路:泛型的崛起与复用的新篇章

一、引言泛型编程在许多编程语言中都是一项非常强大的特性,它可以使程序更加通用、具有更高的重用性。然而,Go语言在很长一段时间内一直没有提供泛型功能。在过去的一些版本中,Go语言开发者试图引入泛型,但最终都因为各种原因被取消或搁置了。直到Go1.18版本,终于引入了泛型功能。在本文中,将会介绍这项新特性及其使用方法。二、

MATLAB向量化编程基础精讲教程

向量化编程是MATLAB中一种重要的编程技术,通过使用向量和矩阵运算代替循环,可以提高代码的执行效率和可读性。本文将介绍MATLAB向量化编程的基础知识,并提供多个案例代码,帮助读者理解和应用向量化编程。一、向量化编程基础知识:利用内置函数:MATLAB提供了许多内置函数,这些函数经过优化,能够高效地处理向量和矩阵操作

【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述【图像去噪】【TGV正则化器的快速计算方法】通过F

统一网关Gateway

2.5统一网关Gateway网关功能:身份认证和权限校验服务路由、负载均衡请求限流权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,

蓝牙核心规范(V5.4)10.9-BLE 入门笔记之GAP

1.概述蓝牙核心规范的通用访问配置文件(GAP)部分定义了与设备发现和在两个设备之间建立连接有关的过程。如何执行数据的基本无连接通信、如何使用周期性广播(参见PADVB-LEPeriodicAdvertisingBroadcast)以及如何设置等时通信(参见LEBIS和LECIS-IsochronousCommunic

基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现

需要本项目的可以私信博主获取源码及项目!!!本研究基于高校图书馆的借阅信息、馆藏图书信息、读者入馆信息、用户信息等多维度的数据表,首先将不同年份的数据拼接在一起,按照时间维度进行整合,并保证数据维度字段一致性。然后对数据进行清洗,其中包括空值的检测和处理,采用Python的正则表达式模块对某些字段进行约束约束和处理,比

ip地址的正则表达式

ip地址的正则表达式checkIpSpecial:{//验证IP地址validator:function(value){//varreg=/^((1?\d?\d|(2([0-4]\d|5[0-5])))\.){3}(1?\d?\d|(2([0-4]\d|5[0-5])))$/;这个正则表达式的意思是:以数字开头,紧接着

Redis缓存设计与性能优化最佳实践

开发规范与性能优化一、键值设计1.key名设计(1)【建议】:可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id(2)【建议】:简洁性保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:(3)【强制】:不要包含特殊字符反例:包含空格、换行、单双引

QT : 仿照QQ 完成弹出登录窗口,并实例化组件

1.运行效果图2.Headers#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>classMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parent=nullptr);~

MS COCO数据集介绍以及pycocotools使用

MSCOCO数据集介绍以及pycocotools使用1、MSCOCO数据集简介2、MSCOCO数据集目录结构3、MSCOCO标注文件格式3.1使用Python的json库查看3.2使用官方cocoAPI查看4、目标检测验证任务mAP1、MSCOCO数据集简介2、MSCOCO数据集目录结构├──coco2017:数据集根

log4j2 日志保存至数据库

文章目录概述一、springmvc工程1.创建数据库日志表2.log4j2.xml引入JDBCAppender3.定义日志管理类4.编写日志输出代码5.运行结果6.完整代码二、springboot工程1.创建数据库日志表2.log4j2.xml引入JDBCAppender3.定义日志管理类4.遗留问题5.解决办法6.完

热文推荐