主机 swap 满了,有好的优化方法吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
slove
V2EX    服务器

主机 swap 满了,有好的优化方法吗

  •  
  •   slove 2023-06-03 08:06:51 +08:00 3148 次点击
    这是一个创建于 928 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主机是 1C1G ,安装了包塔英文版和 docker ,运行一段时间,发现 swap 满了,只能用重启办法,不然,运行的网站无法访问,发现占用 swap 最多的 10 个程序:
    mysqld 209.465M
    node 152.484M
    ruby2.7 150.934M
    node 123.125M
    ruby2.7 59.0898M
    node 32.7227M
    node 32.6484M
    BT-Panel 31.8359M
    nginx 25.8672M
    nginx 24.4453M
    是不是只能增加 swap 空间,有其他解决办法吗,或者达到一定数值,自动重启占用 swap 的程序,对 linux 一知半解,希望有高手帮忙解答下
    21 条回复    2023-06-03 18:56:28 +08:00
    mingl0280
        1
    mingl0280  
       2023-06-03 08:13:31 +08:00 via Android
    加内存
    urnoob
        2
    urnoob  
       2023-06-03 08:16:34 +08:00 via Android
    十有八九是 node 那边漏了,加多大都没有 。
    slove
        3
    slove  
    OP
       2023-06-03 08:31:31 +08:00
    @urnoob 应该是的,一直在增加,可有好的解决办法,停用 node 吗
    Kinnice
        4
    Kinnice  
       2023-06-03 08:47:15 +08:00 via Android
    @slove 定时重启 node
    slove
        5
    slove  
    OP
       2023-06-03 08:56:10 +08:00
    @Kinnice 这个方法可行,谢谢

    @mingl0280 谢谢
    @urnoob 谢谢
    makelove
        6
    makelove  
       2023-06-03 08:57:12 +08:00
    我的 node 配置
    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so /usr/bin/node --max_old_space_size=512 -max_semi_space_size=4 main.js
    makelove
        7
    makelove  
       2023-06-03 08:59:53 +08:00
    另外我的 node 程序发现内存会慢慢涨上去,可能一个月后就超过新启动时不少,不知道是 node 本身问题还是我用的第三方库问题,我的办法是在程序里定时监控 process.memoryUsage(),如果一直超过 10 次就自杀,利用 systemd 本身的机制立刻自启。
    kaneg
        8
    kaneg  
       2023-06-03 09:04:21 +08:00 via iPhone
    1G 的机器跑这么多应用,内存满了很正常。如果不想增加物理内存,又对程序速度不敏感,那就增加 swap ,增加几倍,是成本最低的一种方法。
    slove
        9
    slove  
    OP
       2023-06-03 09:12:28 +08:00
    @makelove 我的问题和你差不多,刚刚准备增加 swap 分区,用 swapoff -a 关闭,机器登陆不了,只能重启了,等运行一段时间,再查看是哪个程序占用在增加
    slove
        10
    slove  
    OP
       2023-06-03 09:15:42 +08:00
    @kaneg 就像 2 楼说的,如果有个程序占用一直增加,加多大都没用啊,现在接受 4 楼建议,过一段时间,设置个定时重启
    GlobalNPC
        11
    GlobalNPC  
       2023-06-03 09:54:03 +08:00
    crontab -e # 注意选 VIM
    0 4 * * * /usr/sbin/reboot

    我自己的机器都这样搞
    season8
        12
    season8  
       2023-06-03 10:30:15 +08:00
    @slove #3 pm2 update 可以重启所有 node 进程,泄露的进程也会被清理掉
    slove
        13
    slove  
    OP
       2023-06-03 10:50:57 +08:00
    @season8 这个好,刚刚还在搜索怎么查询哪个 node 进程占用 swap ,这就来了,非常感谢
    @infun 你这个是重启机器吧,机器每次重启,都需要十几分钟,不太想用重启机器这个方法,还是感谢你的热心回复。
    webshe11
        14
    webshe11  
       2023-06-03 11:10:49 +08:00
    再搞个 zram 作为 swap
    Brunuh2Ville2
        15
    Brunuh2Ville2  
       2023-06-03 14:17:22 +08:00
    最简单的办法,加内存。swap 是用硬盘当内存,性能很差的。
    Brunuh2Ville2
        16
    Brunuh2Ville2  
       2023-06-03 14:19:51 +08:00
    内存是内存。硬盘是硬盘。swap 只是内存价格昂贵时代遗留下的产物。
    现在内存价格便宜的爆炸,80 块就能买到 8g 的 ddr4 内存。
    同时 vps 厂商的大内存机器价格也很便宜了。
    blankmiss
        17
    blankmiss  
       2023-06-03 14:21:37 +08:00
    这种问题还要问什么 不管是 swap 还是 zram 难道你虚拟内存 比直接内存好用吗 直接升配置不比这些操作来的简单,来的性能好,当然如果是因为穷 那当我没说
    systemcall
        18
    systemcall  
       2023-06-03 15:32:28 +08:00 via Android
    可以试试用 zram ,策略激进点,你这个场景应该可以节省不少内存。牺牲性能、吃 CPU ,但是比 swap 到磁盘快
    swap 好像也可以先压缩后再放硬盘上,没试过。主机是什么配置? CPU 和硬盘是什么呢?
    很多办法都可以限制单个进程最大的 CPU 使用。还有就是你觉得卡死了,可能只是因为一直在反复地把页面从内存和 swap 之间搬来搬去,你可以试试写个程序来监控和达到一个阈值来重启对应的服务,不要等满了再重启就好
    systemcall
        19
    systemcall  
       2023-06-03 15:35:53 +08:00 via Android
    @northbrunv #16
    当你要卖整机,并且出货量上去了,就不会这么想了
    能用 256M D3 跑起来的东西,为什么要用 2G D4 呢?
    Brunuh2Ville2
        20
    Brunuh2Ville2  
       2023-06-03 16:39:29 +08:00
    @systemcall 一个月多花 5 块钱能解决的东西,为什么要浪费时间调来调去?
    dianso
        21
    dianso  
       2023-06-03 18:56:28 +08:00
    我的 2C2G 换了 2C4G 现在 2C8G

    每次升级多几块钱而已
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3276 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 04:49 PVG 12:49 LAX 20:49 JFK 23:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86