本文檔說明由於中斷而導致高CPU使用率的原因,並提供故障排除提示和指南。
本文件沒有特定需求。
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
中斷級別上的CPU使用率高主要是由中斷級別上處理的資料包造成的。當從路由器的控制檯或輔助埠輸出字元時,就會生成中斷。
通用非同步接收器/發射器(UART)與路由器的處理速度相比速度較慢,因此,控制檯或輔助中斷雖然可能但不會導致路由器上的CPU使用率過高(除非路由器有大量tty線路在使用)。
由於中斷而導致CPU使用率較高的原因有幾個:
若要疑難排解此潛在問題,請確認下列各項:
檢查路由器是否正在運行Cisco Express Forwarding:
驗證ip cef(外部)全局配置命令的配置。
透過發出show ip cef summary命令驗證Cisco Express Forwarding是否已啟用並且在正常運行。
驗證是否已啟用Cisco Express Forwarding作為所有介面上的交換路徑。可以在show cef interface和show ip interface輸出中看到此資訊。如果已配置了Cisco快速轉發,但未在介面上啟用,這意味著Cisco快速轉發不支援介面封裝。驗證Cisco快速轉發是否可操作,也就是使用Cisco快速轉發,透過檢視show cef not-cef-switched來檢查資訊包是否透過路由器。
使用show cef drop命令和show interfaces switching命令(這是一個隱藏命令,可用於查詢快取未命中),驗證Cisco快速轉發沒有丟棄資訊包。如果出現這種情況,請參閱CEF故障排除頁。
驗證是否配置了任何介面的長訪問清單。
一般來說,任何超過十行的存取清單都會被視為較長。
重複檢查長訪問清單會佔用大量的CPU。使用NetFlow交換時,如果流已在快取中,則不再需要檢查訪問清單。因此,在這種情況下,NetFlow交換將十分有用。可透過發出ip route-cache flow命令啟用NetFlow交換。
請注意,如果在介面上同時配置了Cisco Express Forwarding和NetFlow,將使用Cisco Express Forwarding做出交換決策。
驗證路由器上是否配置了NetFlow交換:
透過發出show ip cache flow命令檢查統計資訊。檢視每秒的新流數。
如果未啟用Cisco Express Forwarding,請啟用Cisco Express Forwarding以加快交換決策。
如果沒有長訪問清單,請嘗試停用NetFlow交換。
對齊錯誤是由未對齊的讀取和寫入引起的。例如,記憶體地址不是兩個位元組的偶數倍數的雙位元組讀取是校準錯誤。
校準錯誤通常是由軟體Bug引起的。CPU會更正此錯誤,但是如果需要進行許多更正,則會佔用大量CPU資源。有關此類錯誤的故障排除資訊,請參閱欺騙性訪問、校準錯誤和欺騙性中斷故障排除。
show interfaces 和show interfaces switching (隱藏)命令的輸出內容提供了關於過載介面的資訊。要在日誌檔案中捕獲這些命令的輸出,以便以後進行分析,請執行以下步驟。
發出terminal length 0命令。
檢查show interfaces的輸出。檢查介面上的負載和節流器數量。預設情況下,負載是五分鐘內的平均值。要更改此間隔,請發出load-interval seconds命令,其中seconds代表使用資料來計算負載統計資訊的時間長度。使用30的倍數值。
扼殺是路由器過載的良好指示。它們顯示埠上接收方被停用的次數,這可能是由於緩衝區或處理器過載所致。再加上中斷級別上的CPU使用率較高,節流表明路由器資料流過載。
檢查show interfaces switching (隱藏)命令的輸出,檢視什麼型別的資料流(協定和交換路徑)正在透過過載介面。如果某些介面流量過載,請考慮重新設計網路中的流量或升級硬體。
網路環路也是流量過載的原因。驗證您的網路拓撲。
如果單個裝置有可能以極高的速率生成資料包,進而導致路由器過載,則可以透過在過載介面的配置中增加ip accounting mac-address {input|output} 介面配置命令來確定該裝置的MAC地址。
show interfaces [ ] mac-accounting 命令可顯示收集的資訊。一旦找到源裝置的MAC地址,則可透過檢查show ip arp命令的輸出找到對應的IP地址。
如果您懷疑路由器上執行的Cisco IOS軟體版本中存在Bug,可以檢查Bug工具組(僅供註冊客戶使用)是否有在類似環境中報告類似症狀的錯誤。
即使沒有流量,軟體仍會繼續監控使用CPU資源的通道關聯訊號(CAS)。
即使沒有流量,ATM介面也會傳送空信元(根據ATM標準)並繼續使用CPU資源。
當PXF將太多資料包傳送到RP時,RP可能會過載。透過發出show pxf accounting summary命令,可將傳送的資料包數量與傳入的資料包總量進行比較。使用同一命令找出資料包被傳送到RP的原因。這可能是軟體Bug,或者PXF不支援流量。
CPU分析是一種低開銷的方法,用於確定CPU花費時間的位置。系統每四毫秒取樣一次處理器位置。該位置在記憶體中的計數將遞增。此CPU使用率的根本原因將由「CPU分析」確定。
完成以下步驟以執行CPU分析。CPU使用率已經達到「高CPU使用率」。
注意:在啟用模式下必須鍵入所有這些命令
獲取show region的輸出內容,然後提取關於起始地址、結束地址以及main:text區域大小的內容
獲取show memory statistics的輸出內容,並檢查處理器記憶體中最大塊的大小。
執行profile task interrupt,以便僅針對中斷來配置分析。
將main:text區域的大小與最大可用處理器記憶體塊的大小進行比較。理想情況下,最大塊應大於main:text。
如果最大塊小於main:text大小,請調整粒度,以確保效能分析能夠獲得一個處理器記憶體塊。
如果最大塊大於main:text區域,則使用粒度4。
如果最大塊大於main:text區域的一半,則使用粒度8。
如果最大塊大於main:text區域的四分之一,請使用粒度10(十六進位制格式為16)。
注意:粒度必須是2的冪,並且應儘可能小(但不能小於4)
透過執行profile開始分析
Profile <starting address> <ending address> <granularity value>
開始地址和結束地址由步驟1確定。
等待5到10分鐘
透過執行profile stop停止分析
獲取show profile terse的輸出內容。
透過執行unprofile all確保釋放所有記憶體
此命令用於確定介面上的活動交換路徑。有關Cisco IOS軟體中交換路徑的詳細資訊,請參閱配置交換路徑。
以下是針對一個介面的show interfaces switching命令的示例輸出:
RouterA#show interfaces switching Ethernet0 Throttle count 0 Drops RP 0 SP 0 SPD Flushes Fast 0 SSE 0 SPD Aggress Fast 0 SPD Priority Inputs 0 Drops 0 Protocol Path Pkts In Chars In Pkts Out Chars Out Other Process 0 0 595 35700 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IP Process 4 456 4 456 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IPX Process 0 0 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 Trans. Bridge Process 0 0 0 0 Cache misses 0 Fast 11 660 0 0 Auton/SSE 0 0 0 0 DEC MOP Process 0 0 10 770 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 ARP Process 1 60 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 CDP Process 200 63700 100 31183 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0
輸出列出了介面上配置的所有協定的交換路徑,因此您可以輕鬆檢視流經路由器的流量型別和數量。下表對輸出欄位進行了說明:
欄位 | 定義 |
---|---|
程序 | 已處理的資料包。這些可能是發往路由器的資料包,也可能是快速交換快取中沒有條目的資料包。 |
快取遺漏 | 在快速交換快取中沒有條目的資料包。將處理此目標(或流-取決於配置的快速交換型別)的第一個資料包。除非在傳出介面上明確停用快速交換,否則所有後續資料包都將進行快速交換。 |
快速 | 快速交換資料包。快速交換功能預設為啟用。 |
歐頓/SSE | 自主交換、矽交換或分散式交換資料包。僅適用於Cisco 7000系列路由器,包括交換機處理器或矽交換處理器(分別用於自主交換或矽交換),或適用於Cisco 7500系列路由器(用於分散式交換)。 |
當CPU使用率超過75%時,此指令碼將輸出儲存在flash:CPU_Profile上:
service internal event manager applet High_CPU event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.6 get-type next entry-opge entry-val 75 exit-time 10 poll-interval 5 action 0.1 syslog msg "CPU Utilization is high" action 0.2 cli command "enable" action 0.4 cli command "show log | append flash:CPU_Profile.txt" action 0.5 cli command "show process cpu sorted | append flash:CPU_Profile.txt" action 0.6 cli command "show interfaces | append flash:CPU_Profile.txt" action 1.1 cli command "configure terminal" action 1.2 cli command "profile xxxxxxx yyyyyyyyZ" action 1.3 cli command "profile start" action 2.3 syslog msg "Entering TCLSH" action 2.4 cli command "tclsh" action 2.5 cli command "after 240000" action 2.6 cli command "exit" action 2.9 syslog msg "Exiting TCLSH" action 3.0 cli command "profile stop" action 3.1 cli command "show profile terse | append flash:CPU_Profile.txt" action 3.2 cli command "clear profile" action 3.3 cli command "unprofile all" action 4.1 syslog msg "Finished logging information to flash:CPU_Profile.txt..." action 4.2 cli command "end"
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
29-May-2008 |
初始版本 |