Azure Windows 가상 머신에서 높은 CPU 문제 해결

적용 대상: ✔️ Windows VM

요약

성능 문제는 다른 운영 체제 또는 애플리케이션에서 발생하며, 모든 문제에는 문제를 해결하기 위한 고유한 접근 방식이 필요합니다. 이러한 문제의 대부분은 문제가 발생하는 주요 위치로 CPU, 메모리, 네트워킹 및 I/O(입력/출력)를 중심으로 진행됩니다. 이러한 각 영역은 서로 다른 증상(때로는 동시에)을 생성하며 다른 진단 및 솔루션이 필요합니다.

이 문서에서는 Windows 운영 체제를 실행하는 Azure VM(Virtual Machines)에서 발생하는 높은 CPU 사용량 문제에 대해 설명합니다.

Azure Windows VM의 높은 CPU 문제

I/O 및 네트워크 대기 시간 문제 외에도 CPU 및 메모리 문제 해결에는 온-프레미스 서버와 동일한 도구와 단계가 필요합니다. Microsoft에서 일반적으로 지원하는 도구 중 하나는 PerfInsights(Windows 및 Linux 모두에서 사용 가능)입니다. PerfInsights는 사용자에게 친숙한 보고서에서 Azure VM 모범 사례 진단을 제공할 수 있습니다. PerfInsights는 도구 내에서 선택된 플래그에 따라 Perfmon, Xperf 및 Netmon 데이터를 수집하는 데 도움이 되는 래퍼 도구이기도 합니다.

온-프레미스 서버에 사용되는 Perfmon 또는 Procmon과 같은 대부분의 기존 성능 문제 해결 도구는 Azure Windows VM에서 작동합니다. 그러나 PerfInsights는 Azure 모범 사례, SQL 모범 사례, 고해상도 I/O 대기 시간 그래프, CPU 및 메모리 탭 등을 비롯한 더 많은 인사이트를 제공하기 위해 Azure VM을 위해 명시적으로 설계되었습니다.

사용자 모드 또는 커널 모드로 실행되든 활성 프로세스의 스레드에서 빌드된 코드를 실행하려면 CPU 주기가 필요합니다. 많은 문제는 워크로드와 직접 관련이 있습니다. 서버에 존재하는 워크로드 종류는 CPU를 포함하여 리소스 소비를 구동합니다.

일반적인 요소

CPU가 높은 상황에서는 다음과 같은 요인이 일반적입니다.

  • IIS(인터넷 정보 서비스), Microsoft SharePoint, Microsoft SQL Server 또는 타사 애플리케이션과 같은 앱에 주로 적용되는 최근 코드 변경 또는 배포입니다.

  • OS 수준 업데이트 또는 애플리케이션 수준 누적 업데이트 및 수정과 관련될 수 있는 최근 업데이트입니다.

  • 쿼리 변경 또는 오래된 인덱스입니다. 또한 SQL Server 및 Oracle 데이터 계층 애플리케이션에는 쿼리 계획 최적화가 또 다른 요소로 있습니다. 데이터가 변경되거나 적절한 인덱스가 부족하면 여러 쿼리가 계산 집약적이 될 수 있습니다.

  • Azure VM 관련. RDAgent와 같은 특정 프로세스와 높은 CPU 사용량을 유발할 수 있는 모니터링 에이전트, MMA 에이전트 또는 보안 클라이언트와 같은 확장 관련 프로세스가 있습니다. 이러한 프로세스는 구성 또는 알려진 문제 관점에서 확인해야 합니다.

문제 해결

이 문서에서는 문제가 있는 프로세스를 격리하는 데 중점을 둡니다. 추가 분석은 높은 CPU 사용량을 유도하는 프로세스에 따라 다릅니다.

예를 들어 프로세스가 SQL Server(sqlservr.exe)인 경우 다음 단계는 특정 기간에 가장 많은 CPU 주기를 사용하는 쿼리를 분석하는 것입니다.

문제 범위 지정

문제를 해결할 때 다음과 같은 몇 가지 질문을 할 수 있습니다.

  • 이 문제에 대한 패턴이 있나요? 예를 들어 높은 CPU 문제는 매일, 주 또는 월의 특정 시간에 발생하나요? 그렇다면 이 문제를 작업, 보고서 또는 사용자 로그인과 상관 관계를 지정할 수 있나요?

  • 최근 코드 변경 후 높은 CPU 문제가 시작되었나요? Windows 또는 애플리케이션에서 업데이트를 적용했나요?

  • 사용자 수 증가, 더 높은 데이터 유입 또는 더 많은 보고서 수와 같은 워크로드 변경 후 높은 CPU 문제가 시작했나요?

  • Azure의 경우 높은 CPU 문제가 다음 조건 중에서 시작했나요?

    • 최근 재배포 또는 다시 시작 후
    • SKU 또는 VM 유형이 변경된 경우
    • 새 확장이 추가된 경우
    • 부하 분산 장치를 변경한 후

Azure 주의 사항

워크로드를 이해합니다. VM을 선택하면 전체 월별 호스팅 비용을 볼 때 vCPU(가상 CPU) 수를 과소평가할 수 있습니다. 워크로드가 계산 집약적인 경우 하나 또는 두 개의 vCPU가 있는 더 작은 VM SKU를 선택하면 워크로드 문제가 발생할 수 있습니다. 워크로드에 대한 다양한 구성을 테스트하여 필요한 최상의 컴퓨팅 기능을 결정합니다.

B(버스트 모드) 시리즈와 같은 특정 VM 시리즈는 QA(품질 보증) 및 테스트에 권장됩니다. 프로덕션 환경에서 이러한 시리즈를 사용하면 CPU 크레딧이 소진된 후 컴퓨팅 기능이 제한됩니다.

SQL Server, Oracle, RDS(원격 데스크톱 서비스), Azure Virtual Desktop, IIS 또는 SharePoint와 같은 알려진 애플리케이션의 경우 이러한 워크로드에 대한 최소 구성에 대한 권장 사항을 포함하는 Azure 모범 사례 문서가 있습니다.

지속적인 높은 CPU 문제

지금 문제가 발생하는 경우 프로세스 추적을 캡처하여 문제의 원인을 확인할 수 있는 가장 좋은 기회입니다. 온-프레미스 Windows 서버에 사용했던 기존 도구를 사용하여 프로세스를 찾을 수 있습니다. Azure VM에 대한 Azure 지원에서 권장되는 도구는 다음과 같습니다.

PerfInsights

PerfInsights는 VM 성능 문제에 대한 Azure 지원 권장되는 도구입니다. CPU, 메모리 및 고해상도 I/O 그래프에 대한 모범 사례 및 전용 분석 탭을 다루도록 설계되었습니다. Azure Portal을 통해 또는 VM 내에서 OnDemand를 실행할 수 있습니다. Azure 지원 팀과 데이터를 공유할 수 있습니다.

PerfInsights 실행

PerfInsights는 Windows 및 Linux OS 모두에서 사용할 수 있습니다. Windows의 경우 다음과 같은 옵션이 있습니다.

Azure Portal을 통해 보고서 실행 및 분석

Azure Portal을 통해 설치되면 실제로 VM에 확장을 설치합니다. 사용자는 VM 블레이드의 확장으로 직접 이동하여 성능 진단 옵션을 선택하여 PerfInsights를 확장으로 설치할 수도 있습니다.

Azure Portal 옵션 1

VM 블레이드를 찾아보고 성능 진단 옵션을 선택합니다. 선택한 VM에 옵션(확장 사용)을 설치하라는 메시지가 표시됩니다.

성능 진단 옵션의 성능 진단 설치 단추 스크린샷

Azure Portal 옵션 2

VM 블레이드에서 문제 진단 및 해결을 찾아 VM 성능 문제를습니다.

문제 진단 및 해결 옵션의 VM 성능 문제 스크린샷

문제 해결을 선택하면 PerfInsights 설치 화면이 로드됩니다.

설치를 선택하면 설치에서 다양한 컬렉션 옵션을 제공합니다.

성능 진단 옵션의 성능 분석 설정 스크린샷

스크린샷의 번호 매기기 옵션은 다음 주석과 관련이 있습니다.

  1. 높은 CPU 옵션에 대해 성능 분석 또는 고급 선택합니다.

  2. 여기에 증상을 추가하면 Azure 지원과 정보를 공유하는 데 도움이 되는 증상이 보고서에 추가됩니다.

  3. 데이터 수집 기간을 선택합니다. 높은 CPU 옵션의 경우 15분 이상을 선택합니다. Azure Portal 모드에서는 최대 15분의 데이터를 수집할 수 있습니다. 더 긴 컬렉션 기간 동안 프로그램을 VM 내에서 실행 파일로 실행해야 합니다.

  4. Azure 지원에서 이 데이터를 수집하라는 요청을 받는 경우 여기에서 티켓 번호를 추가할 수 있습니다. 이 필드는 선택적입니다.

  5. EULA(최종 사용자 사용권 계약)를 수락하려면 이 필드를 선택합니다.

  6. 이 경우 Azure 지원 팀에서 이 보고서를 사용할 수 있도록 하려면 이 필드를 선택합니다.

보고서는 구독의 Storage 계정 중 하나에 저장됩니다. 나중에 보고 다운로드할 수 있습니다.

VM 내에서 PerfInsights 실행

이 메서드는 더 긴 기간 동안 PerfInsights를 실행하려는 경우에 사용할 수 있습니다. PerfInsights 문서에서PerfInsights를 실행 파일로 실행하는 데 필요한 다양한 명령 및 플래그에 대한 자세한 연습을 제공합니다. 높은 CPU 사용량을 위해 다음 모드 중 하나가 필요합니다.

  • 고급 시나리오

    • PerfInsights /run advanced xp /d 300 /AcceptDisclaimerAndShareDiagnostics
  • VM 느린(성능) 시나리오

    • PerfInsights /run vmslow /d 300 /AcceptDisclaimerAndShareDiagnostics /sa <StorageAccountName> /sk <StorageAccountKey>

명령 출력은 PerfInsights 실행 파일을 저장한 동일한 폴더에 있습니다.

보고서에서 찾을 내용

보고서를 실행한 후 콘텐츠의 위치는 Azure Portal을 통해 실행되었는지 또는 실행 파일로 실행되었는지에 따라 달라집니다. 두 옵션 중 하나에 대해 생성된 로그 폴더에 액세스하거나 분석을 위해 로컬로 다운로드(Azure Portal인 경우)합니다.

Azure Portal을 통해 실행

높은 영향 성능 진단의 스크린샷

성능 진단 보고서 페이지의 보고서 다운로드 단추 스크린샷

VM 내에서 실행

폴더 구조는 다음 이미지와 유사합니다.

폴더 구조의 출력 폴더 및 PerfInsight 보고서 HTML 파일의 스크린샷

폴더 구조의 GeneralCounters_000001.blg 및 System.evtx 스크린샷

  1. Perfmon, Xperf, Netmon, SMB 로그, 이벤트 로그 등과 같은 추가 컬렉션은 출력 폴더에서 찾을 수 있습니다.

  2. 분석 및 권장 사항과 함께 실제 보고서입니다.

  3. 성능(VMslow) 및 고급 모두에 대해 보고서는 PerfInsights 실행 기간 동안 성능 정보를 수집합니다.

  4. 이벤트 로그는 유용한 시스템 수준 또는 프로세스 크래시 세부 정보를 빠르게 보여 줍니다.

시작 위치

PerfInsights 보고서를 엽니다. 결과 탭은 리소스 사용량 측면에서 이상값을 기록합니다. CPU 사용량이 많은 인스턴스가 있는 경우 결과 탭은 높은 영향 또는 중간 영향으로 분류합니다.

PerfInsights 보고서 페이지의 CPU 부분에 있는 결과 탭의 스크린샷 이 예제에서 영향 수준은 보통입니다.

이전 예제와 마찬가지로 PerfInsights는 30분 동안 실행되었습니다. 그 시간의 절반 동안 강조 표시된 프로세스는 높은 쪽에서 CPU를 소모했습니다. 컬렉션 시간 내내 동일한 프로세스가 실행된 경우 영향 수준이 HIGH변경되었을 것입니다.

Findings 이벤트를 확장하면 몇 가지 주요 세부 정보가 표시됩니다. 이 탭은 평균 CPU 사용량당 내림차순으로 프로세스를 나열하고 프로세스가 시스템, Microsoft 소유 앱(SQL, IIS) 또는 타사 프로세스와 관련이 있는지 여부를 보여 줍니다.

자세한 정보

CPU 아래에는 자세한 패턴 분석, 코어당 또는 프로세스당 사용할 수 있는 전용 서브탭이 있습니다.

상위 CPU 소비자 탭에는 두 개의 별도 관심 섹션이 있으며 여기에서 프로세서별 통계를 볼 수 있습니다. 애플리케이션 디자인은 종종 단일 스레드이거나 단일 프로세서에 고정됩니다. 이 시나리오에서는 하나 또는 몇 개의 코어가 100%에서 실행되는 반면 다른 코어는 예상 수준에서 실행됩니다. 서버의 평균 CPU가 예상대로 실행되는 것처럼 보이지만 사용량이 많은 코어에 고정된 프로세스는 예상보다 느려지므로 이러한 시나리오는 더 복잡합니다.

성능 진단 분석 기간 및 높은 CPU 사용 기간을 보여주는 PerfInsights 보고서 페이지의 CPU 부분에 있는 상위 CPU 소비자 탭의 스크린샷.

두 번째 섹션(마찬가지로 중요)은 최고 장기 실행 CPU 소비자입니다. 이 섹션에서는 프로세스 세부 정보와 해당 CPU 사용 패턴을 모두 보여 줍니다. 목록은 높은 평균 CPU 소비자를 맨 위에 두어 정렬됩니다.

상위 장기 실행 CPU 소비자 섹션의 스크린샷.

이 두 탭은 다음 문제 해결 단계에 대한 경로를 설정하기에 충분합니다. 높은 CPU 조건을 구동하는 프로세스에 따라 이전에 질문한 질문을 해결해야 합니다. SQL Server(sqlservr.exe) 또는 IIS(w3wp.exe)와 같은 프로세스에는 이 조건을 유발하는 쿼리 또는 코드 변경에 대한 특정 드릴다운이 필요합니다. WMI 또는 Lsass.exe 같은 시스템 프로세스의 경우 다른 경로를 따라야 합니다.

RDAgent, OMS 및 모니터링 확장 실행 파일과 같은 Azure VM 관련 프로세스의 경우 Azure 지원 팀의 도움을 받아 새 빌드 또는 버전을 수정해야 할 수 있습니다.

Perfmon

Perfmon 은 Windows Server에서 리소스 문제를 해결하기 위한 가장 빠른 도구 중 하나입니다. 권장 사항 또는 결과를 포함하는 명확한 보고서는 제공하지 않습니다. 대신 사용자가 수집된 데이터를 탐색하고 다른 카운터 범주에서 특정 필터를 사용해야 합니다.

PerfInsights는 VMSlow 및 고급 시나리오에 대한 추가 로그로 Perfmon을 수집합니다. 그러나 Perfmon은 독립적으로 수집할 수 있으며 다음과 같은 추가 이점이 있습니다.

  • 원격으로 수집할 수 있습니다.

  • 작업을 통해 예약할 수 있습니다.

  • 롤오버 기능을 사용하여 더 긴 기간 동안 또는 연속 모드에서 수집할 수 있습니다.

Perfmon이 이 데이터를 표시하는 방법을 보려면 PerfInsights에 표시된 것과 동일한 예제를 고려하세요. 필요한 카운터 범주는 다음과 같습니다.

  • 프로세서 정보 > %Processor Time > _Total

  • %ProcessorTime > 모든 인스턴스 처리 >

시작 위치

Perfmon의 출력 파일 이름에는 확장명이 있습니다 .blg . 이러한 파일을 독립적으로 수집하거나 PerfInsights를 사용하여 수집할 수 있습니다. 이 설명에서는 PerfInsights 데이터에 포함되고 이전 예제에 따라 수집된 Perfmon .blg 을 사용합니다.

Perfmon에서 사용할 수 있는 기본 사용자 준비 보고서는 없습니다. 그래프 유형을 변경하는 보기가 다르지만 프로세스 여과(또는 원인 프로세스를 식별하는 데 필요한 작업)는 수동입니다.

참고 항목

PAL 도구파일을 사용하고 .blg 자세한 보고서를 생성할 수 있습니다.

시작하려면 카운터 추가 범주를 선택합니다.

  1. 사용 가능한 카운터 아래프로세서 정보 범주에서 %ProcessorTime 카운터를 선택합니다.

  2. 결합된 모든 코어의 통계를 제공하는 _Total 선택합니다.

  3. 추가를 선택합니다. 추가된 카운터 아래에 %ProcessorTime이 창에 표시됩니다.

성능 모니터 카운터 추가 대화 상자의 스크린샷

카운터가 로드되면 컬렉션 시간 프레임에 꺾은선형 추세 차트가 표시됩니다. 카운터를 선택하거나 지울 수 있습니다. 지금까지 하나의 카운터만 추가했습니다.

컬렉션 시간 프레임의 꺾은선형 추세 차트 스크린샷

모든 카운터에는 평균, 최소최대 값이 있습니다. 평균 값은 데이터 수집 기간에 따라 달라질 수 있으므로 평균 값과 최대값 모두에 집중합니다. 전체 컬렉션이 40분인 동안 높은 CPU 작업이 10분 동안 표시되면 평균 값이 훨씬 낮아질 것입니다.

이전 추세 그래프는 총 프로세서약 15분 동안 80%에 가까운 범위임을 보여 줍니다.

프로세스 식별

서버의 CPU 사용량이 지정된 시간 동안 높은 것으로 확인되었지만 아직 드라이버를 확인하지 않았습니다. PerfInsights를 사용하는 것과 달리 이 경우 범인 프로세스를 수동으로 검색해야 합니다.

이 작업의 경우 이전에 추가한 %ProcessorTime 카운터를 지우거나 제거한 다음 새 범주를 추가해야 합니다.

  • %ProcessorTime > 모든 인스턴스 처리 >

이 범주는 해당 시간에 실행되는 모든 프로세스에 대한 카운터를 로드합니다.

새 범주를 추가하는 단계의 스크린샷

일반적인 프로덕션 컴퓨터에서 수백 또는 프로세스를 실행할 수 있습니다. 따라서 낮거나 평평한 추세 그래프가 있는 것처럼 보이는 모든 카운터를 지우는 데 시간이 걸릴 수 있습니다.

이 프로세스를 가속화하려면 히스토그램 보기를 사용하고 보기 형식을 줄에서 히스토그램으로 변경합니다. 그러면 막대 그래프가 표시됩니다. 수집 시간 동안 CPU 사용량이 많은 프로세스를 선택하는 것이 더 쉽습니다.

항상 Total에 대한 막대가 있으므로 고갈률이 높은 막대에 집중합니다. 다른 막대를 삭제하여 보기를 정리할 수 있습니다. 이제 선 보기로 다시 이동합니다.

성능 모니터 히스토그램 보기 단추와 고갈률이 높은 막대 2개를 포함하는 예제 차트의 스크린샷

이제 범인 프로세스를 더 쉽게 잡을 수 있습니다. 기본적으로 MaxMin 값은 서버의 코어 수 또는 프로세스의 스레드 수의 배수입니다.

원인 프로세스를 명확하게 보여 주는 꺾은선형 추세 차트의 스크린샷.

사용 가능한 도구 목록은 Perfmon용 PerfInsights에서 끝나지 않습니다. ProcessMonitor(ProcMon) 또는 Xperf와 같은 다른 도구에 액세스할 수 있습니다. 필요에 따라 사용할 수 있는 여러 타사 도구가 있습니다.

Azure 모니터링 도구

Azure VM에는 CPU, 네트워크 I/O 및 I/O 바이트와 같은 기본 정보를 포함하는 신뢰할 수 있는 메트릭이 있습니다. Azure Monitor와 같은 고급 메트릭의 경우 지정한 스토리지 계정을 구성하고 사용하기 위해 몇 가지 선택만 해야 합니다.

기본(기본) 카운터

Azure Monitor의 메트릭 페이지 스크린샷. 이 예제에서는 집계 설정의 CPU 백분율 옵션이 선택되어 있습니다.

Azure Monitor 사용

Azure Monitor 메트릭을 사용하도록 설정한 후 소프트웨어는 VM에 확장을 설치한 다음 Perfmon 카운터를 포함하는 세분화된 메트릭 수집을 시작합니다.

진단 설정 페이지의 개요 탭에 있는 진단 스토리지 계정 필드의 스크린샷.

기본 카운터 범주는 기본값으로 설정됩니다. 그러나 사용자 지정 컬렉션을 설정할 수도 있습니다.

진단 설정 페이지의 성능 카운터 탭에 있는 기본 범주 옵션의 스크린샷.

설정을 사용하도록 설정한 후 메트릭 섹션에서 이러한 게스트 카운터를 볼 수 있습니다. 메트릭이 특정 임계값에 도달하면 경고(전자 메일 메시지 포함)를 설정할 수도 있습니다.

메트릭 페이지의 메트릭 네임스페이스 필드 및 새 경고 규칙 단추 스크린샷

Azure Monitor를 사용하여 Azure VM을 관리하는 방법에 대한 자세한 내용은 Azure Monitor를 사용하여 Azure 가상 머신 모니터링을 참조하세요.

사후 문제 해결

문제가 이미 발생한 경우 처음에 높은 CPU 문제의 원인을 검색해야 합니다. 반응성 자세는 까다로울 수 있습니다. 데이터 수집 모드는 문제가 이미 발생했기 때문에 유용하지 않습니다.

이 문제가 일회성 발생인 경우 어떤 앱이 발생했는지 확인하기 어려울 수 있습니다. Azure VM이 OMS 또는 기타 진단 추적을 사용하도록 구성된 경우 문제의 원인에 대한 인사이트를 계속 얻을 수 있습니다.

반복 패턴을 처리하는 경우 다음에 문제가 발생할 가능성이 있는 시간 동안 데이터를 수집합니다.

PerfInsights에는 아직 예약된 실행 기능이 없습니다. 그러나 명령줄을 통해 Perfmon을 실행하고 예약할 수 있습니다.

Logman 명령

Logman 카운터 만들기 명령은 명령줄을 통해 Perfmon 컬렉션을 실행하거나, 작업 관리자를 통해 예약하거나, 원격으로 실행하는 데 사용됩니다.

샘플 (원격 컬렉션 모드 포함)

Logman create counter LOGNAME -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 300 -c "\\SERVERNAME\LogicalDisk(*)\*" "\\SERVERNAME\Memory\*" "\\SERVERNAME\Network Interface(*)\*" "\\SERVERNAME\Paging File(*)\*" "\\SERVERNAME\PhysicalDisk(*)\*" "\\SERVERNAME\Process(*)\*" "\\SERVERNAME\Redirector\*" "\\SERVERNAME\Server\*" "\\SERVERNAME\System\*" "\\SERVERNAME\Terminal Services\*" "\\SERVERNAME\Processor(*)\*" "\\SERVERNAME\Cache\*" -si 00:01:00

Logman.exe 동일한 VNET의 피어 Azure VM 컴퓨터에서 시작할 수도 있습니다.

이러한 매개 변수에 대한 자세한 내용은 logman create counter를 참조하세요.

문제가 발생하는 동안 Perfmon 데이터를 수집한 후 데이터를 분석하는 나머지 단계는 앞에서 설명한 것과 동일합니다.

결론

성능 문제의 경우 워크로드를 이해하는 것이 문제 해결의 핵심입니다. 다른 VM SKU 및 다른 디스크 스토리지 옵션에 대한 옵션은 프로덕션 워크로드에 초점을 맞추어 평가해야 합니다. 다른 VM에서 솔루션을 테스트하는 프로세스는 최상의 결정을 내리는 데 도움이 될 수 있습니다.

사용자 작업 및 데이터 양은 다양하기 때문에 항상 VM의 컴퓨팅, 네트워킹 및 I/O 기능에 버퍼를 유지합니다. 이제 워크로드의 갑작스런 변화는 큰 영향을 미치지 않습니다.

워크로드가 곧 증가할 것으로 예상하는 경우 더 많은 컴퓨팅 능력을 가진 더 높은 SKU로 이동합니다. 워크로드가 계산 집약적이면 VM SKU를 현명하게 선택합니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.