centos6 系統slab記憶體一直線性增長

2021-10-07 22:18:40 字數 1618 閱讀 6538

三、解決辦法

四、總結

原本一直執行比較穩定的阿里雲伺服器,突然有一天記憶體告警,大概使用95%左右。因當時事情比較多,清理系統記憶體快取後,此事就擱置了。但前幾天又收到記憶體告警簡訊,抽了點時間處理相關問題。以下將記錄問題從定位到解決的整個過程。

使用top後按記憶體排序,發現各程序使用率不高。最高的0.5%,平均0.2%左右。

從上圖可以看出,程序使用的記憶體不到10%.

a). 執行cat /proc/meminfo命令檢視記憶體使用分布情況。

從上圖我們可以看出系統總記憶體16g,而slab占用大概16g的記憶體。其中slab記憶體大部分可以**釋放,不可釋放的只有48m。

b). 執行slabtop檢視slab分布。

從上圖可以看出dentry幾乎佔了14g的空間。

c).檢視slab dentry狀態。

執行cat /proc/sys/fs/dentry-state命令

第一項: 系統當前申請的dentry數目

第二項: 系統當前未使用的dentry數目

第三項 :當記憶體不足時,系統延遲**的時間(秒)

可以看出,有大量未使用的dentry,猜測可能有比較頻繁的檔案相關操作。

d).strace追蹤

帶著上面的疑問,加上記憶體監控資訊,逐個分析記憶體增長前最近有調整過的業務程序。經過逐一分析,逐個指令碼定位追蹤,發現可能與curl https有關。

與一台正常呼叫的伺服器執行curl https命令對比,結果如下:

strace -f -e trace=open,unlink,close curl ""
正常伺服器呼叫日誌:

異常伺服器呼叫日誌:

從上面兩張圖,我們可以看出第二台伺服器的curl https時,系統會建立臨時檔案,而且這些檔案又很快的被刪除。我們都知道,linux為了提高io讀寫效能,會將檔案的inode等資訊快取在記憶體。雖然系統刪除檔案,但這些檔案的inode dentry快取資訊還保留在記憶體,從而造成記憶體使用越來越多。

sync

echo 2 > /proc/sys/vm/drop_caches

yum upgrade nss

yum upgrade curl

curl -v
筆者公升級到nss3.44版本後發現問題仍未解決。

從排查->定位->解決問題,整個過程雖然花了蠻長時間,但總體來說,收穫還是挺大的。在以後遇到類似系統方面的"疑難雜症"時,解決思路有一定的借鑑之處。

系統 安裝centos6

centos6 位址 由於版本較老,yum 無法使用。更新yum 源 更新阿里源 mv centos base.repo centos base.repo.backupwgetmv etc yum.repos.d centos 7.repo etc yum.repos.d centos base.r...

1 2 系統平台 CentOS 6

系統安裝 對於作業系統,只要是linux的發行版就可以,關鍵還是自己用著要順手,舒服。如果你想問我為什麼要選擇centos作為作業系統而不選擇ubuntu這種更新的作業系統?其實,它們沒有什麼更高明之處,主要是工作習慣使用centos了。雖然大部分軟體不是最新的,但是對於企業來說,穩定更重要。而且,...

centos6系統簡單命令

1.pwd 顯示當前路徑 2.echo 回顯 3.root使用者提示符 普通使用者提示符 4.netstat ntlp 檢視連線狀況 5.vi etc ssh sshd config sshd協議配置檔案 6.etc init.d sshd restart 配置後重啟sshd服務 7.service...