三、解決辦法
四、總結
原本一直執行比較穩定的阿里雲伺服器,突然有一天記憶體告警,大概使用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...