V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csfreshman
V2EX  ›  CentOS

centos swap 内存不被使用问题

  •  
  •   csfreshman · 110 天前 · 548 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己有台淘汰的笔记本,内存较小,安装了 centos 系统,在安装 grpc 的时候报错 oom,使用命令:

    watch -n 2 free -m
    

    查看发现内存耗尽了,于是参考文档配置了 swap 内存,未编译时状态:

    [root ~]#free -m
                  total        used        free      shared  buff/cache   available
    Mem:           3685         426        2922           9         335        3022
    Swap:         11967           0       11967
    

    编译 grpc 后的状态

    Every 2.0s: free -m                                                                                                                                                    Fri Jul  9 12:40:49 2021
    
                  total        used        free	 shared  buff/cache   available
    Mem:           3685        3361          98           9         225          87
    Swap:         11967           0       11967
    

    从上面的图可以看到,内存基本上使用完了,但死活不使用 swap 里的内存,最后程序卡死,编译 grpc 一直卡在 50%,我把 vm.swappiness 值设置为 10 20 …… 100 最后结果一样。

    grpc 最终卡在:

    [ 49%] Building CXX object third_party/protobuf/CMakeFiles/libprotoc.dir/__/src/google/protobuf/compiler/plugin.cc.o
    [ 49%] Building CXX object third_party/protobuf/CMakeFiles/libprotoc.dir/__/src/google/protobuf/compiler/plugin.pb.cc.o
    [ 49%] Building CXX object third_party/protobuf/CMakeFiles/libprotoc.dir/__/src/google/protobuf/compiler/python/python_generator.cc.o
    [ 50%] Built target bssl
    ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^Cmake[2]: *** [third_party/protobuf/CMakeFiles/libprotoc.dir/__/src/google/protobuf/compiler/code_generator.cc.o] 中断
    make[2]: *** [third_party/abseil-cpp/absl/flags/CMakeFiles/absl_flags.dir/flag.cc.o] 中断
    make[2]: *** [third_party/abseil-cpp/absl/status/CMakeFiles/absl_statusor.dir/statusor.cc.o] 中断
    make[1]: *** [third_party/protobuf/CMakeFiles/libprotoc.dir/all] 中断
    make: *** [all] 中断
    
    ^C
    

    ctrl + c 后 swap 里反而有了使用内存:

    Every 2.0s: free -m                                                                                                                                                    Fri Jul  9 12:44:15 2021
    
                  total        used        free	 shared  buff/cache   available
    Mem:           3685         166        3450           1          68        3358
    Swap:         11967         262       11705
    

    gcc 和系统版本:

    [root ~]#gcc --version
    gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
    [root ~]#uname -a
    Linux MiWiFi-RA50-srv 3.10.0-1160.31.1.el7.x86_64 #1 SMP Thu Jun 10 13:32:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    

    跪求各位大佬帮忙分析下,如何才能让 swap 生效,从而可以完成编译 grpc,可以从哪些方面去分析呢?

    13 条回复    2021-07-11 11:09:59 +08:00
    yujiang
        1
    yujiang   110 天前 via Android
    reboot 了没?
    billlee
        2
    billlee   110 天前
    建议贴一下 /proc/meminfo
    vk42
        3
    vk42   110 天前
    建议直接加内存,大量换页的情况下能卡得让你怀疑人生,而且还没法操作去 kill 进程……
    所以现在很多情况基本不配 swap,或者 swap 配合 OOM killer 一起上,至少不会系统卡死半天
    csfreshman
        4
    csfreshman   109 天前
    @yujiang reboot 了,swap 开机自动挂上,还是不行。
    csfreshman
        5
    csfreshman   109 天前
    ```
    [root ~]#cat /proc/meminfo
    MemTotal: 3773708 kB
    MemFree: 2986772 kB
    MemAvailable: 3085032 kB
    Buffers: 2360 kB
    Cached: 298604 kB
    SwapCached: 0 kB
    Active: 369276 kB
    Inactive: 212888 kB
    Active(anon): 281780 kB
    Inactive(anon): 8968 kB
    Active(file): 87496 kB
    Inactive(file): 203920 kB
    Unevictable: 0 kB
    Mlocked: 0 kB
    SwapTotal: 12255224 kB
    SwapFree: 12255224 kB
    Dirty: 0 kB
    Writeback: 0 kB
    AnonPages: 281228 kB
    Mapped: 47088 kB
    Shmem: 9548 kB
    Slab: 81752 kB
    SReclaimable: 38480 kB
    SUnreclaim: 43272 kB
    KernelStack: 3904 kB
    PageTables: 12344 kB
    NFS_Unstable: 0 kB
    Bounce: 0 kB
    WritebackTmp: 0 kB
    CommitLimit: 14142076 kB
    Committed_AS: 1444544 kB
    VmallocTotal: 34359738367 kB
    VmallocUsed: 545636 kB
    VmallocChunk: 34358423548 kB
    Percpu: 2592 kB
    HardwareCorrupted: 0 kB
    AnonHugePages: 180224 kB
    CmaTotal: 0 kB
    CmaFree: 0 kB
    HugePages_Total: 0
    HugePages_Free: 0
    HugePages_Rsvd: 0
    HugePages_Surp: 0
    Hugepagesize: 2048 kB
    DirectMap4k: 103168 kB
    DirectMap2M: 3985408 kB
    ```
    swap 看 total 和 free 一样 12255224kB
    csfreshman
        6
    csfreshman   109 天前
    @vk42 笔记本,加物理内存比较麻烦,而且这个机器想着尽可能利用起来旧机器。
    vk42
        7
    vk42   109 天前
    @csfreshman 实在不想加内存可以试试下面的方法:
    - /proc/sys/vm/overcommit_memory,这个应该是要设置成 1 才能正常超额分配虚拟内存
    - /proc/sys/vm/oom_kill_allocating_task,这个设置应该是 0
    另外如果编译卡住可能就是 swap 拖后腿了,可以用 atop 看看资源占用
    love
        8
    love   109 天前
    linux 内核原生支持 swap 内存压缩,可以加上试试可以省点 ssd 写入量
    csfreshman
        9
    csfreshman   109 天前
    @vk42 swap 拖后腿慢我可以理解,毕竟磁盘性能和内存不在一个数量级,但是 swap 的占用一直不变 0,这两个值都改了重启(改了永久生效,编译前确保值是对的)(没重启试了 sysctl -p)都不行。
    csfreshman
        10
    csfreshman   109 天前
    @love 现在问题是 swap 没用,一点写入量都没有,😁
    billlee
        11
    billlee   109 天前
    @csfreshman 你这个 meminfo 是空载时的状况吧。。
    csfreshman
        12
    csfreshman   109 天前
    @billlee 恩,卡死的那个状态看到,完全没响应了,除非 ctrl c 掉那个 grpc 的编译
    csfreshman
        13
    csfreshman   108 天前
    加了 8g 的 swap,今天出门前编译 grpc,过一个小时回来看到 swap 有在使用,还在编译,好慢,想旧物利用这么难
    ```
    Every 5.0s: free -m Sat Jul 10 23:07:21 2021

    total used free shared buff/cache available
    Mem: 3830 3597 112 8 121 43
    Swap: 11967 4624 7343
    ```
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1062 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:30 · PVG 05:30 · LAX 14:30 · JFK 17:30
    ♥ Do have faith in what you're doing.