我的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
的方法取自這裏