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

334 天前
 slove
主机是 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 一知半解,希望有高手帮忙解答下
2358 次点击
所在节点    服务器
21 条回复
mingl0280
334 天前
加内存
urnoob
334 天前
十有八九是 node 那边漏了,加多大都没有 。
slove
334 天前
@urnoob 应该是的,一直在增加,可有好的解决办法,停用 node 吗
Kinnice
334 天前
@slove 定时重启 node
slove
334 天前
@Kinnice 这个方法可行,谢谢

@mingl0280 谢谢
@urnoob 谢谢
makelove
334 天前
我的 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
334 天前
另外我的 node 程序发现内存会慢慢涨上去,可能一个月后就超过新启动时不少,不知道是 node 本身问题还是我用的第三方库问题,我的办法是在程序里定时监控 process.memoryUsage(),如果一直超过 10 次就自杀,利用 systemd 本身的机制立刻自启。
kaneg
334 天前
1G 的机器跑这么多应用,内存满了很正常。如果不想增加物理内存,又对程序速度不敏感,那就增加 swap ,增加几倍,是成本最低的一种方法。
slove
334 天前
@makelove 我的问题和你差不多,刚刚准备增加 swap 分区,用 swapoff -a 关闭,机器登陆不了,只能重启了,等运行一段时间,再查看是哪个程序占用在增加
slove
334 天前
@kaneg 就像 2 楼说的,如果有个程序占用一直增加,加多大都没用啊,现在接受 4 楼建议,过一段时间,设置个定时重启
infun
334 天前
crontab -e # 注意选 VIM
0 4 * * * /usr/sbin/reboot

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX