이 문서에서는 인터럽트로 인해 CPU 사용률이 높은 이유를 설명하고 문제 해결 팁과 지침을 제공합니다.
이 문서에 대한 특정 요건이 없습니다.
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참조하십시오.
인터럽트 레벨에서 CPU 사용률이 높은 것은 주로 인터럽트 레벨에서 처리된 패킷에 의해 발생합니다. 인터럽트는 콘솔 또는 라우터의 보조 포트에서 문자가 출력될 때마다 생성됩니다.
UART(Universal Asynchronous Receiver/Transmitters)는 라우터의 처리 속도에 비해 느리므로, 콘솔 또는 보조 인터럽트가 라우터에서 CPU 사용률을 크게 일으킬 가능성은 거의 없습니다(라우터에 tty 라인 수가 많이 사용되지 않는 한).
인터럽트로 인해 CPU 사용률이 높은 이유에는 여러 가지가 있습니다.
이 잠재적 문제를 해결하려면 다음을 확인합니다.
라우터에서 Cisco Express Forwarding을 실행 중인지 확인합니다.
show ip cef summary 명령을 실행하여 Cisco Express Forwarding이 활성화되어 있고 작동하는지 확인합니다.
모든 인터페이스에서 Cisco Express Forwarding이 스위칭 경로로 활성화되어 있는지 확인합니다. show cef interface 및 show ip interface 출력에서 이를 볼 수 있습니다. Cisco Express Forwarding이 구성되어 있지만 인터페이스에서 활성화되지 않은 경우, 이는 Cisco Express Forwarding에서 인터페이스 캡슐화가 지원되지 않음을 의미합니다. Cisco Express Forwarding이 작동하는지 확인합니다. 즉, show cef not-cef-switched를 확인하여 Cisco Express Forwarding을 사용하는 라우터를 통해 패킷이 실제로 스위칭되었는지 확인합니다.
show cef drop 명령 및 show interfaces switching 명령(캐시 누락을 찾기 위해 사용할 수 있는 숨겨진 명령)을 사용하여 Cisco Express Forwarding이 패킷을 삭제하지 않는지 확인합니다. 이 경우 CEF 문제 해결 페이지를 참조하십시오.
인터페이스에 긴 액세스 목록이 구성되어 있는지 확인합니다.
일반적으로 10개 이상의 줄이 있는 액세스 목록은 긴 것으로 간주됩니다.
긴 액세스 목록을 반복해서 검토하는 것은 매우 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 스위칭을 비활성화해 보십시오.
정렬 오류는 잘못 정렬된 읽기 및 쓰기로 인해 발생합니다. 예를 들어 메모리 주소가 2바이트의 짝수 배수가 아닌 2바이트 읽기는 정렬 오류입니다.
정렬 오류는 일반적으로 소프트웨어 버그로 인해 발생합니다. CPU는 이 오류를 수정하지만, 수정할 사항이 많은 경우 CPU를 많이 사용합니다. 이 유형의 오류에 대한 트러블슈팅은 Spurious 액세스, 정렬 오류 및 Spurious 인터럽트 트러블슈팅을 참조하십시오.
show interfaces 및 show interfaces switching(숨김) 명령의 출력은 어떤 인터페이스가 오버로드되었는지에 대한 정보를 제공합니다. 나중에 분석할 수 있도록 로그 파일에 이러한 명령의 출력을 캡처하려면 다음 단계를 수행합니다.
terminal length 0 명령을 실행합니다.
show interface의 출력을 확인합니다. 인터페이스의 로드 및 스로틀 수를 검사합니다. 로드는 기본적으로 5분 동안 계산된 평균 값입니다. 이 간격을 변경하려면 load-interval seconds 명령을 실행합니다. 여기서 seconds는 데이터가 로드 통계를 계산하는 데 사용되는 시간을 나타냅니다. 30의 배수인 값을 사용합니다.
스로틀은 오버로드된 라우터를 잘 나타냅니다. 버퍼 또는 프로세서 오버로드로 인해 포트의 수신기가 비활성화된 횟수를 표시합니다. 인터럽트 레벨에서 높은 CPU 사용률과 함께 스로틀은 라우터에 트래픽이 과부하됨을 나타냅니다.
오버로드된 인터페이스를 통과하는 트래픽(프로토콜 및 스위칭 경로)의 종류를 확인하려면 show interfaces switching (hidden) 명령의 출력을 확인합니다. 일부 인터페이스에 트래픽이 너무 과부하 상태인 경우, 네트워크의 트래픽 흐름을 재설계하거나 하드웨어를 업그레이드할 것을 고려하십시오.
네트워크 루프는 트래픽 오버로드의 원인이 될 수도 있습니다. 네트워크 토폴로지를 확인합니다.
단일 디바이스에서 매우 빠른 속도로 패킷을 생성하여 라우터를 오버로드할 가능성이 있는 경우, 오버로드된 인터페이스의 컨피그레이션에 ip accounting mac-address {input|output} interface 컨피그레이션 명령을 추가하여 해당 디바이스의 MAC 주소를 결정할 수 있습니다.
show interfaces [ ] mac-accounting 명령은 수집된 정보를 표시합니다. 소스 디바이스의 MAC 주소가 발견되면 show ip arp 명령의 출력을 확인하여 해당 IP 주소를 찾을 수 있습니다.
라우터에서 실행 중인 Cisco IOS 소프트웨어 버전에서 버그가 의심되는 경우 버그 툴킷(등록된 고객만 해당)에서 유사한 환경에서 유사한 증상을 보고하는 버그를 확인할 수 있습니다.
트래픽이 없더라도 소프트웨어는 CPU 리소스를 사용하는 CAS(channel-associated signaling)를 계속 모니터링합니다.
트래픽이 없는 경우에도 ATM 인터페이스는 ATM 표준에 따라 null 셀을 전송하고 CPU 리소스를 계속 사용합니다.
PXF가 너무 많은 패킷을 RP에 보내면 RP가 오버로드될 수 있습니다. show pxf accounting summary 명령을 실행하여 펀트된 패킷의 양을 수신 패킷의 총 양과 비교할 수 있습니다. 동일한 명령을 사용하여 패킷이 RP로 전달되는 이유를 알아보십시오. 이는 소프트웨어 버그일 수 있으며, PXF에서 트래픽을 지원하지 않습니다.
CPU 프로파일링은 CPU가 시간을 소비하는 위치를 확인하는 낮은 오버헤드 방법입니다. 시스템은 프로세서 위치를 4밀리초마다 샘플링하여 작동합니다. 메모리에서 해당 위치에 대한 카운트가 증가합니다. 이 CPU 사용률의 근본 원인은 CPU 프로파일링에 의해 결정됩니다.
CPU 프로파일링을 수행하려면 다음 단계를 완료하십시오. CPU 사용률은 CPU 사용률이 높을 때 수행됩니다.
참고: 이 모든 명령은 활성화 모드에서 입력해야 합니다
show region의 출력을 캡처하고 시작 주소, 끝 주소 및 main:text 영역의 크기를 가져옵니다.
show memory statistics의 출력을 캡처하고 프로세서 메모리에서 가장 큰 블록의 크기를 확인합니다.
인터럽트에 대해서만 프로파일링을 구성하려면 작업 인터럽트를 프로파일링하십시오.
main:text 영역의 크기를 사용 가능한 프로세서 메모리의 가장 큰 블록의 크기와 비교합니다. 가장 큰 블록은 main:text보다 커야 합니다.
가장 큰 블록이 main:text 크기보다 작은 경우 프로파일링이 프로세서 메모리 블록을 가져올 수 있도록 세분성을 조정하십시오.
가장 큰 블록이 main:text 영역보다 큰 경우 4의 세분성을 사용합니다.
가장 큰 블록이 main:text 영역의 절반보다 큰 경우 세분성 8을 사용합니다.
가장 큰 블록이 main:text 영역의 1/4보다 큰 경우 10(16진수 16)의 세분성을 사용합니다.
참고: 입도는 2의 거듭제곱이어야 하며 가능한 한 작아야 합니다(4보다 작지 않음).
프로필을 수행하여 프로파일링 시작
Profile <starting address> <ending address> <granularity value>
시작 주소와 끝 주소는 1단계에서 결정됩니다.
5분에서 10분 정도 기다립니다.
프로파일 중지를 수행하여 프로파일링 중지
show profile terse의 출력을 캡처합니다.
모두 프로파일 해제를 수행하여 메모리를 확보해야 합니다.
이 명령은 인터페이스에서 액티브 스위칭 경로를 결정하는 데 사용됩니다. 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
출력에 인터페이스에 구성된 모든 프로토콜의 스위칭 경로가 나열되므로 어떤 종류의 트래픽이 라우터를 통과하는지, 어떤 트래픽 양이 얼마나 되는지 쉽게 확인할 수 있습니다. 다음 표에서는 출력 필드에 대해 설명합니다.
필드 | 정의 |
---|---|
Process | 처리된 패킷. 이러한 패킷은 라우터로 향하는 패킷이거나 고속 스위칭 캐시에 항목이 없는 패킷일 수 있습니다. |
누락 캐시 수 | 고속 스위칭 캐시에 항목이 없는 패킷입니다. 이 대상(또는 구성된 고속 스위칭 유형에 따라 흐름)에 대한 첫 번째 패킷이 처리됩니다. 발신 인터페이스에서 고속 스위칭이 명시적으로 비활성화되지 않는 한 모든 후속 패킷은 고속 스위칭됩니다. |
빠름 | 고속 스위치드 패킷. 고속 스위칭은 기본적으로 활성화되어 있습니다. |
오톤/SSE | 자동 스위칭, 실리콘 스위칭 또는 분산 스위칭 패킷. 스위치 프로세서 또는 실리콘 스위치 프로세서가 있는 Cisco 7000 Series 라우터(각각 자동 스위칭 또는 실리콘 스위칭용) 또는 VIP가 있는 Cisco 7500 Series 라우터(분산 스위칭용)에서만 사용할 수 있습니다. |
이 스크립트는 CPU 사용률이 75%를 초과하는 경우 플래시: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 |
최초 릴리스 |