我的ecs服务器为1g内存的配置,在部署了nginx,mysql,redis,node服务后跑起项目来,(mysql使用默认配置),每过几天便发现了经常会出现数据库自动停止挂掉,然后几分钟后重启的现象,与此同时ecs无法登陆,当然,网站也是无法访问了。

后来联系了ecs的工单支持,他们查看了系统日志后说是内存不足,给出了增加虚拟内存的方案。

这里是 free -m 的查看信息

free -m
            total        used        free      shared  buff/cache   available
Mem:            992         504          76           0         411         322
Swap:          3023         133        2890

这里是我尝试的增加虚拟内存,可以很明显的看到swap由0变成 3023,但实际应用中发现效果并不显著。
如果想要删除虚拟内存,则使用这里

后来通过观察内存的变化,发现以下:

            total        used        free      shared  buff/cache   available
Mem:            992         504          76           0         411         322
Swap:          3023         133        2890

            total        used        free      shared  buff/cache   available
Mem:            992         533         303           0         155         300
Swap:          3023         133        2890

比较发现,是由于buff/cache的占比过高,导致内存Mem的free较低,使用以下方法手动清除buff/cache

    echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
    echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
    echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。

手动清除buff/cache的方法取自这里

明朝败家子

版权声明:本文为zhaowinter原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhaowinter/p/10477500.html