Windows 10에서 ntoskrnl.exe(시스템) 프로세스의 높은 CPU 사용률
새로 Windows 10을 설치한 컴퓨터에서 사용자가 운영체제가 끊임없이 멈추고 전반적인 동작 속도가 느리다고 불만을 제기했습니다. 작업 관리자를 확인해 보니 CPU 자원의 약 50%가 시스템(System, ntoskrnl.exe) 프로세스에 의해 사용되고 있었습니다. 이 글에서는 특정 프로세스에 의한 높은 CPU 사용률을 진단하는 주요 방법과 문제가 되는 Windows 구성 요소 또는 시스템 드라이버를 찾아내는 방법을 단계별로 설명합니다.

ntoskrnl.exe란 무엇인가?
시스템 프로세스가 CPU 자원의 절반 이상을 소비하는 상황은 결코 정상이 아닙니다. Ntoskrnl.exe는 운영체제 커널의 실행 파일로, 가장 핵심적인 시스템 프로세스입니다. OS 커널은 각종 장치의 시스템 드라이버를 구동하며, 문제의 원인은 대부분 이 드라이버들에 있습니다. 하드웨어 제조사가 모든 드라이버를 충분히 검증하지 않는 경우가 많기 때문입니다.
일반적으로 드라이버 코드의 리소스 누수와 CPU·메모리·디스크 자원의 과도한 사용 문제는 새로운 하드웨어 설치, 새 드라이버 버전 설치(자동 드라이버 업데이트 포함) 또는 Windows 업데이트 이후에 나타나는 경우가 많습니다.
팁: 경우에 따라서는 Compressed Memory(압축 메모리) 프로세스가 CPU와 메모리에 높은 부하를 일으키는 원인이 되기도 합니다.
Process Explorer로 원인 드라이버 확인하기
어떤 드라이버나 모듈이 높은 CPU 사용률을 유발하는지 파악하려면 Microsoft의 무료 도구인 Process Explorer를 사용하는 것이 가장 간편합니다. 도구를 다운로드한 후 반드시 관리자 권한으로 실행하세요.
실행 중인 프로세스 목록에서 System을 찾아 마우스 오른쪽 버튼으로 클릭한 뒤 속성(Properties)을 엽니다.

Threads(스레드) 탭으로 이동하여 커널에 로드된 모듈 목록을 CPU 사용률(CPU 열) 기준으로 내림차순 정렬합니다. Start Address 열에 높은 부하를 일으키는 구성 요소나 드라이버의 이름이 표시됩니다. 아래 스크린샷은 문제가 있는 시스템의 것이 아니며, 실제 사례에서는 ntoskrnl.exe 프로세스가 원인이었습니다.

kernrate.exe(Kernrate Viewer) 활용하기
높은 CPU 부하를 일으키는 드라이버를 찾는 또 다른 방법은 Microsoft의 무료 도구 kernrate.exe(Kernrate Viewer)를 사용하는 것입니다. 이 도구는 WDK(Windows Driver Kit)에 포함되어 있으며, WDK 설치 후 …\Tools\Other\amd64 폴더에서 찾을 수 있습니다.
매개변수 없이 kernrate.exe를 실행하고 데이터가 충분히 수집될 때까지 기다립니다(약 10~15분). 이후 Ctrl-C를 눌러 도구를 종료하면 결과가 출력되는데, Result for Kernel Mode 섹션의 모듈 목록을 확인하면 됩니다.

위 예제에서는 b57nd60x 모듈이 높은 CPU 사용률을 유발하고 있습니다. Google 검색이나 Sigcheck 도구(모듈과 연관된 드라이버 파일을 식별하는 데 활용 가능)를 사용해 조사해 보면, 문제의 원인이 Broadcom NetXtream Gigabit Ethernet NDIS6.0 드라이버임을 알 수 있습니다.
Windows Performance Toolkit(WPT)으로 부팅 시점 분석하기
시스템 부팅 과정에서의 CPU 사용률을 분석하려면 Windows Performance Toolkit(WPT)을 활용할 수 있습니다. WPT를 설치한 뒤 Windows Performance Recorder 그래픽 콘솔에서 데이터 수집을 시작합니다(First level triangle + CPU usage → Start).

또는 명령 프롬프트에서 다음 명령을 입력하여 데이터 수집을 바로 시작할 수도 있습니다:
xperf -on latency -stackwalk profile -buffersize 1024 -MaxFile 256 -FileMode Circular && timeout -1 && xperf -d cpuusage.etl
팁: 이 방법은 부팅 직후 시스템이 멈춰 정상적인 작업이 거의 불가능한 경우에 특히 유용합니다. 느린 Windows 부팅을 진단하는 방법을 다룬 글도 함께 참고하면 도움이 됩니다.
수집된 파일을 저장한 뒤 Windows Performance Analyzer(WPA)에서 열고 System 프로세스의 호출 스택을 확장합니다. 아래 예제에서는 athrx.sys 드라이버(Atheros 무선 네트워크 어댑터)가 높은 CPU 부하를 일으키고 있음을 확인할 수 있습니다.

이렇게 문제가 되는 드라이버를 성공적으로 찾아냈다면, 이제 해결 단계로 넘어갈 차례입니다.
문제 해결 방법
문제를 해결하는 가장 확실한 방법은 해당 드라이버를 더 최신 버전(또는 안정적인 이전 버전)으로 교체하는 것입니다. 만약 어떤 드라이버 버전을 적용해도 문제가 계속된다면, 해당 하드웨어를 완전히 비활성화하거나 물리적으로 분리하는 것을 고려해야 합니다. 또한 업데이트한 드라이버가 안정적인지 확인하려면 Driver Verifier 도구를 사용해 추가 스트레스 테스트를 진행하는 것이 좋습니다.