"부하 평균"은 "최상위"출력에서 어떻게 해석됩니까? 모든 배포판에서 동일합니까?


12

Red-Hat 기반 Linux의 출력이 Debian 기반 Linux에서 다르게 해석 될 수 있는지 알고 싶습니다.

질문을 좀 더 구체적으로 설명하기 top위해 Red-Hat 시스템 에서 명령 의 첫 번째 줄에서 "부하 평균"을 해석하는 방법과 공식 문서 ro 코드로이를 확인하는 방법을 이해하고 있습니다.

[이 주제에 접근하는 방법은 여러 가지가 있으며,이 질문에 대한 대답은 모두 수용 가능합니다]

하나의 잠재적 인 접근 방법은이 정보가 공식적으로 문서화 된 곳을 찾는 것입니다.
다른 하나 top는 내가 작업중 인 특정 배포 및 버전에서 빌드 된 코드 버전을 찾는 것 입니다.

내가 얻는 명령 출력은 다음과 같습니다.

    top - 13:08:34 up  1:19,  2 users,  load average: 0.02, 0.00, 0.00
    Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 96.8%id,  2.7%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3922520k total,   788956k used,  3133564k free,   120720k buffers
    Swap:  2097148k total,        0k used,  2097148k free,   344216k cached


이 경우 부하 평균값을 어떻게 해석 할 수 있습니까?
나는 평균 부하가 한 문서 소스에서 마지막 순간에 있고 다른 문서 소스에 100을 곱한 후에 해석되어야한다는 것을 알았습니다.
따라서 문제는
0.02 % 또는 2 %가로드 되었습니까?
설명서 소스 및 버전 :

1) 첫 번째 별

    TOP(1)                        Linux User’s Manual                       TOP(1)

    NAME
           top - display Linux tasks

출처 : man top내 RedHat 배포판에
우분투에는 다음과 같은 부하 평균을 설명하지 않는 "작업"이 포함 된 버전이 있습니다
.

2) 두 번째로 시작

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

출처 :
http://man7.org/linux/man-pages/man1/top.1.htm

3) 이것으로 시작합니다 :

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

출처 : http://www.unixtop.org/man.shtml

번째man top안으로 RHEL또는 안으로 볼 수 있으며 online ubuntu documentation출력 형식에 대한 설명이 없습니다 ( 관심있는 로드 평균 에 대한 설명 없음 ) .

번째 는 부하 평균이 지난 1 분과 관련이 있지만 그 값의 해석에 대해서는 관련이 없음을 나타내는 간단한 설명이 포함되어 있습니다!

나는 두 번째 출처에서 직접 인용합니다.

2a. 가동 시간 및로드 평균
이 부분은
디스플레이 모드
현재 시간 및 마지막 부팅 이후의 시간 길이에 따라 프로그램 또는 창 이름을 포함하는 단일 행으로 구성됩니다 . 마지막 1, 5 및 15 분 동안의
총 사용자
시스템 총 평균 수

따라서이 설명이 실제로 정확하다면,로드 평균이 약 1 분 정도임을 이해하는 것으로 충분합니다.
그러나 숫자의 형식을 설명하지는 않습니다.

에서 세 번째 설명, 그것은 말한다 :

하중 평균에 숫자를 지정할 때는 100을 곱해야합니다.

이 설명은 0.02는 0.02 %가 아니라 2 %를 의미한다고 제안합니다. 그러나 이것이 맞습니까? 또한 모든 Linux 배포판과 잠재적으로 다른 구현에 대해 정확 top합니까?
이 질문에 대한 답을 찾기 위해 온라인에서 코드를 검색하여 코드를 살펴 보았습니다. 그러나 적어도 topRHEL과 관련된 두 가지 버전이 있습니다. builtin-top.c와 리팩토링 top.c. 코드 시작 부분에 공지 사항에 따라 Red-Hat이 저작권을 가지고 있으므로 RHEL이이 중 하나를 사용하는 것이 논리적으로 보입니다.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

따라서 많은 코드를 조사하기 전에 CPU로드가 어떻게 해석되는지에 대한 정확한 이해를 형성하기 위해 어디에 집중 해야하는지에 대한 의견이 필요했습니다.

아래의 답변에 제공된 정보에서 일부 개인 검색 외에도 다음을 발견했습니다.

1- top사용중인 패키지가 procps-3.2.8 패키지에 포함되어 있습니다. 를 사용하여 확인할 수 있습니다 top -v.
2- procps-3.2.8공식 웹 사이트에서 다운로드 한 버전에서는 도구 uptimeprocfs파일에서 /proc/loadavg직접 정보를 얻는 것 같습니다 (Linux 기능을 사용하지 않음 getloadavg()).
3-이제 top명령에는 기능을 사용하지 않습니다 getloadavg(). 나는 top실제로와 같은 것을 확인했습니다.uptime로드 평균을 표시하는 도구입니다. 실제로 uptime도구의 함수를 호출 하여 procfs파일 에서 정보를 가져옵니다 /proc/loadavg.

따라서 모든 것이 /proc/loadavg파일을 가리 킵니다 ! 따라서에 load average의해 작성된 내용을 정확하게 이해 top하려면 커널 코드를 읽어 파일 loadavg이 어떻게 작성 되는지 확인해야합니다 .
또한 중 하나의 세 가지 가치에 대한 평신도의 용어 설명을 제공하는 훌륭한 기사가 있습니다 loadavg.
따라서 모든 답변이 똑같이 유용하고 도움이 되었음에도 불구하고 http://www.linuxjournal.com//article/9001 기사를 가리키는 답변을 내 질문에 대한 "the"답변으로 표시하겠습니다. 당신의 기여에 감사합니다!

또한 top and load average 이해 질문에서 loadavg계산 된 지점을 가리키는 커널의 소스 코드에 대한 링크를 찾았습니다 . 그것이 작동하는 방식을 설명하는 거대한 의견이있는 것처럼 보이 므로이 코드 부분도 있습니다 C!
코드에 대한 링크는 http://lxr.free-electrons.com/source/kernel/sched/loadavg.c입니다.
다시 한 번 나는 어떤 표절에 관여하려고하지 않고, 이것을 완전성을 위해 추가하고 있습니다. 따라서 커널 코드에 대한 링크는 top and load average 이해 의 답변 중 하나에서 발견되었습니다 .


버전은 무엇을 알려줍니까? ( top -v)
Fiximan

상단 : procps 버전 3.2.8
Angelos Asonitis

답변:


19

CPU로드는 실행 큐의 길이, 즉 실행 대기중인 프로세스 큐의 길이입니다.

uptime명령은 일반적으로로 표시되는 것과 같이 마지막 1 분, 마지막 5 분 및 마지막 15 분 동안의 실행 큐의 평균 길이를 보는 데 사용될 수 있습니다 top.

높은로드 값은 실행 큐가 길다는 것을 의미합니다. 값이 낮 으면 값이 짧다는 의미입니다. 따라서 1 분로드 평균이 0.05이면 해당 분 동안 평균적으로 실행 큐에서 실행 대기중인 0.05 개의 프로세스가 있음을 의미합니다. 백분율이 아닙니다. 이것은 모든 Unices에서 동일하게 AFAIK입니다 (일부 Unices는 I / O를 기다리는 프로세스를 계산하지 않을 수도 있지만 Linux는 그렇게 생각합니다. OpenBSD는 잠시 동안 만 커널 스레드를 계산하여로드가 항상 1 또는 더).

Linux top유틸리티는 커널에서로드 값을 가져 와서이를 씁니다 /proc/loadavg. 의 출처를 살펴보면 다음과 같은 procps-3.2.8사실을 알 수 있습니다.

  1. 로드 평균을 표시하기 위해이 sprint_uptime()함수가에서 호출됩니다 top.c.
  2. 이 기능에 살고 proc/whattime.c와 통화 loadavg()에서 proc/sysinfo.c.
  3. 이 기능은 단순히 LOADAVG_FILE로드 평균을 읽기 위해 열립니다 .
  4. LOADAVG_FILE앞에서로 정의됩니다 "/proc/loadavg".

답변 해 주셔서 감사합니다. 공식적으로 어딘가에 기록되어 있습니까?
Angelos Asonitis

1
@AgelosAssonitis 2006 년의 LinuxJournal 기사는 흥미로울 수 있습니다. Linux Kernel 소스 트리에서보고자하는 몇 개의 소스 파일을 가리 킵니다. :이 파일은 커널의 최신 화신 여전히이있는 경우 내가 말할 수 있도록 나는 어떤 리눅스 사용자는 아니지만 linuxjournal.com/article/9001
Kusalananda

참으로 재미있는 기사! procps 패키지를 살펴보고 top 명령이 / proc / loadavg 파일에서 값을 가져오고 이것이 getloadavg () 함수의 결과와 동일한 지 확인합니다.
Angelos Asonitis

@AgelosAssonitis로드 평균을 문서화하기위한 확실한 장소는 커널 소스 트리입니다. POSIX는 CPU로드가 무엇인지 정의하지 않으며 "로드 평균"이라는 단어는 언급하지 않습니다. topuptime유틸리티 POSIX 유틸리티가 아니며 getloadavg()라이브러리 함수는 (그것이 비록 BSD의 혈통을 가지고) POSIX에 정의되어 있지 않습니다.
Kusalananda

그래서 내가 수집 한 것으로부터 커널 소스 자체가 아닌 다른 값의 형성을 이해하는 공식적인 문서는 없습니다. 맞습니까? 도착하기 전에, 나는 여전히 topprocfs 파일 loadavg에 제시된 값을 묶어야합니다 ...
Angelos Asonitis

7

로드 평균은 일반적으로 커널에 의해 계산됩니다. 라이브러리 호출 top과 같은 응용 프로그램 을 사용하여이 응용 프로그램 에 액세스 uptime할 수 있습니다 getloadavg(3)(다른 Unix 버전에서 이식 가능해야 함). Linux에서는 일반적으로에서 읽습니다 /proc/loadavg. FreeBSD에서는 시스템 호출입니다.

예를 들면 다음과 같습니다.

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  double ld[3];

  int i=getloadavg(ld,3);
  printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}

uptime그리고 top모두 자신의 데이터를 얻을 수있는 유사한 전화를합니다.

이제 1/5/15 분로드 평균은 실행 큐의 프로세스 수입니다. 다른 운영 체제 이를 다른 방식으로 계산할 수 있습니다 . 가장 큰 차이점은 일반적으로 I / O를 기다리는 프로세스 (예 : 디스크에서 차단됨)가 실행 가능한 것으로 계산되는지 여부입니다. 리눅스에서는 그렇습니다.

따라서로드 평균 3.4는 샘플 창 내의 실행 큐에 평균 3.4 개의 프로세스가 있음을 의미합니다 (1, 5, 15 분).

로드 평균이 높다고해서 반드시 과부하 된 서버를 의미하는 것은 아닙니다. 코어가 16 개인 경우 스트레스없이로드 평균이 16이 될 수 있습니다. 또한 많은 응용 프로그램 fork()호출로 인해 많은 수의 프로세스가 생성 / 파기되어로드 평균이 높아지지만 서버 성능에는 큰 영향을 미치지 않습니다. % CPU busy와 같은 다른 메트릭과 함께 가이드로만 사용해야합니다.


4

로드 평균은 특정 도구 또는 분포에 특정한 것이 아니며, 커널에서 제공하는 측정치 또는보다 정확하게 스케줄러이므로 분포 독립적 측정입니다. 측정은 proc 파일 시스템 내부에 기록됩니다/proc

그것의 해석에, 부하 평균 통계는 없다 할 방법 하드 CPU가 작동하지만 작업량 요구의 표시. 실행 가능 또는 중단 불가능한 상태의 프로세스 수를 직접 측정하기 때문에 실제로 어떤 것도 곱할 필요가 없다고 생각합니다.

다음 두 사람이 페이지를 체크 아웃하십시오 : getloadavg(3)그리고 uptime더 많은 정보를 얻을 수 있습니다.

로드 평균 메트릭은 처음에는 이해하기 어려운 개념 일 수 있습니다. 많은 사람들이 CPU가 얼마나 열심히 작동하고 있는지를 나타내는 것으로 생각하지만 실제로는 그렇지 않습니다.


1
그러나 getloadavg()함수 설명에 설명 된로드 평균이 toprhel 의 명령이 표시 하는로드 평균과 동일 하다는 것을 절대적으로 확신 합니까? procps-3.2.8 패키지의 tar되지 않은 내용 (명령으로 top -v표시됨) 에서 전체 텍스트 검색을 수행했으며 getloadavg () 함수에 대한 언급이 없기 때문에 이것을 묻습니다! 따라서 top은 아마도 다른 방법으로로드 평균을 계산할 것입니다.
Angelos Asonitis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.