양호한 프로세스를 제외한 로드 평균을 구합니다.

양호한 프로세스를 제외한 로드 평균을 구합니다.

좋은 프로세스로 인해 발생한 부하를 제외하고 부하 평균을 반환하는 방법이 있습니까?

여러 Linux 서버의 로드를 확인하고 로드가 가장 적은 서버에 작업을 제출하는 로드 밸런싱 메커니즘이 있습니다. 모든 서버의 로드가 너무 높아 로드 밸런싱에서 서버를 선택할 수 없는 시나리오가 있습니다. 그러나 서버가 많은 프로세스를 처리하고 있으므로 평균 로드가 높음에도 불구하고 다른 작업을 제출하는 것이 여전히 "안전"하다는 것을 알았습니다.

설명이 필요하면 알려주시기 바랍니다. 감사해요.

답변1

psNice 값이 0 이하인 실행/실행 가능 상태의 모든 프로세스를 나열하는 스크립트를 직접 작성할 수 있습니다 . 사용해야 하는 특정 구문은 버전에 따라 다릅니다 ps. 다음과 같이 작동할 수 있습니다.

ps -eo state,nice | awk 'BEGIN {c=0} $2<=0 && $1 ~ /R/ { c++ } END {print c-2}'

실행되면서 ps모든 프로세스의 수준 state과 수준을 수집 nice하고 출력을 awk카운트 변수로 파이프 c하고 두 번째 열(nice)이 0보다 작거나 같고 첫 번째 열에 R(실행 가능을 의미)이 포함되면 이를 증가시킵니다. 완료되면 값에서 c2를 뺀 값을 인쇄합니다. ps 및 awk 명령은 명령 실행 중에 거의 항상 실행 가능한 것으로 간주되기 때문에 2를 뺍니다. 최종 결과는 스크립트가 실행되는 동안 실행될 수 있는 프로세스 수(자체 및 실행 중인 프로세스 제외)를 나타내는 숫자입니다. nicely이는 본질적으로 컴퓨터의 순간적인 로드입니다. 컴퓨터의 일반적인 로드 평균을 확인하려면 이 프로그램을 주기적으로 실행하고 1분, 5분, 15분에 걸쳐 평균을 계산할 수 있습니다.

답변2

좋아, 이것은 여기에 정말 오래된 스레드이지만, 누군가가 나처럼 이것을 필요로 할 경우를 대비해 여기에 내 자신의 2센트를 넣고 싶었습니다. 내 특별한 경우에는 백분율 결과가 필요하며 좋은 CPU 시간을 고려하고 싶지 않습니다.

나는 mpstat 유틸리티가 내 컴퓨터(debian)에 기본적으로 설치되어 있다는 것을 발견했습니다. 나는 이것이 대부분의 배포판에서 사용할 수 있는 상당히 기본적인 유틸리티라고 믿습니다.

실행 mpstat 2 1(2초 주기 - 2초 동안의 평균 CPU 사용량)은 다음과 같은 출력을 제공합니다.

Linux 3.16.0-4-amd64 (vm4)  12/14/2017  _x86_64_    (4 CPU)

11:51:51 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:51:53 PM  all    3.02   96.86    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:     all    3.02   96.86    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00

끝에 멋진 열과 무료 열이 포함되어 어떻게 설명이 잘 되어 있는지 알 수 있을 것입니다. 이 경우에는 nice가 정말 높다는 것을 알 수 있습니다.

약간의 awk 마법을 사용하려면 다음 명령을 사용하십시오. (명확성을 위해 분류되었습니다. 따라하실 수 있기를 바랍니다. 이것은 awk 튜토리얼이 아닙니다.)

mpstat 2 1| \
awk '$3 ~ /CPU/ { \
 for(i=1;i<=NF;i++) { \
  if ($i ~ /%nice/) {nice=i} \
  if ($i ~ /%idle/) {idle=i} \
 } \
} \
$3 ~ /all/ { print 100 - $nice - $idle }'

우리는 다음과 같은 결과를 얻습니다.

3.14

이것이 바로 우리가 원하는 것입니다. 총 백분율을 100으로 가정하고 여기에서 유휴 시간(이 경우 0.00)과 양호한 시간(이 경우 96.86)을 뺍니다. 보라, 우리는 결과를 얻었다.

내 예에서는 사용했지만 mpstat 2 1여러분도 사용할 수 mpstat 10 1있으며 결과는 지난 10초의 로드 평균이 됩니다. 단지 10초 동안 샘플링해야 하기 때문에 명령이 완료되는 데 10초가 걸린다는 것뿐입니다. 하지만 아이디어를 얻는 데 필요한 시간은 2초면 충분합니다.

답변3

난 그냥 그런 게 필요 해요. 대답은 다음에서 비롯됩니다.음코미타이나를 도와 주었다.

하지만 이 명령은 ps -e프로세스만 나열합니다. 로드는 프로세스에 병렬로 실행되는 많은 스레드가 있을 수 있다는 점을 고려해야 합니다. 모든 스레드를 나열하려면 -L호출에 옵션을 추가하는 것이 좋습니다 .ps

ps -eLo state,nice | awk 'BEGIN {c=0} $2<=0 && $1 ~ /R/ { c++ } END {print c-2}'

관련 정보