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

2023-06-03 08:06:51 +08:00
 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 一知半解,希望有高手帮忙解答下
2654 次点击
所在节点    服务器
21 条回复
mingl0280
2023-06-03 08:13:31 +08:00
加内存
urnoob
2023-06-03 08:16:34 +08:00
十有八九是 node 那边漏了,加多大都没有 。
slove
2023-06-03 08:31:31 +08:00
@urnoob 应该是的,一直在增加,可有好的解决办法,停用 node 吗
Kinnice
2023-06-03 08:47:15 +08:00
@slove 定时重启 node
slove
2023-06-03 08:56:10 +08:00
@Kinnice 这个方法可行,谢谢

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

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

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

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

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

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

© 2021 V2EX