Swap使用过高处理

近期,巡检平台主机发现,生产有一台主机Swap使用很高,一看内存使用率高,基本耗尽。

于是查了下资料:

Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

这样,系统总是在物理内存不够时,才进行Swap交换

Swap分区在什么时候会使用,是受参数swappiness来控制的。这个参数值可为 0-100,控制系统 swap 的使用程度。高数值可优先系统性能,在进程不活跃时主动将其转换出物理内存。低数值可优先互动性并尽量避免将进程转换处物理内存,并降低反应延迟。默认值为 60。这只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法。

通常,Swap使用过高的处理方法主要有:

1.扩物理内存;

2.调整swappiness参数;

3.扩Swap。查看发现,我们的swappiness设置的是10,也就是说当物理内存大约剩余10%时,就会使用Swap分区,所以说没有什么调整空间了,当然调成0也可以。图片这里我们采用的是扩物理内存的方法。于是我们联系主机机侧扩容,扩容后物理内存可用20多G,但是Swap不会释放。图片这时候,就想知道是哪些程序使用了Swap,于是通过脚本查询出使用Swap的top10进程。

for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10

图片发现是43286这个进程占用了427M Swap,决定对该进程进行重启。Ps -ef|grep 43286,查看是nexus程序:图片于是重启:图片图片重启后,Swap释放了427M。图片于是将其他进程重启后,Swap完全释放。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部