AIX에서 sar의 출력 이해


11

SAR에서 가져온 일부 데이터를 이해하려고합니다. 이것에 관한 세 가지 주요 질문이 있습니다. 궁극적으로 서버 클러스터 전체에서 샘플링 간격마다 유휴 상태 인 CPU 수를 결정하고 싶습니다.

  1. 많은 CPU가 모든 항목에 나타나지는 않습니다. 이것이 예상되는 것이며 정확히 무엇을 의미합니까? # 2와 관련이 있습니까?
  2. 사용되지 않는 라인이 있습니다 (CPU = U). 문서는 "U는 시스템 전반에 걸쳐 사용하지 않은 용량을 나타냅니다"라고. "시스템 전체 사용되지 않은 용량"에 대한 정확한 정의 나 전혀 정의를 찾을 수 없습니다. "사용되지 않은 용량이 70 % 유휴 상태입니다."와 같은 줄을 해석하는 방법을 잘 모르겠습니다.
  3. 마지막으로 줄 -이나 all선이 어떻게 계산 되는지 잘 모르겠습니다 . 나는 그것이 모든 CPU의 평균이라고 생각하지만 모든 CPU에서 수학을 할 때 그 라인에있는 것과는 완전히 다른 대답을 얻습니다. 아무도 그 계산에 정확히 무엇이 들어 있는지 말해 줄 수 있습니까? SAR에 대한관련 질문을 자세히 보면 system-wide유휴 백분율은 각 CPU의 유휴 백분율과 'physc'값의 곱의 합인 것으로 보입니다 . 불행히도, 나는 physc또는 entc % (1이 있다고 가정)가 없으므로 내 데이터로 이것을 확인할 수 없습니다. 그것이 맞다면, physc유휴 백분율을 진정으로 이해하기 위해 값이 필요하다는 것을 의미 합니까?

다음은 내가보고있는 예입니다. 이것들은 모두 같은 날입니다.

CPU | Idle    CPU | Idle    CPU | Idle
----------    ----------    ----------
0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      12  | 0       12  | 38
10  | 33      16  | 12      16  | 37
11  | 64      20  | 3       20  | 42
12  | 6        U  | 95       U  | 97
13  | 6        -  | 15       -  | 85
14  | 6       
15  | 6       
16  | 12      
17  | 15      
18  | 62      
19  | 69      
20  | 7       
21  | 7       
22  | 6       
23  | 7       
 U  | 80       
 -  | 15       

case 1: avg(24): 22
case 2: avg(12): 42
case 3: avg(12): 48

이 데이터는 sar -P ALL 1 1다음 을 실행하는 스크립트에 의해 생성됩니다. 그런 다음 awk 명령을 실행합니다. 나는 awk에 좋지 않지만 이것들은 분명히 중요한 부분입니다.

필터: /System|AIX|^$|%/ {next}

파싱 ​​: {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)}

이것은 내가 awk에 대해 거의 이해하지 못하고 출력의 예에서 보는 것을 기반으로 올바른 것으로 보입니다.

사례 2에 대해 누락 값이 모두 0이라고 가정하면 평균은 21이며 사례 1과 다소 일치하는 것으로 보입니다. 그러나 사례 3에 대해 가정하면 24 %를 얻습니다. 이는 85 %와 완전히 일치합니다. 전체 CPU 유휴에 대해 sar이 제공 한 백분율 값.

하루 종일 캡처 (30 초마다)에 대한 그래프는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

'시스템 전체'유휴 시간이 거의없는 경우 평균 CPU 유휴와 '시스템 전체'유휴 간의 상관 관계는 거의 완벽합니다. 그러나 '시스템 전체'유휴 시간이 증가함에 따라 상관 관계가 훨씬 약해집니다. 이것이 결정 론적 기계라는 가정에 따라 작업하면 내가 가진 데이터가 전체 그림을 제공하지 않는다는 것을 알 수 있습니다. 하지만 얼마나 신경 쓰나요?

각 지점에서 일부 CPU가보고되지 않는 이유를 완전히 이해하지 못하지만 누락 된 CPU는 위의 예와 같이 고르게 분산되지 않습니다. 또한이 레드 북 을 읽으면 논리 CPU이어야하며 physc숫자가 없으면이 값으로 할 수있는 것이 많지 않다고 생각합니다. U다양한 방정식 에서 값 을 사용하려고 시도했지만 합리적인 것을 찾지 못했습니다. 전체 유휴 비율을 액면가로 취할 수 있다는 것은 분명하지 않습니다.

참고 : sar 에서이 데이터를 캡처하는 데 문제가있는 것은 항상 반환 해야하는 경우 # 1에 대한 완전한 대답입니다.


출력을 얻기 위해 어떤 명령을 실행하고 있습니까? 표준 sar -P ALL출력 처럼 보이지 않습니다 .
Swiss

@Swiss 이것은 내가 쓰지 않은 스크립트에서 나온 것입니다. sar -P ALL 1 1awk를 호출 한 다음 CPU 번호와 사용자, 시스템, IO 대기 및 유휴 백분율을 구분하기 위해 awk를 사용합니다. 답변에 더 많은 정보를 추가하겠습니다.
JimmyJames

@Swiss 필자는 스크립트의 출력 결과를보다 잘 반영하도록 예제를 편집했습니다.
JimmyJames

sar -P ALL이 스크립트의 출력이 아닌 직접 의 출력을 제공 할 수 있습니까? 비표준 스크립트이므로 아무도 보지 않고 스크립트를 수행 할 수 없습니다.
Swiss

@Swiss 불행히도 나는 할 수 없습니다. 스크립트를 볼 수 있고 출력됩니다. 내가 명확히 할 수있는 것에 대한 설명에서 누락 된 것이 있습니까?
JimmyJames

답변:


4

제공 한 출력은 표준 sar -P ALL또는 sar -u출력 과 다릅니다 . 수동으로 형식을 지정했는지 또는 다른 도구를 통해 실행 중인지 확실하지 않지만이를 파악하기에 충분한 정보가 있다고 생각합니다.

다음은 맨 페이지에서 얻은 중요한 정보입니다. sar

참고 : SMP 시스템에서 활동이없는 프로세서 (모든 필드에 대해 0.00)는 비활성화 된 (오프라인) 프로세서입니다.

클러스터에서 실행 중이므로 SMP 시스템을 사용한다고 가정하는 것이 상당히 안전 해 보입니다.

예제 2와 3에서는 24 개 코어 중 12 개만보고 통계입니다. 매뉴얼 페이지에서 언급했듯이 이러한 코어가 비활성화되어 있다고 가정하면 통계가 의미가 있습니다.

비활성화 된 코어를 나타 내기 위해 다음과 같이 데이터를 업데이트하겠습니다. -

0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      9   | -       9   | -
10  | 33      10  | -       10  | -
11  | 64      11  | -       11  | -
12  | 6       12  | 0       12  | 38
13  | 6       13  | -       13  | -
14  | 6       14  | -       14  | -
15  | 6       15  | -       15  | -
16  | 12      16  | 12      16  | 37
17  | 15      17  | -       17  | -
18  | 62      18  | -       18  | -
19  | 69      19  | -       19  | -
20  | 7       20  | 3       20  | 42
21  | 7       21  | -       21  | -
22  | 6       22  | -       22  | -
23  | 7       23  | -       23  | -

그런 다음 다음을 사용하여 평균을 계산할 수 있습니다 (이것은 내가 작성한 빠른 oneliner입니다. 더 나은 것을 쓸 수 있다고 확신합니다.)

$ awk '{idle = $3; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 22.208333  Cores: 24
$ awk '{idle = $6; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 42.000000  Cores: 12
$ awk '{idle = $9; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 48.250000  Cores: 12

예제 2와 3의 코어 수는 12이며 평균은 예제 출력에 표시되는 것과 일치합니다.

첫 번째 사례와 두 번째 사례 사이에서 CPU 코어의 절반이 비활성화 된 것처럼 보입니다.

질문에 대한 간단한 요약 :

  1. 데이터가 없으면 프로세서 코어가 비활성화 된 것입니다.
  2. U평균 라인은 다릅니다 U그 사람 페이지입니다. 는 U프로세서 ID 열에 표시한다 매뉴얼 페이지에 언급.
  3. 제공 한 출력이 표준 sar출력과 다르며 평균 라인 에서 U또는 무엇을 참조하는지 결정하기에 충분한 정보가 없습니다 all. 첫 번째 숫자는 활성 코어에서 유휴 상태 인 것으로 보입니다.

"예제 2와 3의 코어 수는 12 개이며 평균은 예제 출력에 표시된 것과 일치합니다." 죄송합니다, 명확하지 않을 수 있습니다, 나는 숫자에서 평균을 계산했습니다. 그것은 sar에서 나오지 않습니다. Uall값은 선으로 특별 행정구에서오고있다. 나는 그들이 내가 이해 한 것과 CPU 값과 근본적으로 다르기 때문에 내 대답에서 파산했습니다.
JimmyJames

코어가 비활성화되면 왜 '시스템 전체'유휴 시간이 사례 2보다 사례 2보다 훨씬 적습니까? 동일한 12 CPU에서 거의 동일한 평균 유휴 시간을 가질 수 있지만 시스템 전체의 유휴 시간이 완전히 다른 방법을 이해하려고 노력하고 있습니다.
JimmyJames

기계에 일정한 부하가 걸리면 모든 프로세서의 출력이 나타납니다. 이것들은 당신이 이것들이 비활성화 된 것이 맞다는 것을 나에게 제안 할 것입니다. 시스템 전체 유휴 상태가 비활성화되지 않은 CPU의 유휴 상태와 어떻게 관련되는지 고민하고 있습니다.
JimmyJames

문제를 명확히하기 위해 몇 가지 변경 사항으로 질문을 업데이트했습니다. 따라서 사례 2를 살펴보면 12 CPU가 비활성화되어 있고 sys-idle 백분율이 24 개를 모두 기준으로하면 유휴 %가 50 % 아래로 떨어질 수 없습니다. 따라서 15 %가 있다고 가정하면 sys idle %는 비활성화 된 CPU를 무시해야합니다.
JimmyJames
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.