精选文章 关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM

关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM

作者:djph26741 时间: 2021-02-07 01:37:43
djph26741 2021-02-07 01:37:43
【摘要】SWAP的罪与罚 
 
  发表于2012-11-08
  
  说个案例:一台Apache服务器,由于其MaxClients参数设置过大,并且恰好又碰到访问量激增,结果内存被耗光,从而引发SWAP,进而负载攀升,最终导致宕机。   正所谓:SWAP,性能之大事,死生之地,存亡之道,不可不察也。 哪些工具可以监测SWAP 最容易想到的就是free命令了,它指明了当前SWAP的使用情况: sh...

SWAP的罪与罚

发表于2012-11-08

说个案例:一台Apache服务器,由于其MaxClients参数设置过大,并且恰好又碰到访问量激增,结果内存被耗光,从而引发SWAP,进而负载攀升,最终导致宕机。

 

正所谓:SWAP,性能之大事,死生之地,存亡之道,不可不察也。

哪些工具可以监测SWAP

最容易想到的就是free命令了,它指明了当前SWAP的使用情况:

shell> free -m total used free
Swap: 34175 11374 22801

另一个常用的是sar命令,它能列出系统在各个时间的SWAP使用情况:

shell> sar -r
kbswpfree kbswpused  %swpused  kbswpcad
 23345644  11650572 33.29   4656908
 23346452  11649764 33.29   4656216
 23346556  11649660 33.29   4650308
 23346932  11649284 33.29   4649888
 23346992  11649224 33.29   4648848

不过free命令和sar命令显示的都不是实时数据,如果需要,可以使用vmstat命令:

shell> vmstat 1
-----------memory------------- ---swap--
  swpd   free   buff   cache si   so
11647532 123664 305064 7193168 0 0
11647532 123672 305064 7193172 0 0
11647532 125728 305064 7193468 0 0
11647532 125376 305064 7193476 0 0
11647532 124508 305068 7193624 0 0

每秒刷新一次结果,在SWAP一栏里列出了相关数据,至于si和so的解释,大致如下:

  • si: Amount of memory swapped in from disk (/s).
  • so: Amount of memory swapped to disk (/s).

如果它们一直是零当然最好不过了,偶尔不为零也没啥,糟糕的是一直不为零。

前面介绍的方法,看到的都是SWAP的整体情况,可是如果我想查看到底是哪些进程使用了SWAP,应该如何操作呢?这个问题有点棘手,我们来研究一下:

好消息是top命令能提供这个信息,不过缺省并没有显示,我们需要激活一下:

  1. 打开top;
  2. 按「f」进入选择字段的界面;
  3. 按「p」选择「SWAP」字段;
  4. 按回车确认。

坏消息是top命令提供的SWAP信息只是一个理论值,或者更直白一点儿来说它根本就是不可信的(在top里SWAP的计算公式是:SWAP=VIRT-RES)。

BTW:相比之下,top里的「nFLT」字段更有价值,它表示PageFault的次数。

那到底我们能不能获取到进程的SWAP情况呢?别着急,看代码:

#!/bin/bash

cd /proc

for pid in [0-9]*; do command=$(cat /proc/$pid/cmdline) swap=$( awk ' BEGIN  { total = 0 } /Swap/ { total += $2 } END { print total } ' /proc/$pid/smaps ) if (( $swap > 0 )); then if [[ "${head}" != "yes" ]]; then echo -e "PID\tSWAP\tCOMMAND" head="yes" fi echo -e "${pid}\t${swap}\t${command}" fi
done

说明:请使用root权限来运行此脚本。

哪些因素可能影响SWAP

内存不足无疑会SWAP,但有些时候,即便看上去内存很充裕,还可能会SWAP,这种现象被称为SWAP Insanity,罪魁祸首主要有以下几点:

Swappiness的迷失

实际上,当可用内存不足时,系统有两个选择:一个是通过SWAP来释放内存,另一个是删除Cache中的Page来释放内存。一个很常见的例子是:当拷贝大文件的时候,时常会发生SWAP现象。这是因为拷贝文件的时候,系统会把文件内容在Cache中按Page来缓存,此时一旦可用内存不足,系统便会倾向于通过SWAP来释放内存。

内核中的swappiness参数可以用来控制这种行为,缺省情况下,swappiness的值是60:

shell> sysctl -a | grep swappiness
vm.swappiness = 60

它的含义是:如果系统需要内存,有百分之六十的概率执行SWAP。知道了这一点,我们很自然的会想到用下面的方法来降低执行SWAP的概率:

shell> echo "vm.swappiness = 1" >> /etc/sysctl.conf
shell> sysctl -p

这样做的确可以降低执行SWAP的概率,但并不意味着永远不会执行SWAP。据网友报道某些情况下,直接改为0有可能出现灵异问题,所以建议改为1。

 

补:Memcached在启动的时候如果带上了k选项,就能避免使用SWAP,但要慎用。

早些年,YouTube曾经被SWAP问题困扰过,他们当时的解决方法很极端:删除SWAP!不得不说这真是艺高人胆大,可惜对芸芸众生的我们而言,这实在是太危险了,因为如此一来,一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM结果可能会让问题变得更加复杂,所以大家还是安分守己做个老实人吧。

 

摘自:https://huoding.com/2012/11/08/198

转载于:https://www.cnblogs.com/bonelee/p/7880575.html

勿删,copyright占位
您找到想要的结果了吗?
关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:引用类型的一些方法

下一篇:基因大数据分析的云计算实践

您可能感兴趣

  • VMware 虚拟机安装 CentOS 7.2 系统

    目录 Linux 系统概述 CentOS 系统下载 VMware 创建新的虚拟机 CentOS 安装注意事项 复制虚拟机、克隆虚拟机 Linux 系统概述 1、当前主流的Linux操作系统有:Red Hat、SUSE 、Fedora、Ubuntu、Debian、CentOS。  2、CentOS:有志于成为Linux技术人才,则Ce...

  • TOMCAT内存溢出之解决方法

    当用户执行一个大数据的应用时(净字节码量约为5M)时,系统会提示出错: 前台错误为:HTTP Status 500-Dispatch[EAITool] to method listCurTree retrun an exception (以下省略) ……………………………………………………… ……………………………………………………… 问题分析...

  • Linux系统巡检常用命令

    原文链接 摘要: uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # 查看计算机名 lspci -tv # 列出所有PCI设备 lsusb -tv # 列出所有USB设备 ...

  • Java虚拟机JVM - 关于内存的设置与调优

    来自: http://fengyouhua.iteye.com/blog/58170   JVM内存的设置的原理    默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。 设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存...

  • 优雅地关闭java console界面

    对于发布后的jar或class,我们经常会写一些bat脚本来方便地使之运行,比如: java -jar XXX.jar一旦双击这个bat脚本,会启动一个黑色的console界面,如果不需要这个,可以修改为: @echo offstart javaw -jar xxx.jar 某些时候,我们是需要这个console界面的,因为日志(system.ou...

  • 考试系统总结

    从6月24日开始一门门的考试接踵而来,到7月2日结束。就是在这短短的几天之中让我对这个系统以至于对问题的认识更加深刻,坚定信心。 首先说是考试前的准备工作。考试之前一定要把所有要考的学生授课,数据库中题是否全(数据库遍历),模板是否可用(抽题测试)等这些工作准备好。然后就是桌面快捷方式,人员的分配等准备工作。提前的准备工作对我们任务的顺利进...

  • Android系统联系人全特效实现(上),分组导航和挤压动画

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9033553 记得在我刚接触Android的时候对系统联系人中的特效很感兴趣,它会根据手机中联系人姓氏的首字母进行分组,并在界面的最顶端始终显示一个当前的分组。如下图所示: 最让我感兴趣的是,当后一个分组和前一个分组相碰时,会...

  • 系统小编分享下Win7系统如何安装打印机

    打印机作为目前企业办公必用设备,很多上班族都会接触点,对于不少小白朋友来说,可能觉得打印机安装很复杂,其实不然。打印机安装其实和安装其他一些电脑外设一样,只要熟悉都可以轻松入手,菜鸟朋友只要了解步骤,也就轻松学会了。接下来系统吧小编就来与大家分享下Win7如何安装打印机,对于其他的XP或者Win8系统均类似,有兴趣的朋友不妨一起来学习下。 打印...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM介绍:华为云为您免费提供关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM的相关内容。| 移动地址: 关闭swap的危害——一旦内存耗尽,由于没有SWAP的缓冲,系统会立即开始OOM | 写博客