1. 程式人生 > >記憶體佔用過高,快取不釋放導致宕機處理方案

記憶體佔用過高,快取不釋放導致宕機處理方案

故障現象:

1、某分行部署的某臺伺服器記憶體佔用過高,導致宕機;
2、程式碼層面檢查暫未發現問題,伺服器硬重啟持續一段時間後(3-5天)再次佔滿。

發現問題:

趕往現場後進行檢查,當時是一切正常的,今有DB2程序佔用18%,在正常範圍內;
在crontab 中發現有兩個指令碼每天14點進行FTP批量資料傳輸,找到相應的傳輸檔案存放目錄發現每天傳輸的檔案達到30多個G,由此可判斷這就是故障之根本,FTP傳輸檔案,會快取到記憶體中,伺服器記憶體也只有32G,FTP傳輸導致快取被佔滿,Linux不能自動清理快取導致宕機。
Linux記憶體中快取佔用的空間是可以自動釋放的,現在快取佔用了整個記憶體導致宕機,肯定是沒有自動釋放快取。

解決方法:

設定Linux記憶體引數,始終留出一塊空間,以避免快取不釋放導致宕機。

方案一:
可手動清理頁檔案快取,但是需手動執行;

echo  1  >  /pron/sys/vm/drop_caches

方案二:
我們採用的方法是設定記憶體最低剩餘記憶體,不讓快取佔滿
1.使用root使用者備份/etc/sysctl.conf檔案,準備修改原檔案;
2.修改sysctl.conf配置檔案
2.1 開啟sysctl.conf

vim /etc/sysctl.conf

2.2 在檔案最後加入一行:

vm.min_free_kbytes = 2097152
(命令意義:設定最小剩餘記憶體,單位KB,這裡設定2G)

2.3 儲存退出。
3. 使配置檔案生效

sysctl  -p

由於第一種方法屬於直接清空快取,可能會造成資料丟失,故在此生產環境我們選擇的是方案二。