最近筆者所在學校出現上網時斷時續,故障時間不定的情況,即設備內網用戶出現不定時斷網情況,斷網一段時間后恢復。
我校采購的是一臺銳捷RG-EG1000m的出口設備,主要采用了路由模式,使用了內容和流量審計功能,對學生訪問網站做了些限制,還使用了流控功能,對網速進行了合理分配。
筆者對接入交換機和匯聚交換機進行連接性檢查,未發現問題。繼續檢查網關設備,Web界 面 查看后發現設備提示內存不足(如圖 1)。
設備開機時內存使用率在60%左右,但當天下午18點后,查看內存使用率,達到98%以上。設備出現內存持續升高無法下降,最終導致轉發中斷。重啟后可恢復,一段時間后會再次出現故障(如圖2 )。
采用telnet方式,進入管理模式,使用show memory命令,查看設備內存達到98%(如圖3)。設備性能有回收機制,一旦出現內存占滿,會回收一部分內存,回收時,設備配置的上網用戶將會被重置。硬盤驅動寫不下去,流量審計不斷的產生數據往數據庫寫,然后數據庫就不斷的膨脹,之后導致的內存占滿。內存回調就會讓內部網絡暫時無法通過,內部用戶無法上網。

圖1 設備提示內存不足

圖2 出現不定時斷網現象

圖3 設備內存達到98%
經過和廠家溝通,故障根本原因是硬盤出現故障,無法寫。由于打開了流量審計功能,該功需要會按周、月匯總呈現流量數據,所以需要將數據記錄在硬盤內,才能整理出周報和月報。
當硬盤出現故障,無法寫的時候,該功能錯誤地將數據寫到內存,從而導致內存會持續消耗且無法釋放,最終導致內存完全消耗,轉發中斷。
在EG系統中,硬盤文件系統采用日志模式,文件系統所有數據和元數據的改變都被記入日志。這種模式減少了丟失每個文件的機會,但需要很多額外的磁盤訪問。例如,當一個新文件被創建時,它的所有數據塊都必須復制一份作為日志記錄。這是最安全但最慢的日志模式。
當設備由于配置變動或者其他原因導致一些模塊頻繁修改硬盤文件(例如打開文件并寫入業務數據)過程中,如果使用TRUNC參數打開,則會保持被截斷的文件的內容日志,這會帶來對應的緩存上升。當修改文件的模塊比較多(我們的系統中使用TRUNC參數的模塊比較多,這也是大家習慣的一種操作方式),或者修改比較頻繁的時候,文件系統緩存就會逐漸上升。
Linux系統回收內存的水線設置在min_free_kbytes中,當剩余內存小于這個文件中的數值時,kswapd線程開始自動釋放內存。這個水線值正常情況下設置比較高(值比較小),為的是有足夠的緩存,不去釋放掉可以維持IO性能,因此在設備界面上看到的內存利用率會很高,實際上大部分是緩存。
以往遇到此類問題重啟就可以解決,但是此次故障重啟不會解決根本的問題,根本的問題是硬盤驅動寫入出現問題。設備運行產生的數據不斷的寫入數據庫,導致內存增高,轉發中斷。
類比PC機的硬盤,內部壞塊和小文件多了會導致硬盤變慢。硬盤變慢到一定的閾值,會出現數據無法寫入,但還有新的數據累計增大,硬盤無法放入,會向內存中存放,不修理的話,斷網的問題無法根治。建議設備常做健康檢查,出現問題可以及時送修。