4

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

 1 year ago
source link: https://www.v2ex.com/t/945397
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  服务器

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

  slove · 10 小时 56 分钟前 · 1111 次点击
主机是 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

mingl0280      10 小时 49 分钟前 via Android

urnoob

urnoob      10 小时 46 分钟前 via Android

十有八九是 node 那边漏了,加多大都没有 。
slove

slove      10 小时 31 分钟前

@urnoob 应该是的,一直在增加,可有好的解决办法,停用 node 吗
Kinnice

Kinnice      10 小时 16 分钟前 via Android

@slove 定时重启 node
makelove

makelove      10 小时 6 分钟前

我的 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

makelove      10 小时 3 分钟前

另外我的 node 程序发现内存会慢慢涨上去,可能一个月后就超过新启动时不少,不知道是 node 本身问题还是我用的第三方库问题,我的办法是在程序里定时监控 process.memoryUsage(),如果一直超过 10 次就自杀,利用 systemd 本身的机制立刻自启。
kaneg

kaneg      9 小时 58 分钟前 via iPhone

1G 的机器跑这么多应用,内存满了很正常。如果不想增加物理内存,又对程序速度不敏感,那就增加 swap ,增加几倍,是成本最低的一种方法。
slove

slove      9 小时 50 分钟前

@makelove 我的问题和你差不多,刚刚准备增加 swap 分区,用 swapoff -a 关闭,机器登陆不了,只能重启了,等运行一段时间,再查看是哪个程序占用在增加
slove

slove      9 小时 47 分钟前

@kaneg 就像 2 楼说的,如果有个程序占用一直增加,加多大都没用啊,现在接受 4 楼建议,过一段时间,设置个定时重启
infun

infun      9 小时 9 分钟前

crontab -e # 注意选 VIM
0 4 * * * /usr/sbin/reboot

我自己的机器都这样搞
season8

season8      8 小时 33 分钟前

@slove #3 pm2 update 可以重启所有 node 进程,泄露的进程也会被清理掉
slove

slove      8 小时 12 分钟前

@season8 这个好,刚刚还在搜索怎么查询哪个 node 进程占用 swap ,这就来了,非常感谢
@infun 你这个是重启机器吧,机器每次重启,都需要十几分钟,不太想用重启机器这个方法,还是感谢你的热心回复。
webshe11

webshe11      7 小时 52 分钟前

再搞个 zram 作为 swap
northbrunv

northbrunv      4 小时 45 分钟前

最简单的办法,加内存。swap 是用硬盘当内存,性能很差的。
northbrunv

northbrunv      4 小时 43 分钟前

内存是内存。硬盘是硬盘。swap 只是内存价格昂贵时代遗留下的产物。
现在内存价格便宜的爆炸,80 块就能买到 8g 的 ddr4 内存。
同时 vps 厂商的大内存机器价格也很便宜了。
blankmiss

blankmiss      4 小时 41 分钟前

这种问题还要问什么 不管是 swap 还是 zram 难道你虚拟内存 比直接内存好用吗 直接升配置不比这些操作来的简单,来的性能好,当然如果是因为穷 那当我没说
systemcall

systemcall      3 小时 30 分钟前 via Android

可以试试用 zram ,策略激进点,你这个场景应该可以节省不少内存。牺牲性能、吃 CPU ,但是比 swap 到磁盘快
swap 好像也可以先压缩后再放硬盘上,没试过。主机是什么配置? CPU 和硬盘是什么呢?
很多办法都可以限制单个进程最大的 CPU 使用。还有就是你觉得卡死了,可能只是因为一直在反复地把页面从内存和 swap 之间搬来搬去,你可以试试写个程序来监控和达到一个阈值来重启对应的服务,不要等满了再重启就好
systemcall

systemcall      3 小时 27 分钟前 via Android

@northbrunv #16
当你要卖整机,并且出货量上去了,就不会这么想了
能用 256M D3 跑起来的东西,为什么要用 2G D4 呢?
northbrunv

northbrunv      2 小时 23 分钟前

@systemcall 一个月多花 5 块钱能解决的东西,为什么要浪费时间调来调去?
dianso

dianso      6 分钟前

我的 2C2G 换了 2C4G 现在 2C8G

每次升级多几块钱而已

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK