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 ~]#

相关文章
|
5月前
|
Java 数据库连接
Java中的内存泄漏排查与预防方法
Java中的内存泄漏排查与预防方法
|
7月前
|
缓存 移动开发 关系型数据库
Linux 内存 占用较高问题排查
Linux 内存 占用较高问题排查
164 2
|
5月前
|
监控 Java
Java中的内存泄漏分析与排查技巧
Java中的内存泄漏分析与排查技巧
|
5月前
|
存储 监控 算法
LeakCanary 的内存泄露问题排查
LeakCanary 的内存泄露问题排查
77 0
|
3月前
|
监控 Java Linux
redisson内存泄漏问题排查
【9月更文挑战第22天】在排查 Redisson 内存泄漏问题时,首先需确认内存泄漏的存在,使用专业工具(如 JProfiler)分析内存使用情况,检查对象实例数量及引用关系。其次,检查 Redisson 使用方式,确保正确释放资源、避免长时间持有引用、检查订阅和监听器。此外,还需检查应用程序其他部分是否存在内存泄漏源或循环引用等问题,并考虑更新 Redisson 到最新版本以修复潜在问题。
121 5
|
4月前
|
JavaScript Java 开发工具
Electron V8排查问题之接近堆内存限制的处理如何解决
Electron V8排查问题之接近堆内存限制的处理如何解决
289 1
|
7月前
|
缓存 算法 安全
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(二)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
70 0
|
7月前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
158 0
|
5月前
|
监控 安全 Java
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
164 2
|
5月前
|
监控 Java Linux
JVM内存问题之如果堆内存一直缓慢上涨,如何解决
JVM内存问题之如果堆内存一直缓慢上涨,如何解决
683 1