記一次Linux係統內存占用較高得排查
背景:收到報警,係統的內存使用率觸發閾值(部分圖是後補的)
1,登陸係統,使用命令查看內存分配
top 按M
free -m
atop
看下內存分配(cat /proc/meminfo 也可以看到一些細化的內存使用信息)
2,發現cache才1.7g,slab非常高,4.4g ,slab內存簡單理解為是係統占用的
使用slabtop繼續分析
3,看到proc_inode_cache使用的最多,這個代表是proc文件係統的inode的占用的。
4,查進程,但是進程不多,再查線程,可以通過如下命令進行檢查。
ps -eLf
得到如下的結果:(沒有原圖了,這裏補得圖,用雲盾做介紹)
計算socket
ll /proc/22360/task/*/fd/ |grep socket |wc -l
ll /proc/22360/task/*/fd/ |wc -l
計算一下有多少fd
5,每個socket的inode也不一樣
當時看到的現場有幾萬個fd,基本全是socket,每個inode都是占用空間的,且proc文件係統是全內存的。 所以我們才會看到slab中proc_inode_cache內存占用高
後續:
優化相關的server端~
最後更新:2017-08-13 22:31:41