kswapd0内存过高排查经历

简介: kswapd0内存过高排查经历

操作系统都用分页机制来管理物理内存,操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中,由于内存持续不足,这个换页动作持续进行,kswapd0是虚拟内存管理中负责换页的,当服务器内存不足的时候kswapd0会执行换页操作,这个换页操作是十分消耗主机CPU资源的。


通过top发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。


问题描述:kswapd0 进程占用了系统大量 CPU 资源。


处理办法:Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。

当系统内存不足时,kswapd0 会频繁的进行换页操作。

而由于换页操作非常消耗 CPU 资源,所以会导致该进程持续占用较高 CPU 资源。

通常是由于系统在持续的进行换页操作所致。则可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。

 

 或者您可通过调整vm.swappiness   这个内核参数控制交换空间的大小。

/proc/sys/vm/swappiness

该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核最大化将数据移出物理内存移到swap缓存中。

您可尝试修改该参数进行核实下。


设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,设置vm.swappiness=100的话,则表示尽量使用swap分区。


在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快

#可以看到内存非常高

[root@VM_0_2_centos ~]# top

top - 21:01:16 up 20 days, 11:09,  1 user,  load average: 2.29, 2.55, 2.69

Tasks: 159 total,   1 running, 158 sleeping,   0 stopped,   0 zombie

%Cpu(s): 63.1 us,  1.1 sy,  0.0 ni, 35.2 id,  0.1 wa,  0.0 hi,  0.6 si,  0.0 st

KiB Mem :  8009440 total,   149276 free,  4821064 used,  3039100 buff/cache

KiB Swap:        0 total,        0 free,        0 used.  2816192 avail Mem

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          

13415 root      20   0 2432940 263452    752 S 199.7  3.3   8504:44 kswapd0                                          

4953 root      20   0 6328844  26612   1720 S  50.0  0.3  70:08.88 tsm    

查看参数值:

cat /proc/sys/vm/swappiness

临时调整

sysctl vm.swappiness=0 
cat /proc/sys/vm/swappiness

永久调整

vim /etc/sysctl.conf 
#最后一行加上
vm.swappiness=0
#然后加载参数
sysctl -p

 

最后:

[root@VM_0_2_centos ~]# kill -9 13415

[root@VM_0_2_centos ~]#

相关文章
|
6天前
|
缓存 移动开发 关系型数据库
Linux 内存 占用较高问题排查
Linux 内存 占用较高问题排查
46 2
|
6天前
|
监控 NoSQL Linux
深入Linux内存泄漏排查:Valgrind与系统工具的联合应用
深入Linux内存泄漏排查:Valgrind与系统工具的联合应用
118 0
|
6天前
|
存储 Java 测试技术
记一次堆内外内存问题的排查和优化
记一次堆内外内存问题的排查和优化
146 0
|
9月前
|
运维 监控 Java
内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)
全网最全的内存溢出CPU占用过高排查文章,包含:问题出现现象+临时解决方案+复现问题+定位问题发生原因+优化代码+优化后进行压测,上线+复盘
1446 5
|
6天前
|
缓存 算法 安全
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(二)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
23 0
|
6天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
92 0
|
6天前
|
Java Linux Arthas
linux上如何排查JVM内存过高?
linux上如何排查JVM内存过高?
792 0
|
6天前
|
存储 监控 Java
三万字长文:JVM内存问题排查Cookbook
本文主要系统性地整理了排查思路,为大家遇到问题时提供全面的排查流程,不至于漏掉某些可能性误入歧途浪费时间。
113 1
|
6天前
|
SQL 运维 NoSQL
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
45 0
|
6天前
|
监控 网络协议 NoSQL
java线上排查OOM内存溢出
java线上排查OOM内存溢出
61 1