swap初探

来源:互联网 发布:程序员都用什么浏览器 编辑:程序博客网 时间:2024/06/15 05:13

swap初探

线上机器不停发邮件报警,swap使用超过阀值。实在受不了邮件,决定干点运维的活。看看情况。

查swap整体使用情况

  • free -m

    最先最直接就是这条命令了,结果类似下图

                   total       used       free Swap:         34175       11374      22801
  • sar -r(不同版本sar参数不同,sar -h看看就好),如下图

    Linux 2.6.18-308.el5 (a05.api.box.ott.b28.youku)        04/07/1600:00:01   kbmemfree   kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad00:10:01     11397792  21517364     65.37    305740  14510832   4192956         0      0.00         000:20:01     11364748  21550408     65.47    307644  14539508   4192956         0      0.00         000:30:01     11341260  21573896     65.54    308772  14566856   4192956         0      0.00         000:40:01     11314416  21600740     65.63    309704  14593728   4192956         0      0.00         000:50:01     11286120  21629036     65.71    310612  14619356   4192956         0      0.00         001:00:01     11262720  21652436     65.78    311348  14642836   4192956         0      0.00         0...Average:     10691597  22223559     67.52    331646  15190674   4192956         0      0.00         0

    sar和free都不是实时数据。如果要看实时数据vmstat

  • vmstat -2(2秒刷新一次)。结果如图

    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r   b   swpd   free   buff  cache      si   so    bi    bo    in     cs us sy id wa st5   0      0 9797884 356252 16031016    0    0     0     8     0      0 10  4 87  0  00   0      0 9797988 356300 16031348    0    0     0   185  11497 30788  9  2 89  0  017  0      0 9797240 356304 16031532    0    0     0     0  11430 30918  8  2 90  0  0

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

    so: Amount of memory swapped to disk (/s).

    si和so越小越好咯,只要不是一直不为0,都没事

按进程查看swap使用

  • top(top命令提供的SWAP信息只是一个理论值,计算公式是:SWAP=VIRT-RES,不可信)

    top --> 按「f」进入字段选择 --> 按「p」选择「SWAP」字段,再按「u」选择Page Fault字段 --> 回车确认 -->结果如下 --> 「Shifl」+「+」+「>」按某个字段排序,默认按cpu使用率

    top - 10:45:37 up 29 days, 17:06,  1 user,  load average: 0.02, 0.22, 0.31Tasks: 616 total,   5 running, 611 sleeping,   0 stopped,   0 zombieCpu(s):  8.9%us,  2.2%sy,  0.0%ni, 88.3%id,  0.0%wa,  0.0%hi,  0.6%si,  0.0%stMem:  32986852k total, 32795452k used,   191400k free,   146108k buffersSwap:  4194300k total,     1296k used,  4193004k free, 26758872k cachedPID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP  nFLT COMMAND 31022 root      19   0 6994m 234m  11m S  0.3  0.7 657:47.61 6.6g  100  java                                                                         9344  nobody    20   0  259m  21m 1152 S  0.0  0.1   3:04.89   88    0  nginx                                                                            9345  nobody    20   0  259m  21m 1152 S  0.0  0.1   2:54.11   88    0  nginx                                                                            9346  nobody    20   0  259m  21m 1152 S  0.0  0.1   3:11.32   88    0  nginx                                                                            9347  nobody    20   0  259m  21m 1152 S  0.0  0.1   2:59.73   88    0  nginx                                                                            9348  nobody    20   0  259m  21m 1152 S  0.0  0.1   3:03.24   88    0  nginx                                                                            9349  nobody    20   0  259m  21m 1152 S  0.0  0.1   3:01.04   88    0  nginx                                                                            9350  nobody    20   0  259m  21m 1152 S  6.9  0.1   3:00.65   88    0  nginx                                                                            9351  nobody    20   0  259m  21m 1152 S  0.0  0.1   3:09.42   88    0  nginx                                                                            9352  nobody    20   0  240m 1548  572 S  0.0  0.0   0:00.20   88    0  nginx                                                                            15510  root     20   0  240m 2428 1520 S  0.0  0.0   0:00.09   88    3   nginx                                                                            2133  root      20   0  243m 2372  912 S  0.0  0.0   0:00.90    4   53  rsyslogd                                                                         1     root      20   0 19232 1112  820 S  0.0  0.0   0:02.22    0    9 init    

    可以看到最高的是个java进程,使用了6.6g,但是我们swap实际只有4g,可以印证数值不准。但是每个进程的使用分布是准的,就是说java > nginx > rsyslogd这个关系是准的。你可以理解为,top把每个进程使用的swap同等放大或缩小,但是不改变大小关系。

Swappiness

    从sar结果可以看出物理内存平均使用才67%,但是swap已经被用到了。实际上,当可用内存不足时,系统有两个选择:一个是通过SWAP来释放内存,另一个是删除Cache中的Page来释放内存。一个很常见的例子是:当拷贝大文件的时候,时常会发生SWAP现象。这是因为拷贝文件的时候,系统会把文件内容在Cache中按Page来缓存,此时一旦可用内存不足,系统便会倾向于通过SWAP来释放内存。    内核中的swappiness参数可以用来控制这种行为,缺省情况下,swappiness的值是60:    sysctl -a | grep swappiness    vm.swappiness = 60    意思是:如果系统需要内存,有百分之六十的概率执行SWAP    考虑到机器内存仍有剩余,修改此参数,降低使用swap概率,尽可能使用物理内存,但并不意味着永远不会执行SWAP。网上传言设置为0,会有灵异问题出现,公司线上机器不敢拿来做实验,就设置1好了
    shell> echo "vm.swappiness = 1" >> /etc/sysctl.conf    shell> sysctl -p
    这个不要随便设置,请确定物理内存确实是有剩余,设置0了可能内存耗尽,没有swap缓冲,系统会立即开始OOM,问题可能会更惨烈。

修改后过了一天再看sar,Average 内存使用飙到99.37%,但是swap确实没有超过阀值报警。


0 0