Linux 또는 Unix 운영 체제에서는 System load
다음 텍스트가 표시됩니다.
이것이 무엇을 의미하는지, 그리고 CLI 명령을 사용하여 시스템 부하 %를 추출하는 방법을 알려주실 수 있는 분 계십니까?
System load: 6.84
답변1
Unix 스타일 시스템 로드 값에 대한 Wikipedia 기사를 참조하세요. https://en.wikipedia.org/wiki/Load_(계산)
요컨대,만약에이것은 Unix 스타일 로드 평균입니다.나누다이 값을 시스템에서 사용 가능한 프로세서 코어 수로 나눈 다음100을 곱하다백분율 값을 가져옵니다.
실제로 Unix 스타일 로드 값은 특정 기간 동안 실제 실행 + 대기 중인 CPU 프로세스의 평균 수를 나타냅니다. 일반적으로 1분, 5분, 15분의 시간 창을 사용하여 세 가지 로드 값이 보고됩니다. Linux에서는 I/O를 기다리는 프로세스도 계산되지만 대부분의 Unix 시스템에서는 계산되지 않습니다.
로드 값이 사용 가능한 프로세서 코어 수보다 작으면 시스템이 평균 창 내에서 완전히 사용되지 않으며 더 많은 작업을 처리할 수 있음을 의미합니다. 작업량이 프로세서 처리 능력을 초과합니다.
대부분의 Unix 계열 시스템(Linux 포함)에서는 이 uptime
명령을 사용하여 다음과 같은 출력을 얻을 수 있습니다.
$ uptime
12:11:23 up 5:22, 1 user, load average: 0.04, 0.05, 0.01
이 단어 뒤에는 load average:
1, 5, 15분 시간 창에 대한 부하 값이 표시됩니다.
Linux /proc/loadavg
에서는 cat /proc/loadavg
.
Linux에서는 로드 평균을 다음과 같은 백분율로 변환할 수 있습니다.
#!/bin/sh
# uses the 5-minute load value
LOADVAL5=$(awk '{ print $2; }' < /proc/loadavg)
NUMCPUS=$(getconf _NPROCESSORS_ONLN)
echo "$LOADVAL5 * 100 / $NUMCPUS" | bc
물론 이 스크립트는 최적화되지 않았으므로 반복 실행에 적합하지 않습니다. 모니터링 시스템을 개발하는 경우 부하 비율을 계산하기 위해 외부 스크립트를 실행하는 대신 프로그램 코드에서 계산을 수행해야 합니다.
답변2
kernel/sched/loadavg.c
전역 부하 평균은 nr_running + nr_uninterruptible의 지수적으로 감소하는 평균입니다.
이것이 완벽한 답변입니다. 특히 nr_running과 nr_uninterruptible이 무엇인지 다음 질문으로 직접 연결되기 때문입니다.
나는 항상 백분율 사용을 주장해 왔으며 여전히 OP의 의미에서 백분율 사용을 주장했습니다. 그러나 "시스템 로드"에 대한 (Linux!) 기술적 답변은 다음과 같습니다.
이것숫자"R" 작업. 플러스 "D".
"R"은 실행 중이거나 대기 중입니다. 즉, 실행 대기열에 있습니다. "D"는 (특수) 대기 상태입니다. Linux는 적어도 CPU가 아닌 "시스템" 로드("대부분 IO")를 나타내기 때문에 이러한 작업을 포함하지만 여기서는 중요하지 않습니다. 단지 "시스템 로드"를 나타냅니다. 직접적으로 "CPU 로드"가 아닙니다.
따라서 CPU를 놓고 경쟁하는 작업/스레드의 원시 수입니다.
또는 실행 중인 작업의 평균 비율입니다.
평균적으로... 1분, 5분, 15분의 잘 정의된 기간 중 하나 내에 있습니다. 여기에 또 다른 블록을 삽입했는데, 실제로는
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */
/*
* a1 = a0 * e + a * (1 - e)
*/
static inline unsigned long
calc_load(unsigned long load, unsigned long exp, unsigned long active)
{
unsigned long newload;
newload = load * exp + active * (FIXED_1 - exp);
if (active >= load)
newload += FIXED_1-1;
return newload / FIXED_1;
}
이제 일반 크기 HZ "333"(100-1000 사이)의 경우 1666+1이 됩니다. 1분 평균의 경우 5초 샘플링 속도는 매우 좋습니다. 분당 평균 12개 샘플입니다.
이 주석은 a1 = a0 * e + a * (1 - e)
전체적인 아름다움을 보여줍니다. 샘플링된 "a"("active"에 대해서는 아래 calc_load() 참조)가 a0(load)과 결합되어 a(newload)를 형성합니다.
FIXED_1이 어떤 용도로 사용되는지 알 수 없습니다. 내가 받아요"1.0을 고정점으로"라는 메시지로 다음과 같이 질문합니다.
그렇다면 시스템 로드 비율은 어떻습니까?
단순화를 위해 CPU는 한 번에 하나의 스레드만 처리할 수 있다고 말합니다.
약간 복잡합니다. "쿼드 코어" "멀티/하이퍼스레딩/리핑" CPU는 코어당 8개 이상의 CPU일 수 있습니다. 이것이 "SMP" 구현입니다.
더 중요한 것은 쿼드 코어가 여전히 8개가 아닌 4개라는 점입니다. Intel은 하이퍼 스레딩을 통해 120% 일반적인 이점을 얻을 수 있다고 주장하는데, 이는 그들이 말하는 것과 정확히 같습니다. 200%는 아닙니다.
따라서 로드 평균 6.8(위 쿼드 코어/cpu0-7 시스템의 백분율로 표시)은 다음을 의미합니다.
해당 기간(마지막 1.5분 또는 15분) 동안 평균 거의 7개의 스레드가 실행되었습니다. 8개의 CPU를 사용하면 시스템 로드가 87%로 보입니다. 그러나 CPU 8개 중 4개는 "하이퍼" 스레드이며 처리량을 희생하면서 병렬화되었습니다.
6.8은 100%보다 약간 높지, 100% 미만은 아닙니다.
이러한 모든 작업-코어 매핑 문제를 방지하기 위해 로드 평균은 원시 "R"(및 "D") 상태 수입니다.
위의 예에서 x86의 경우 "100%"에 대한 참조로 4를 사용합니다. 즉, 어떤 스레드도 기다릴 필요가 없으며 코어가 몇 나노초라도 유휴 상태가 되는 지점이 없습니다. "Well Balanced"가 바로 그것입니다. 추가 로드로 인해 CPU에 약간의 과부하(100% 이상, 4 또는 8 이상)가 발생할 수 있습니다.
2x 4코어 시스템에는 9개의 실행 스레드가 있기 때문입니다. 그러면 그 중 하나가 특정 시간에 실행될 수 없습니다. 따라서 이론적으로 코어 수와 코어당 nr배 스레드 사이에 100% 선을 그릴 수 있습니다.
이것이 바로 제가 이 질문에 찬성표를 던진 이유입니다. 나는 "백분율" 해석에 대해 너무 방어적이라는 이유로 내 자신을 때릴 수 밖에 없습니다. 너무 틀려서가 아니라 매뉴얼 페이지와 커널 소스 코드에서 너무 명확하게 설명하는 데 너무 많은 시간을 낭비했기 때문입니다.
나는 아래의 모든 것을 그대로 두겠습니다. "참조, 본질적으로 백분율이기도 합니다"에 대해 약간 편견이 있을 수 있습니다.
추측해보세요: man uptime
몇 줄로 설명해보세요. 저는 여기서 10살짜리 아이처럼 백분율 계산에 대해 이야기하고 있습니다.
로드 평균은 시스템의 CPU 수로 정규화되지 않으므로 로드 평균 1은 단일 CPU 시스템이 항상 로드 상태임을 의미하고, 4 CPU 시스템에서는 시스템이 유휴 상태임을 의미합니다.75%의 시간.
telcoM
다음은 링크의 중앙 부분인 Wikipedia 기사 "Load"입니다.
예를 들어,설명할 수 있다로드 평균은 "1.73 0.60 7.98"안에 하나의-CPU 시스템은 다음과 같습니다.
- 마지막 순간에 시스템은73% 과부하평균적으로(1.73개의 실행 가능한 프로세스, 즉 평균 0.73개의 프로세스가 단일 CPU 시스템에서 대기해야 함)
- 마지막 5분 동안 CPU는공회전 시간의 40%일반적으로.
- 지난 15분 동안,시스템 과부하 698%평균(7.98개의 실행 가능한 프로세스, 즉 단일 CPU 시스템에는 평균 6.98개의 프로세스가 대기 중입니다).
다시 설명할 필요가 없습니다. 이 세 가지 예는 잘 선택되었습니다.
나는 링크와 그의 정확한 요약 때문에 telcoM에 투표하겠습니다.
그런데 "지수붕괴"는 알기 쉬우니 천천히 들어보면 좋을 것 같아요앉다소리굽쇠(또는...)는 완벽한 비교입니다.
uptime
이 세 가지 값을 제공하여 "지금"(지난 몇 초/분)의 모습, "최근"에 발생한 일(예: 지난 5분) 및 "요약"이 지난 5분임을 알려주기 때문에 가치가 있습니다. 20 분.
Wikipedia 예는 다음을 의미합니다.
현재 시스템 부하가 높습니다. 몇 분 전에는 값이 매우 낮았습니다. 그러나 그 전에도 몇 분 동안 지속되는 높은 부하 기간이 있습니다. 10분 동안 매우 높음이거나 5분 동안 매우 높음입니다.
3x3 행렬에서:
x_X
: wiki 예, 예: 100,0,255: 보라색-파란색: "오버로드" 다음에 "유휴" 다음에 "로딩"
Xx_
:255,100,0: 주황색: 공회전 후 과부하 후 부하
_xX
: 0,100,255: 청록색-파란색: 현재 유휴 상태, 로드 후, 과부하 후
x__
:100,0,0: 진한 빨간색: 로드 중, 15분 전 유휴 상태입니다.
___
: 검정색 : 완전히 유휴 상태
xxx
: 회색(또는 흰색) : 밸런스
XXX
: 흰색(또는 거친 흰색) : 밝게 빛나는
-->색이 없으면 지난 15분 동안 부하 변화가 없음을 의미합니다.
(아니요, 아직 bash 프롬프트 기능이 없습니다)
답변3
답변4
"top" 명령을 사용할 수 있습니다. 이를 통해 PID, 사용자, 사용된 CPU 등을 얻을 수 있습니다.
$ top
top - 15:12:59 up 4:43, 4 users, load average: 0.15, 0.32, 0.30
Tasks: 252 total, 1 running, 203 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 1.3 sy, 0.0 ni, 95.7 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8084528 total, 257360 free, 5410684 used, 2416484 buff/cache
KiB Swap: 8302588 total, 8198908 free, 103680 used. 1410824 availMem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND