"top" 출력의 "부하 평균"을 어떻게 해석합니까? 배포판은 모두 동일합니까?

"top" 출력의 "부하 평균"을 어떻게 해석합니까? 배포판은 모두 동일합니까?

Red-Hat 기반 Linux의 출력이 Debian 기반 Linux에서 다르게 해석될 수 있는지 궁금합니다.

질문을 더욱 구체적으로 만들기 위해 제가 추구하는 것은 topRed-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 배포판에는
    Ubuntu에도 로드 평균을 설명하지 않는 "작업" 버전이 있습니다.
    http://manpages.ubuntu.com/manpages/precise/man1/top.1.html

  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 topRHEL하나는 in 또는 in 을 통해 볼 수 있듯이 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. 공식 웹사이트에서 다운로드한 버전에서는 이 도구가 (Linux 기능을 활용하지 않고) 파일에서 직접 정보를 가져오는 procps-3.2.8것 같습니다 .uptimeprocfs/proc/loadavggetloadavg()
  3. 이제 이 top명령에서는 해당 기능도 사용하지 않습니다 getloadavg(). 나는 이것이 실제로 로드 평균을 표시하는 도구와 top동일한 작업을 수행하는지 확인했습니다. 실제로 파일에서 정보를 가져오는 uptime도구의 기능을 호출합니다 . uptime따라서 모든 것이 파일을 가리킵니다! 따라서 생성된 파일을 정확하게 이해하기 위해서는 커널 코드를 읽어서 파일이 어떻게 작성되는지 이해해야 합니다.procfs/proc/loadavg

    /proc/loadavgload averagetoploadavg

답변 중 하나에는 의 세 가지 가치를 이해하기 쉽게 설명하는 훌륭한 기사도 나와 있습니다 loadavg.
따라서 모든 답변이 똑같이 유용하고 도움이 되지만 해당 기사에 대한 답변을 표시하겠습니다. http://www.linuxjournal.com//article/9001내 질문에 대한 "답변"으로. 귀하의 기여에 감사드립니다!

또한 질문에서최고 및 평균 부하 이해loadavg, 계산 위치를 가리키는 커널 소스 코드에 대한 링크를 찾았습니다. 왜냐면 그것이 어떻게 작동하는지 설명하는 거대한 코멘트가 있는 것 같기 때문입니다. 그리고 코드의 이 부분도 마찬가지입니다 C!
코드에 대한 링크는 다음과 같습니다.http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
다시 한번 말씀드리지만 저는 어떤 형태의 표절도 하려는 것이 아닙니다. 단지 완전성을 위해 이 내용을 추가하는 것뿐입니다. 반복합니다. 커널 코드에 대한 링크는 아래 답변 중 하나에서 찾았습니다.최고 및 평균 부하 이해.

답변1

CPU 로드는 실행 대기열의 길이, 즉 실행을 기다리는 프로세스 대기열의 길이입니다.

uptime명령을 사용하면 일반적으로 표시되는 마지막 1분, 마지막 5분, 마지막 15분 동안의 실행 대기열의 평균 길이를 볼 수 있습니다 top.

로드 값이 높다는 것은 실행 큐가 길다는 것을 의미합니다. 값이 낮다는 것은 길이가 짧다는 것을 의미합니다. 따라서 1분 로드 평균이 0.05라면 해당 1분 동안 실행 큐에 실행 대기 중인 프로세스가 평균 0.05개 있었다는 의미입니다. 그것은 백분율이 아닙니다. 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".

답변2

부하 평균은 일반적으로 코어에 의해 계산됩니다. top및 같은 응용 프로그램은 라이브러리 호출을 uptime사용하여 액세스 할 수 있습니다 getloadavg(3)(즉, 다른 Unix 버전 간에 이식 가능함을 의미). Linux에서는 일반적으로 read 가 발생합니다 /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를 기다리는 프로세스(예: 디스크에서 차단됨)가 실행 가능한 것으로 계산되는지 여부입니다. 이는 Linux에서도 마찬가지입니다.

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

그러나 로드 평균이 높다고 해서 반드시 서버에 과부하가 걸렸다는 의미는 아닙니다. 코어가 16개라면 로드 평균은 스트레스 없이 16이 될 수 있습니다. 또한 많은 수의 애플리케이션 호출이 있을 수 있으며 fork()이로 인해 많은 수의 프로세스가 생성/삭제되어 로드 평균이 높아지지만 서버 성능에는 큰 영향을 미치지 않을 수 있습니다. %CPU Busy와 같은 다른 측정항목과 함께 가이드로만 사용해야 합니다.

답변3

로드 평균은 특정 도구나 배포판에 특정한 것이 아니라 커널 또는 더 정확하게는 스케줄러에서 제공하는 측정값이므로 배포 독립적인 측정값입니다. 측정 결과는 proc 파일 시스템에 기록됩니다./proc

해석에 따르면 부하 평균 측정항목은 다음과 같습니다.아니요CPU의 작동 강도와 수행해야 할 작업량을 나타냅니다. 실행 가능하거나 중단할 수 없는 상태의 프로세스 수를 직접 측정하기 때문에 실제로 이를 곱할 필요는 없다고 생각합니다.

자세한 내용은 getloadavg(3)다음 두 매뉴얼 페이지를 살펴보십시오.uptime

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

관련 정보