關於路由器丟包的原因有很多種,本篇介紹如何判斷是否是路由器丟包和解決的方法。
一、記憶體碎片是指路由器記憶體被劃分了許多不連續的塊。他將導致記憶體利用率降低,嚴重時可能會產生記憶體錯誤,影響路由器的效能。它也會導致路由器報文丟失的問題,其實不僅路由器的記憶體存在碎片問題,普通的硬碟也存在這種問題。
如微軟操作系統中就自帶一個碎片整理工具,可以保障使用者來整理硬碟中的碎片,以提高硬碟的儲存容量以及儲存效能。這裡指的記憶體碎片其實跟硬碟碎片是類似的。
二、那該如何判斷路由器的記憶體是否存在碎片呢?這裡主要藉助的是靈科路由器自帶的SHOW MEMORY命令。這個命令會顯示當前記憶體的相關資訊。
如執行這條命令後,會顯示當前可用記憶體(Free)與最大可用快(Largest)的數值,網路管理員把這兩個值進行比較,就可以判斷碎片對路由器效能的影響。這主要是把路由器的可用記憶體與最大可用快的大小進行比較。
如果路由器的可用記憶體與最大的可用快大小比較接近時,表示雖然路由器存在碎片但是影響不大。但是若最大可用的塊很小,如只有最大可以用記憶體的幾十分之一,那麼就說明路由器記憶體碎片問題比較嚴重了。
三、如路由器的可用記憶體為20M, 而最大可用塊的大小為15M的話,則表示路由器記憶體中是有一定的碎塊,但是這點碎塊不影響路由器的正常執行。如果可用記憶體為20M,而最大可用塊為0.8M的話,則說明路由器記憶體中存在比較多的碎塊。
連續連續記憶體中沒有足夠大的可用快,這有可能導致嚴重的記憶體分配問題,如導致一個或者多個介面間歇性的丟失報文。
在路由器記憶體中,允許存在一定的記憶體碎片。到現在為止,還沒有哪一種記憶體管理技術說可以完全避免產生記憶體碎片。只是這個碎片要保證一個合理的值。
四、其實這個可用塊與可用記憶體之間的關係我們可以利用櫃子中的抽屜來表示。如一個櫃子可用容量雖然比較大,但是裡面劃分了大小不等的1000多個格子。每個格子的空間容量有限。
當有大的資料需要儲存時,整的容量是夠的,但是小格子的容量不夠。此時,就會發生報文丟失的問題。
此時看起來記憶體足夠用,可是此時記憶體中已經沒有連續的空間用來儲存資料。所以這些看起來比較大的可用記憶體,其實儲存不了多少資料。
五、如果確定路由器記憶體中沒有過多的碎片,則網路管理員就要考慮是否是因為CPU過載所導致報文丟失的。要檢視CPU的使用率,可以利用SHOW PROCESS命令來檢視路由器的CPU使用情況,透過這條命令,可以顯示出路由器CPU最近5秒、最近1分鐘、以及最近5分鐘的CPU使用率。
由於 CPU的使用率一直在變化,故網路管理員主要關係的是5分鐘之內的CPU平均使用率。此時可以說明路由器介面報文丟失很可能是CPU過載所造成的。
六、如果確認路由器CPU過載,那麼網路管員需要確認到底是哪一個程式佔用了大量的記憶體。只有把這個罪魁禍首找出來,網路管理員才能夠對症下藥,解決問題。
如網路管理員經過查詢發現是SRB BACKGROUND程式佔用了大量的CPU,則就說明發生了網橋風暴。故要解決CPU過載問題,要達到這個目的,網路管理員可以透過SHOW PROCESS MEMORY命令查詢路由器的記憶體分配資訊。
透過執行這個命令,系統會反饋當前路由器記憶體的可用量、以使用量等資訊。還會反映每個程式所佔用的記憶體空間。如果某個程式所佔用的記憶體與上面顯示的所佔用的CPU都很大的話,則說明這個程式很有問題。網路管理員要逐一排查這些可以的程式。
七、如有時候網路管理員可以強制把某些耗用CPU資源大的程式關閉掉,然後測試一下報文丟失的情況是否有所改善。如果有明顯改善的話,那麼就找到問題的原因了。
此時網路管理員就可以對症下藥,分析一下到底這個程式多對應的服務是什麼,為什麼會佔用這麼多的CPU資源與記憶體資源。
如果可以的話,可以先把這個服務關閉掉,以減少報文丟失現象,保障其他服務的正常運作。等到查明問題的原因,修復好後再重新啟動。
看完上面的內容後,瞭解了丟包的原因,只要針對性做出措施就可以解決問題,注意在路由器中採用了很多交換技術,他們都依賴於報文。如果報文丟失的話,再怎麼高階的交換技術都將不起作用,如何防止報文丟失就至關重要。