V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
snopy
V2EX  ›  问与答

关于系统 cpu 占用低而 swap 占用高的困惑

  •  
  •   snopy · 2016-10-10 17:17:35 +08:00 · 2534 次点击
    这是一个创建于 2945 天前的主题,其中的信息可能已经有所发展或是发生改变。
    生产服务器上 cpu 占用和 swap 占用如下所示,比较困惑的是 cpu 完全够用的情况下,为什么 swap 使用率很高?且 swap 总量也是动态变化的,最高时候达到 3G ,停掉服务后 swap 总量少了很多。。求知道的大婶解释下,感谢!

    Cpu(s): 0.1%us, 8.4%sy, 0.0%ni, 91.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 132029524k total, 78292860k used, 53736664k free, 3266504k buffers
    Swap: 43396k total, 43300k used, 96k free, 37391532k cached
    第 1 条附言  ·  2016-10-11 17:18:33 +08:00
    当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 Swap 交换。这个是 SWAP 交换分区的作用。
    系统在什么情况下才会使用 SWAP ?
    实际上,并不是等所有的物理内存都消耗完毕之后,才去使用 swap 的空间,什么时候使用是由 swappiness 参数值控制。
    在 cpu 使用率达到某种界限的时候释放 cached 来减小 cpu 负荷压力(附脚本如下)
    #name:/tmp/check_cache.sh
    #!/bin/bash
    #set -x
    grep droping /tmp/.drop_caches
    if [ $? -ne 0 ]; then
    FREE=`free -g|awk 'NR==2{print $4/$2*100}'|awk -F. '{print $1}'`
    if [ $FREE -le 20 ]; then
    echo "droping" >/tmp/.drop_caches
    sync
    echo 3 > /proc/sys/vm/drop_caches
    >/tmp/.drop_caches
    fi
    fi

    完结。。。
    8 条回复    2016-10-11 12:38:31 +08:00
    rhen
        1
    rhen  
       2016-10-10 18:09:20 +08:00 via Android
    swap 不是内存不足才占用吗
    hellov22ex
        2
    hellov22ex  
       2016-10-10 18:12:16 +08:00 via Android
    swap 和 CPU ?
    swap 和内存有更直接的关系,如一楼所述。
    kn007
        3
    kn007  
       2016-10-10 18:43:51 +08:00
    swap cpu ???
    这两者关系不在这啊。。。
    rrfeng
        4
    rrfeng  
       2016-10-10 18:47:52 +08:00
    如果有 free 的话一般不会使用 swap
    但是不排除有些程序倾向于使用 swap ……
    loading
        5
    loading  
       2016-10-10 19:04:32 +08:00 via Android
    建议列一下进程
    snopy
        6
    snopy  
    OP
       2016-10-11 12:27:05 +08:00
    @rhen 这也是我困惑的,明明 cpu 足够却把 swap 占满了
    snopy
        7
    snopy  
    OP
       2016-10-11 12:30:59 +08:00
    @loading 写了个脚本统计 swap 的占用情况,发现 /opt/beh/core/impala/be/build/latest/service/impalad -state_store_host=hadoop001 -catalog_service_host=hadoop001 这个进程占用了 1.82GB swap 空间,对,是跑 Hadoop 应用的一个 job ,但是不清楚为啥不占 cpu 而占用 swap
    loading
        8
    loading  
       2016-10-11 12:38:31 +08:00 via Android
    楼主始终还是纠结 cpu 和 swap 这个错误的关系。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2486 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 10:29 · PVG 18:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.