交換機(jī)CPU占用率是指一段時(shí)間內(nèi)CPU執(zhí)行代碼的非空閑時(shí)間與時(shí)間段總長度的比率,可反映某個(gè)時(shí)間段交換機(jī)CPU資源使用情況,其計(jì)算機(jī)公式為:CPU占用率=(總時(shí)間-空閑時(shí)間)/總時(shí)間??臻e時(shí)間是指CPU運(yùn)行Idle任務(wù)的時(shí)間,Idle任務(wù)是一個(gè)低優(yōu)先級任務(wù),不完成具體工作,如果Idle任務(wù)得到了調(diào)度,就認(rèn)為CPU當(dāng)前處于空閑狀態(tài)。系統(tǒng)的CPU占用率不是保持不變的,它是隨著系統(tǒng)的運(yùn)行和外部環(huán)境的變化而持續(xù)變化的。正常狀態(tài)下,交換機(jī)的CPU占用率不會超過5%,交換機(jī)在采用堆疊方式,其CPU占用率不會超過8%,在配置功能較多的情況下,CPU占用率不會超過30%,如果CPU交換機(jī)占用率超過50%則視為不正常。
當(dāng)交換機(jī)CPU處理的數(shù)據(jù)包過多、各類中斷請求過多或部分任務(wù)進(jìn)程占用了較長CPU處理時(shí)間時(shí),CPU負(fù)載就會增加,無法及時(shí)調(diào)度其他任務(wù),從而會導(dǎo)致出現(xiàn)業(yè)務(wù)異常、業(yè)務(wù)處理能力下降和很多網(wǎng)絡(luò)故障等。
一般正常網(wǎng)絡(luò)環(huán)境中,為確保網(wǎng)絡(luò)不間斷工作,會采用備份交換機(jī)的網(wǎng)狀結(jié)構(gòu),各交換機(jī)同時(shí)會啟用STP/SEP/RSTP/MSTP等生成樹功能的協(xié)議,避免網(wǎng)絡(luò)出現(xiàn)環(huán)路。在這些協(xié)議運(yùn)行過程中,交換機(jī)CPU會周期性接收BPDU等報(bào)文來維持交換機(jī)端口Root/Alternate等角色,如果交換機(jī)CPU占用率過高,很可能導(dǎo)致BPDU報(bào)文不能及時(shí)發(fā)送和處理,交換機(jī)會認(rèn)為到根橋的路徑出現(xiàn)故障,從而重新選擇ROOT端口,引起網(wǎng)絡(luò)重新收斂,導(dǎo)致網(wǎng)絡(luò)拓?fù)涓淖?。如果交換機(jī)原來同時(shí)存在Alternate端口,交換機(jī)會將Alternate端口作為新的ROOT端口,進(jìn)行數(shù)據(jù)收發(fā),導(dǎo)致網(wǎng)絡(luò)結(jié)構(gòu)發(fā)生改變,也可能會導(dǎo)致網(wǎng)絡(luò)出現(xiàn)環(huán)路。
為提高交換機(jī)之間流量帶寬,交換機(jī)會啟用LACP(鏈路匯聚控制協(xié)議),交換機(jī)物理端口在啟用LACP協(xié)議后,會由交換機(jī)CPU發(fā)送LACPDU來完成相關(guān)匯聚任務(wù),其后鏈路?;罹蒀PU進(jìn)行LACP協(xié)議的計(jì)算完成。如果CPU占用率過高,就會導(dǎo)致交換機(jī)不能及時(shí)接收和發(fā)送LACPDU報(bào)文,從而引起Eth-Trunk將會鏈路關(guān)閉,造成網(wǎng)絡(luò)中斷。
遠(yuǎn)程管理交換機(jī)已經(jīng)成為管理配置交換機(jī)的首選方式之一,遠(yuǎn)程管理和配置一般都是通過Telnet、SSH、Web和SNMP等協(xié)議方式與交換機(jī)建立會話來進(jìn)行。當(dāng)交換機(jī)CPU占用率過高時(shí),交換機(jī)就無法處理這些會話響應(yīng),從而導(dǎo)致無法遠(yuǎn)程管理交換機(jī),造成管理成本上升。
當(dāng)交換機(jī)CPU占用率過高時(shí),會導(dǎo)致對各類協(xié)議控制、組播等報(bào)文的轉(zhuǎn)發(fā)不及時(shí),交換機(jī)內(nèi)存消耗會增加,從而導(dǎo)致后續(xù)協(xié)議控制、組播等報(bào)文會被丟棄和轉(zhuǎn)發(fā)時(shí)延增大。需要說明的是,普通數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)由交換機(jī)電子集成電路完成,無需CPU參與,因此CPU占用率高通常并不影響普通數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)。
交換機(jī)正常運(yùn)行時(shí),CPU會處理數(shù)以百計(jì)的活動系統(tǒng)進(jìn)程。由于交換機(jī)一直處于運(yùn)行狀態(tài),即使無任何業(yè)務(wù)配置和網(wǎng)絡(luò)數(shù)據(jù)包,其CPU占用率也不會為0。在一些應(yīng)用場景下,交換機(jī)長時(shí)間運(yùn)行時(shí),CPU占用率一般不超過80%,短時(shí)間內(nèi)CPU占用率不超過95%,可認(rèn)為交換機(jī)狀態(tài)是正常的。
在交換機(jī)應(yīng)用了MSTP協(xié)議后,CPU占用率會同實(shí)例個(gè)數(shù)和活動端口數(shù)成正比,數(shù)量越多,用于計(jì)算和維護(hù)的CPU資源就會增多,在應(yīng)用了VBST協(xié)議后,由于每個(gè)VLAN獨(dú)立運(yùn)行一個(gè)實(shí)例,因此在相同VLAN和端口數(shù)目下,VBST會比MSTP占用更多的CPU資源。
當(dāng)一臺三層交換機(jī)接收到路由更新消息時(shí),交換機(jī)會占用CPU資源將路由信息更新。CPU占用率取決于路由更新信息的多少、更新頻率、接受路由更新進(jìn)程數(shù)量、堆疊交換機(jī)數(shù)量等,路由更新信息越多、更新頻率越快、路由更新進(jìn)程數(shù)越多、參與堆疊的交換機(jī)數(shù)量越多,CPU占用率就越高,對于堆疊交換機(jī),路由信息還需要同步到其他成員交換機(jī)。
部分配置命令需CPU長時(shí)間參與也會導(dǎo)致CPU占用率暫時(shí)升高,這些命令主要有:用戶視圖下執(zhí)行copy flash:/命令、配置內(nèi)容很多的情況下執(zhí)行Save命令和Display running-configuration命令、執(zhí)行用于輸出各類調(diào)試信息的Debug命令、執(zhí)行持續(xù)時(shí)間長且數(shù)據(jù)包多的Ping命令、交換機(jī)端口啟用了執(zhí)行Portsecurity mac-address sticky相關(guān)命令時(shí)、還有利用交換機(jī)抓包的命令等。
在交換機(jī)堆疊環(huán)境中,由于主要業(yè)務(wù)運(yùn)行在堆疊主交換機(jī)上,還需要周期性維護(hù)堆疊成員狀態(tài),因此主堆疊主交換機(jī)的CPU占用率比單臺交換機(jī)運(yùn)行時(shí)的CPU占用率高,堆疊成員交換機(jī)數(shù)量增多時(shí),堆疊主交換機(jī)的CPU占用率也會相應(yīng)升高。
有較多管理用戶同時(shí)遠(yuǎn)程管理交換機(jī)時(shí)、交換機(jī)啟動后有較多客戶機(jī)生成MAC地址表時(shí)、交換機(jī)啟用DHCP功能有大量DHCP請求時(shí)、增加數(shù)量較多的VLAN并將各端口加入VLAN中時(shí)、交換機(jī)端口頻繁Up/Down時(shí)、網(wǎng)絡(luò)流量增加時(shí)等。
除正常應(yīng)用場景外,只要是交換機(jī)CPU占用率高,都可視為故障,應(yīng)及時(shí)排除。
網(wǎng)絡(luò)環(huán)路是造成交換機(jī)CPU占用率高的最常見最主要的原因。當(dāng)出現(xiàn)網(wǎng)絡(luò)環(huán)路時(shí),交換機(jī)會發(fā)生MAC地址漂移,產(chǎn)生的廣播風(fēng)暴產(chǎn)生大量無效報(bào)文,會消耗交換機(jī)CPU資源。
網(wǎng)絡(luò)震蕩也是導(dǎo)致交換機(jī)CPU占用率的另一大重要原因,在出現(xiàn)網(wǎng)絡(luò)震蕩時(shí),網(wǎng)絡(luò)參數(shù)會頻繁發(fā)生改變,交換機(jī)忙于網(wǎng)絡(luò)切換事件,CPU就會增加工作量。
當(dāng)網(wǎng)絡(luò)中存在ARP病毒,交換機(jī)遭到DHCP攻擊、BPDU攻擊、SSH暴力破解等惡意攻擊時(shí),交換機(jī)CPU將不得不處理這些報(bào)文,導(dǎo)致CPU長時(shí)間處理這些攻擊報(bào)文,造成交換機(jī)CPU占用率高,性能下降,從而引發(fā)其他業(yè)務(wù)的中斷,影響正常的業(yè)務(wù)。
圖1 確定故障流程
圖2 交換機(jī)當(dāng)前占用率最高的3個(gè)任務(wù)
當(dāng)交換機(jī)部件出現(xiàn)故障后,部件會發(fā)送大量SRMI、SRMR等中斷報(bào)文,其他正常部件也會發(fā)送大量的?;铑悎?bào)文給交換機(jī)CPU來連通交換機(jī)故障部件,而這些報(bào)文都會極大地消耗交換機(jī)CPU資源,造成交換機(jī)CPU占用率高。
這里以VLAN配置為例進(jìn)行說明,實(shí)際需要的VLAN不多,但卻建立了很多無效VLAN,而每建立一個(gè)VLAN時(shí),即使沒有客戶機(jī),交換機(jī)都會發(fā)送一條ACL,來捕獲該VLAN中的ARP報(bào)文,如果VLAN過多,就會導(dǎo)致交換機(jī)CPU占用率高,還有在GVRP環(huán)境下頻繁創(chuàng)建和刪除VLAN,每發(fā)送一條命令,就會觸發(fā)大量報(bào)文通信,也會造成交換機(jī)CPU占用率升高。
表1 可引起交換機(jī)CPU占用率增高的常見任務(wù)
當(dāng)發(fā)現(xiàn)CPU占用率過高時(shí),首先要確定CPU占用率高是否是正?,F(xiàn)象,除了正常應(yīng)用場景外,都可以視為是故障引起,再進(jìn)行故障排除。正常的處理步驟為“確定故障現(xiàn)象、判定故障原因、進(jìn)行故障修復(fù)”(因本文中涉及部分交換機(jī)操作命令,本文中所有命令以華為交換機(jī)操作命令和功能為例,其他品牌交換機(jī)均有類似命令和功能)。
可以通過幾種方式來確認(rèn)是什么任務(wù)、是什么報(bào)文和是交換機(jī)上哪個(gè)硬件模塊引起的CPU占用率高,通過交換機(jī)當(dāng)前任務(wù)、報(bào)文類型和模塊接口可以直接找到在什么接口什么原因造成的故障,確定故障流程如圖1。
圖3 子模塊占用交換機(jī)CPU的比例統(tǒng)計(jì)信息
圖4 各類協(xié)議Drop數(shù)量
(1)獲取CPU占用任務(wù)情況,確認(rèn)高比例任務(wù)。在用戶模式下,執(zhí)行display cpuusage命令,可以查看各在線任務(wù)的CPU占用率,可以記錄占用率最高的前3個(gè)任務(wù)名稱(如圖2),其占用率排名前3的任務(wù)分別是FTS、VIDL和bcmRX。表1為可引起交換機(jī)CPU占用率高的常見任務(wù)名稱和功能描述。
(2)獲取CPU占用率高的模塊信息,確認(rèn)高比例模塊接口。在用戶模式下,執(zhí)行display cpu-usage [slave|slot slot-id]命令,slot-id在堆疊系統(tǒng)中表示堆疊ID,可以查看相關(guān)模塊占用交換機(jī)CPU的比例統(tǒng)計(jì)信息(如圖3),為交換機(jī)slot 0模塊的硬件CPU占用率。
(3)獲取CPU占用率高報(bào)文統(tǒng)計(jì)信息,確認(rèn)高比例報(bào)文類型。在用戶模式下,執(zhí)行display cpu-defend statistics all命令,查看上送CPU報(bào)文的統(tǒng)計(jì)查詢信息,獲取報(bào)文類型,特別要關(guān)注丟棄計(jì)數(shù)(如圖4),通過各類協(xié)議的Drop計(jì)數(shù)來確認(rèn)是否存在沖擊情況,如果某類協(xié)議存在的Drop數(shù)很大,則可以認(rèn)為該協(xié)議存在沖擊CPU情況。
依據(jù)收集到的各類信息,判斷故障產(chǎn)生的原因。
(1)系統(tǒng)類原因。系統(tǒng)主要是對交換機(jī)中各部件進(jìn)行管理,同時(shí)給其他業(yè)務(wù)和模塊提供系統(tǒng)基礎(chǔ)支持。系統(tǒng)類問題主要是操作系統(tǒng)本身故障和模塊故障觸發(fā),操作系統(tǒng)故障一般是硬件故障或操作系統(tǒng)故障,模塊類故障一般是模塊硬件故障和配置原因,通常表現(xiàn)為 SRMI、SRMR、BCMDPC等中斷處理相關(guān)的任務(wù)占用率較高,因此,如果出現(xiàn)系統(tǒng)CPU占用率較高且以上相關(guān)任務(wù)占用率排名靠前的情況,則可以判定為系統(tǒng)類故障原因。
(2)STP震蕩原因。使用display cpu-defend statistics all可以得到各報(bào)文的統(tǒng)計(jì)值,各類報(bào)文統(tǒng)計(jì)是交接機(jī)啟動后各類報(bào)文收發(fā)的總和,所以在交換機(jī)CPU占用率高的情況下,需隔一段時(shí)間運(yùn)行一下這個(gè)命令,這樣才能確保單位時(shí)間采集到的各類報(bào)文統(tǒng)計(jì)比較精確。可以通過display stp topology-change命令查看STP拓?fù)渥兓畔砼卸ㄊ欠袷荢TP震蕩原因,可以通過執(zhí)行display stp tc-bpdu statistics命令查看端口上接收到的TC-BPDU統(tǒng)計(jì),以確定TC報(bào)文的來源物理接口。
(3)路由協(xié)議原因。這里以O(shè)SPF協(xié)議為例,可以通過日志查看OSPF鄰居狀態(tài)Down的原因。執(zhí)行display logbuffer命令,查看日志信息(如圖5):其中NeighborDownImmediate reason關(guān)鍵字記錄的是OSPF鄰居Down的原因,具體原因見表2。
圖5 交換機(jī)日志信息
圖6 MAC地址漂移告警信息
(4)環(huán)路類原因。當(dāng)交換機(jī)未啟用生成樹協(xié)議就有可能會形成環(huán)路,報(bào)文會在多個(gè)接口間轉(zhuǎn)發(fā),導(dǎo)致CPU占用率上升。使用display currentconfiguration,查看是否使能了MAC地址漂移告警功能,如果使能了該功能且存在MAC地址漂移現(xiàn)象,就會出現(xiàn)告警信息,如果未使能該功能,可在用戶模式下執(zhí)行l(wèi)oopdetect eth-loop alarm-only命令,當(dāng)有MAC地址漂移時(shí),就會有告警信息。圖6所示,是交換機(jī)中有環(huán)路,其中MAC地址為0000-0ca8-0101的地址發(fā)生了漂移,漂移分別發(fā)生在GigabitEthernet1/0/3和GigabitEthernet1/0/2端口。
表2 OSPF鄰居Down的原因
此外,如果交換機(jī)無法遠(yuǎn)程登錄、在交換機(jī)上占用display interface命令查看接口統(tǒng)計(jì)信息時(shí)發(fā)現(xiàn)接口收到大量廣播報(bào)文、占用串口登錄交換機(jī)進(jìn)行操作時(shí),操作比較慢、通過Ping命令進(jìn)行網(wǎng)絡(luò)測試時(shí),丟包嚴(yán)重、交換機(jī)上發(fā)生環(huán)路的VLAN的接口指示燈頻繁閃爍、PC機(jī)上能收到大量的廣播報(bào)文、交換機(jī)部署環(huán)路檢測后,交換機(jī)出現(xiàn)環(huán)路告警都可以視為環(huán)路類原因。
(5)網(wǎng)絡(luò)攻擊類原因。常見的引起CPU占用率高的網(wǎng)絡(luò)攻擊包括ARP攻擊、ARPMiss攻擊、DHCP攻擊以及TC BPDU攻擊等,這些攻擊行為的共同特點(diǎn)是攻擊源產(chǎn)生大量的協(xié)議報(bào)文對交換機(jī)CPU進(jìn)行沖擊,因此可以在交換機(jī)上看到大量的報(bào)文上送統(tǒng)計(jì)。判斷ARP攻擊和ARPMiss攻擊,可以通過執(zhí)行display arp packet statistics命令獲取ARP報(bào)文統(tǒng)計(jì)信息,重點(diǎn)關(guān)注ARP Pkt Received和ARP-Miss Msg Received統(tǒng)計(jì)信息,根據(jù)其統(tǒng)計(jì)值的增長情況判斷網(wǎng)絡(luò)攻擊類型。執(zhí)行debugging arp packet命令打開ARP報(bào)文調(diào)試開關(guān),查看大量上送的ARP或ARP-Miss攻擊源信息。判斷DHCP攻擊,可以通過執(zhí)行display dhcp statistics命令獲取DHCP報(bào)文統(tǒng)計(jì)信息,如果報(bào)文上送速度較快,說明存在DHCP攻擊。
(6)配置錯(cuò)誤類原因。由于網(wǎng)管同步操作或者用戶命令大量輸出信息到終端導(dǎo)致的,該類情況的發(fā)生一般伴隨著特定的網(wǎng)絡(luò)管理事件,配置錯(cuò)誤會瞬間提高CPU占用率或造成交換機(jī)CPU短時(shí)間占用率升高,如果暫停配置或取消配置命令發(fā)現(xiàn)CPU占用率降低則視可配置錯(cuò)誤原因。通過在用戶模式下運(yùn)行display cpuusage命令可以采集CPU占用率高時(shí)各任務(wù)的CPU占用率,當(dāng)發(fā)現(xiàn)AGNT或AGT6任務(wù)CPU占用率過高時(shí),就可以確定CPU占用率高是網(wǎng)管同步等網(wǎng)管操作引起的,當(dāng)出現(xiàn)VT任務(wù)CPU占用率高時(shí),可以確定是用戶命令大量輸出信息到終端引起的。
針對故障原因不同需采用不同的故障修復(fù)方法。
(1)硬件故障原因。判斷故障根源可能為硬件故障時(shí),請先嘗試手工復(fù)位CPU占用率較高的交換機(jī),去除交換機(jī)配置,如果復(fù)位后問題依然存在,可聯(lián)系廠商進(jìn)行處理。
(2)STP震蕩原因。如果是用戶接口Up/Down引起的STP拓?fù)渥兓?,則在接口視圖下通過執(zhí)行stp edgedport enable命令,將接入側(cè)端口配置為邊緣端口,并執(zhí)行stp bpdu-protection命令開啟BPDU保護(hù)功能。如果是發(fā)現(xiàn)根橋不斷改變造成震蕩時(shí),則需要每臺交換機(jī)執(zhí)行stp root-protection命令開啟根保護(hù)功能。
(3)路由協(xié)議震蕩原因。以O(shè)SPF路由協(xié)議為例,OSPF鄰居失連的主要原因有接口鏈路震蕩、大量LSA泛洪報(bào)文等。當(dāng)發(fā)生接口鏈路震蕩時(shí),接口鏈路震蕩會導(dǎo)致OSPF鄰居關(guān)系震蕩,可以通過日志信息查看接口Up/Down的記錄情況,請對接口鏈路進(jìn)行檢查。如果有大量LSA泛洪報(bào)文時(shí),會導(dǎo)致網(wǎng)絡(luò)中產(chǎn)生大量的LS UPDATE消息,此時(shí)交換機(jī)忙于處理LS UPDATE,可能會導(dǎo)致Hello報(bào)文得不到及時(shí)處理,引起鄰居狀態(tài)Down,如果OSPF鄰居超時(shí)時(shí)間配置小于20s,建議接口視圖下通過ospf timer dead interval命令將OSPF鄰居超時(shí)時(shí)間配置為20s以上。建議OSPF視圖下通過sham-hello enable命令使能ospf sham-hello功能,允許交換機(jī)通過LSU等非hello報(bào)文維持鄰居關(guān)系。
(4)網(wǎng)絡(luò)環(huán)路故障??梢酝ㄟ^執(zhí)行display cpu-usage[slave|slot slot-id]命令來確保是哪個(gè)子模塊造成交換機(jī)CPU占用率高,發(fā)現(xiàn)后可以利用接口指示燈的閃爍情況和通過執(zhí)行display interface來確認(rèn)各接口流量情況,如果仍方便排除時(shí),可在用戶模式下執(zhí)行l(wèi)oop-detect eth-loop alarm-only命令,查看發(fā)生MAC地址漂移的接口,也就是產(chǎn)生環(huán)路的接口,還可以采用1/2法通過拔網(wǎng)線的方式來確定發(fā)生環(huán)路的接口,排除環(huán)路故障或啟動STP/RSTP/MSTP等生成樹協(xié)議。
(5)網(wǎng)絡(luò)攻擊故障。如果是 ARP攻 擊、ARP-Miss攻擊和DHCP攻擊,可以通過開啟自動攻擊溯源功能的方式及時(shí)檢測攻擊行為,如果網(wǎng)絡(luò)中發(fā)生了攻擊,則在被攻擊的端口通過stp tc-protection命令開啟保護(hù)功能,減少攻擊對交換機(jī)的影響,可以在找到攻擊源后,隔離接口或?qū)粼催M(jìn)行故障排除。
(6)配置故障。用戶操作引起的CPU占用率高一般不會持續(xù)很長時(shí)間,并且通常情況下不會影響業(yè)務(wù),如果造成業(yè)務(wù)故障且造成交換機(jī)CPU占用率高,則為配置故障,請清除該配置。