ps 명령 출력 필드의 %CPU가 프로세스의 실제 CPU 사용량이 아닌가요?

ps 명령 출력 필드의 %CPU가 프로세스의 실제 CPU 사용량이 아닌가요?

예를 들어, 이 BSD 스타일 명령의 출력 필드 중 하나 ps aux는 입니다 %CPU. 대체 명령 ps -efl출력 C(또는 CP) 필드입니다.

ps매뉴얼 페이지 에 따르면 :

  • %CPU프로세스의 CPU 사용률이며 "##.#" 형식입니다. 현재는 사용된 CPU 시간을 프로세스가 실행된 시간(CPU 시간/실시간 비율)으로 나누어 백분율로 표시합니다.
  • 본질적으로 정수로 표현되는 %CPU

이것이 ps매뉴얼 페이지 세부사항 %CPU또는 입니다 C. 그러나 인터넷에 있는 대부분의 책과 웹사이트는 간단히 다음과 같이 말합니다 %CPU or C is CPU usage of a process.

프로세스에서 사용하는 CPU 처리 능력의 백분율을 CPU에서 사용할 수 있는 총 처리 능력의 백분율로 생각할 수도 있습니다. 아니면 나만 그런 걸까?

답변1

실시간에 대한 CPU 시간의 비율(여러 합리적인 방법 중 하나로 계산됨)프로세스에서 사용하는 CPU 처리 능력을 CPU에서 사용할 수 있는 총 처리 능력의 백분율로 측정한 것입니다.

시스템의 모든 프로세스는 프로세서에서 실행 중이거나 대기 중이라는 두 가지 상태일 수 있습니다. 현실은 이보다 더 복잡하고 더 많은 프로세스 상태가 있지만 단순화를 위해 이 답변은 실행 중 상태를 구분하지 않습니다. , 실행 가능, 중단 가능 대기, 중단 불가능 대기 등).

일반 프로세스는 일반적으로 프로세서에서 실행되는 데 약간의 시간을 보낸 다음 결국 이벤트가 발생할 때까지 기다립니다(예: 네트워크 연결에 데이터 도착, 디스크 I/O 완료, 잠금 사용 가능, 실행 가능한 프로세스가 완료된 후 CPU를 다시 사용할 수 있게 됨) ). 시간을 다 써 버렸습니다).

해당 간격의 길이에 대한 간격 동안 프로세스가 프로세서에서 실행되는 데 소요되는 시간의 비율은 매우 흥미로운 속성입니다. 프로세스는 이러한 특성에 따라 크게 다를 수 있습니다. 예를 들어, 과학 컴퓨팅 프로그램을 실행하는 프로세스는 결국 많은 CPU와 약간의 I/O를 사용하게 되는 반면, 쉘은 주로 I/O를 기다리고 가끔씩 일부 처리를 수행합니다.

이상적인 상황(스케줄러의 오버헤드 없음, 인터럽트 없음 등)과 완벽한 측정에서 시스템의 각 프로세스가 1초에 사용하는 CPU 시간의 합은 1초 미만이며 남은 시간은 유휴 상태입니다. CPU 시간. 더 많은 프로세스, 특히 CPU 바인딩된 프로세스가 추가되면 유휴 CPU 시간의 비율이 감소하고 모든 프로세스에서 사용하는 총 CPU 시간은 초당 1초에 가까워집니다. 이 시점에서 추가 프로세스를 추가하면 실행 가능한 프로세스가 CPU를 기다리게 되어 실행 큐 길이가 늘어나고(따라서 로드 평균이 증가) 궁극적으로 시스템 속도가 느려질 수 있습니다.

시작 이후 경과된 시간에 대한 프로세스의 전체 CPU 시간의 간단한 비율을 취하는 것은 궁극적으로 프로세스의 시간을 나타냅니다.평균CPU 사용량. 일부 프로세스는 실행 중에 동작을 변경하기 때문에(예: 쿼리를 기다리는 데이터베이스 서버와 많은 복잡한 쿼리를 실행하는 동일한 데이터베이스 서버) 최근 CPU 사용량을 아는 것이 더 흥미로운 경우가 많습니다. 따라서 일부 시스템(예: FreeBSD, Mac OS X)에서는 다음과 같이 붕괴 평균을 사용합니다.이 맨페이지:

프로세스의 CPU 사용률입니다. 이는 이전(실시간) 시간의 1분 단위 붕괴 평균입니다. 계산을 위한 시간 기반이 다양하기 때문에(프로세스가 매우 오래 진행되었기 때문에) 모든 %cpu 필드의 합은 100%를 초과할 수 있습니다.

Linux에는 다음을 기반으로 CPU 사용량을 제공하는 단순화된 통계가 있습니다.이 맨페이지:

CPU 사용량은 현재 프로세스의 전체 수명 동안 실행 시간의 백분율로 표시됩니다. 이는 이상적이지 않으며 ps가 준수하는 표준을 충족하지 않습니다. CPU 사용량이 정확히 100%가 될 가능성은 거의 없습니다.

관련 정보