Linux 实例内存使用率过高

现象描述

Linux 云服务器实例出现由内存问题引发的故障。例如,系统内部服务响应速度变慢、服务器登录不上、系统触发 OOM(Out Of Memory)等。

可能原因

可能是实例内存使用率过高等问题引起。通常情况下当实例内存使用率持续高于90%时,可判断为实例内存使用率过高。 您可以参见 故障处理,判断问题是否由内存使用率过高引起。参见 其他内存问题典型案例分析,定位问题原因。

故障处理

1. 参见 相关操作,查看内存使用率是否过高。

内存使用率过高,执行下一步。

内存使用率正常,请参见 其他内存问题典型案例分析,进一步定位问题原因。

2. 在系统内部执行 top 命令后按 M,查看 RES SHR 列是否有进程占用内存过高。

否,执行下一步。

是,对应进程类型进行操作,详情请参见 分析进程

3. 执行以下命令,查看共享内存占用是否过高。

cat /proc/meminfo | grep -i shmem

返回结果如下图所示:



4. 执行如下命令,查看不可回收的 slab 内存占用是否过高。

cat /proc/meminfo | grep -i SUnreclaim

返回结果如下图所示:



5. 执行以下命令,查看是否存在内存大页。

cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize"

返回结果如下图所示:



HugePages_Total 输出为0,请参见 其他内存问题典型案例分析,进一步定位问题原因。

HugePages_Total 输出非0,表示配置了内存大页。内存大页的大小为 HugePages_Total*Hugepagesize, 您需确认 hugepage 是否为其他恶意程序配置。若确认已不需要内存大页,可通过注释 /etc/sysctl.conf 文件中的 vm.nr_hugepage 配置项,再执行 sysctl -p 命令取消内存大页。

相关操作

查看内存使用率

由于不同 Linux 发行版的 free 命令输出的含义可能有区别,内存使用率不能通过简单的 free 命令输出信息进行计算得出。请按照以下步骤,通过腾讯云内存监控得到内存使用率:

1. 登录 云服务器控制台,进入实例管理页面。

2. 选择实例 ID,进入实例详情页面,并选择监控页签。

3. 在内存监控中可查看该实例的内存利用率。如下图所示:



计算内存使用率

内存监控中内存使用率计算方法为:用户使用的内存量与总内存量之比,不包括缓冲区与系统缓存占用的内容。计算过程如下:

=MemTotal - MemAvailable)100% / MemTotal

计算过程中使用的 MemTotal MemAvailable 参数可从 /proc/meminfo 中获取。/proc/meminfo 示例如下:

1. [root@VM_0_113_centos test]# cat /proc/meminfo

2. MemTotal: 16265592 kB

3. MemAvailable: 3005888 kB

3. MemFree: 1880084 kB

4. ......

5. Buffers: 194384 kB

6. Cached: 13647556 kB

7. ......

8. Shmem: 7727752 kB

9. Slab: 328864 kB

10. SReclaimable: 306500 kB

11. SUnreclaim: 22364 kB

12. ......

13. HugePages_Total: 0

14. Hugepagesize: 2048 kB

参数说明如下:

参数

说明

MemTotal

系统总内存。

MemAvailable

可用内存

MemFree

系统剩余内存。

Buffers

表示块设备(block device)所占用的缓存页,包括直接读写块设备,以及文件系统元数据(metadata),例如 SuperBlock 所使用的缓存页。

Cached

page cache,包含 tmpfs 中的文件 POSIX/SysV shared memory 及 shared anonymous mmap。

Shmem

包括共享内存,tmpfs 等。

Slab

内核 slab 分配器分配的内存,可以用 slabtop 查看。

SReclaimable

可回收的 slab。

SUnreclaim

不可回收的 slab。

HugePages_Total

内存大页总共的页数。

Hugepagesize

内存大页的大小。

如果不存在 MemAvailable, 则内存使用率 =MemTotal - MemFree - Buffers - Cached - SReclaimable + Shmem)100%/ MemTotal

### 查看和优化Linux服务器内存使用率 #### 使用命令行工具查看内存使用情况 为了有效地管理和优化Linux服务器上的内存资源,可以利用一系列内置命令行工具来获取当前系统的内存状态。 - **free 命令** `free` 是一个简单而有效的工具,用于显示系统中物理内存以及交换空间的总量、已用量和可用量。此命令能够快速给出关于整个系统内存状况的一个概览[^1]。 ```bash $ free -h ``` - **top 和 htop 工具** 这两个交互式的进程监视器不仅可以展示实时的CPU负载信息,还可以用来观察各个进程中占用的内存量。htop 提供了一个更友好的界面并支持鼠标操作,便于用户直观地识别消耗大量内存的应用程序实例[^2]。 ```bash $ top # 或者如果安装了htop则可运行 $ htop ``` - **vmstat 实用程序** `vmstat` 可定期收集有关虚拟内存统计的数据,包括但不限于swap-in/out次数、分页活动频率等重要指标。这对于深入理解内存子系统的运作机制非常有帮助[^4]。 ```bash $ vmstat 1 5 ``` 以上这些工具可以帮助管理员迅速定位到潜在的问题所在,并为进一步采取措施打下基础。 #### Java 应用特别注意事项 针对部署于Linux平台之上的Java应用程序而言,在日常运维过程中应当格外留意JVM(Java Virtual Machine)内部的行为模式及其对外部环境的影响。具体来说: - 定期审查GC日志文件中的Full GC事件发生频次; - 调整堆大小配置参数(-Xms,-Xmx),使之匹配实际业务需求; - 合理规划PermGen/Metaspace区域容量以防止类加载溢出异常的发生; 上述做法有助于减少不必要的垃圾回收开销,从而间接达到降低整体内存压力的效果。 #### 长期解决方案与预防策略 除了依靠即时反馈外,建立一套完善的预警体系同样不可或缺。这通常涉及到设置合理的阈值触发条件并通过邮件/短信等方式及时通知相关人员介入处理。与此同时,还应考虑实施自动化脚本定期执行清理工作,比如删除过期缓存数据或是压缩历史记录档案等等。 最后值得注意的是,当遇到严重的性能瓶颈时不妨尝试升级硬件设施——增加额外RAM条数往往能带来立竿见影的好处!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

soso1968

你的鼓励是我继续创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值