이 경우 부하 평균은 어떻게 계산되나요?

이 경우 부하 평균은 어떻게 계산되나요?
load average: 20.62, 18.83, 11.31

이는 쿼드 코어 프로세서의 로드 평균입니다. 내가 실행 중인 프로그램은 CPU뿐만 아니라 다른 리소스도 소비합니다.

CPU만 사용하여 이 숫자를 어떻게 표시할 수 있습니까?

답변1

너의 문제: 이 경우 부하 평균은 어떻게 계산되나요?

답변: 이 세 자리 숫자는 다양한 시계열(1분, 5분, 15분)에 대한 지수 감쇠 이동 평균입니다. 이 계산은 일반적으로 백분율로 표시되는 실제 CPU 사용률(예: Windows)이 아닌 프로세서 대기열에 배치된 프로세스를 기반으로 합니다.

그러나 나는 이것이 현재 시스템에서 무슨 일이 일어나고 있는지 이해하려는 대답이 아니라고 생각합니다.

로드 평균은 CPU 로드 및 I/O 대기를 고려하여 "시스템" 로드를 반영합니다. 이는 성능 문제 해결을 시작하는 데 필요한 가장 일반적인 매개변수입니다. 다양한 측정항목(디스크 로드)과 도구(예: sysstat 패키지의 iostat)를 사용하여 시스템 성능을 분석합니다.

게다가두 번째 답변귀하의 질문에:

CPU 사용률 계산

grep 'cpu ' /proc/stat | awk '{usage=100-($5*100)/($2+$3+$4+$5+$6+$7+$8)} END {print usage}'

바라보다주제그리고 읽어보세요기사.

모니터링 시스템(예: Zabbix)을 사용하는 것이 좋습니다.

답변2

이 3개의 숫자는아니요다양한 CPU 수.

이 숫자는평균값(참고 사항 참조)마지막 1분, 5분, 15분.

로드의 의미는 다음과 같습니다. 단일 CPU 시스템에 여러 프로세스가 있으면 병렬로 실행되는 것처럼 보입니다. 그러나 그것은 진실이 아니다. 실제로 일어나는 일은 커널이 프로세스에 1/100초를 제공한 다음 인터럽트로 실행을 중단하는 것입니다. 그런 다음 다음 1/100초를 다른 프로세스에 할당합니다. 때로는 이 1/100이 1/1000일 수도 있고 시간 제한이 변경될 수도 있지만 상관없습니다.

실제로 "어떤 프로세스가 다음 1/100초 간격을 얻어야 하는가?"라는 질문은 복잡한 휴리스틱을 통해 결정됩니다. 이를 작업 스케줄링이라고 합니다.

물론 디스크에서 데이터를 읽기 위해 대기 중인 프로세스와 같이 차단된 프로세스는 이 작업 예약의 영향을 받지 않습니다.

로드가 알려주는 내용: 현재 다음 1/100초 시간 프레임을 기다리고 있는 프로세스 수입니다. 물론 이는 평균이다. 이는 cat /proc/loadavg에서 여러 숫자를 볼 수 있기 때문입니다.

다중 CPU 시스템의 상황은 더욱 복잡합니다. 여러 프로세스에 시간 범위를 제공할 수 있는 여러 CPU가 있습니다. 이로 인해 작업 일정이 약간 복잡해지기는 하지만 너무 복잡하지는 않습니다. 그러나 상황은 동일합니다.

커널은 똑똑하고 최적의 효율성을 위해 시스템 리소스를 공유하려고 시도하며 이미 그 목표에 가깝습니다(몇 가지 작은 최적화를 통해 예를 들어 캐시 고려 사항으로 인해 프로세스가 가능한 한 오랫동안 동일한 시스템에서 실행되는 것이 더 좋습니다. 그러나 그들이 어디에 있는지는 중요하지 않습니다.) 이는 로드가 8이면 실제로 다음 타임 슬라이스를 기다리는 프로세스가 8개 있다는 의미이기 때문입니다. 8개의 CPU가 있는 경우 이러한 시간 조각을 CPU에 일대일로 할당하여 시스템을 최적으로 활용할 수 있습니다.

가 표시되면 top실제로 실행 중인 프로세스 수가 놀라울 정도로 적다는 것을 알 수 있습니다. 해당 프로세스는 R거기에 레이블이 붙은 프로세스입니다. 실제로 하드코어가 아닌 시스템에서도 일반적으로 5 미만입니다. 문제의 일부는 디스크나 네트워크에서 데이터를 기다리는 프로세스도 중단된다는 것입니다( S상단에 표시됨). 로드에는 CPU 사용량만 표시됩니다.

멀티 코어 CPU는 실제로 동일한 실리콘 칩에 여러 개의 CPU가 있습니다. 이 견해에는 차이가 없습니다.

하이퍼스레드 CPU에는 흥미로운 부작용이 있습니다. 즉, CPU를 로드하면 하이퍼스레드 쌍이 느려집니다. 그러나 이는 스케줄러의 프로세스 이동 결정에 영향을 미칠 수 있고 영향을 주어야 하지만 일반적인 작업 예약 처리보다 더 깊은 수준에서 발생합니다. 하이퍼스레드 CPU는 아직 널리 사용되지 않습니다.

Windows에서는 부하 계산에 다른 방법이 사용됩니다. 즉, 부하 1.0은모두CPU 코어 사용량이 100%에 도달했습니다(시스템 부하가 4.0).


노트@Alex가 언급했듯이 이는 시간 평균이 아닙니다. 이는 1분, 5분, 15분의 시간 상수를 갖는 지수 가중 시간 평균입니다. 계산적으로 더 효율적이며 최근 변경 사항에 더 잘 반응합니다. 자세한 내용은 출처를 참조하세요kernel/sched/loadavg.c.

답변3

사람들이 왜 이 질문에 직접적으로 대답하지 않는지 모르겠습니다. 모두가 컴퓨터 공학의 언어로 이야기합니다.

실제로 이 숫자는 "1"의 로드 평균입니다. 로드 평균이 "5"이면 CPU 사용량이 약 500%, 즉 과부하가 400%라는 의미입니다. (능력의 500% - 100%). "0.05"라고 표시되면 CPU의 5%만 사용하고 있고 CPU의 95%는 여전히 사용되지 않는다는 의미입니다.

위 계산은 1코어 기준입니다. 코어가 여러 개인 경우 평균은 코어 수/코어 수로 나뉩니다. 예를 들어 코어가 4개이고 평균이 "10"인 경우 CPU 사용량이 10 / 4 * 100 = 250%라는 의미입니다.

그래서,평균의 이상적인 값은 "코어 수"와 같거나 작습니다.. 3개의 값(20.62, 18.83, 11.31)은 최근 1분, 최근 5분, 최근 15분의 평균입니다.

답변4

"부하"에 대한 구체적인 설명 없이 이를 이해하는 간단한 방법은 1이 주어진 시간에 CPU 코어가 실제로 처리할 수 있는 부하의 양이라는 것입니다.

부하 평균이 1보다 높으면 단일 CPU 코어가 더 이상 작업을 수행할 수 없음을 의미하고, CPU 코어가 하나만 사용 가능한 경우 장기 부하 평균이 1보다 높은 컴퓨터는 다음 단계에서 "건너뛰기"해야 함을 의미합니다. 특정 시간 조각 이 기간 동안 특정 작업에 리소스가 할당되어 실행 속도가 느려집니다.

고맙게도 최신 컴퓨터에는 사용 가능한 여러 개의 CPU 코어가 있는 경우가 많습니다. 즉, 로드 평균이 1이라는 의미입니다. 이는 단일 코어 시스템에서는 끔찍한 일이며, 쿼드 코어에서는 고정 CPU가 과열되거나 조기 오류가 발생할 위험이 있습니다. 시스템에는 전혀 문제가 없으며 4개 코어 모두에 퍼져 있습니다.

워크로드가 매우 다양한 데스크탑에서는 로드 평균이 상대적으로 쓸모가 없습니다. 워크로드가 안정적인 서버에서 로드 평균은 DoS 공격, 해커 공격, 하드웨어 손상, 하드웨어 업그레이드의 긴급성, 오작동하는 소프트웨어 등을 나타낼 수 있습니다.

top 또는 vmstat와 같은 것이 더 적합할 것이며, 대부분의 Linux 배포판에는 패키지 저장소에 htop 및 glans와 같은 대화형 도구도 포함되어 있어 폭주하는 리소스 사용량을 실시간으로 격리하는 데 도움이 됩니다.

관련 정보