top 명령이 CPU 유휴 시간을 80% 이상 표시하지만 개별 프로세스가 CPU를 80% 이상 사용하는 이유는 무엇입니까?

top 명령이 CPU 유휴 시간을 80% 이상 표시하지만 개별 프로세스가 CPU를 80% 이상 사용하는 이유는 무엇입니까?

아래 스크린샷을 참조하세요. 강조 표시된 값은 80%에서 95% 사이로 점프합니다.

여기에 이미지 설명을 입력하세요.

보시다시피 postgres 프로세스가 CPU를 모두 차지하고 있지만 실제로는 대부분의 CPU가 유휴 상태로 간주됩니다. 머신의 CPU 유휴 상태가 가장 높습니다.

여기서 정보를 수집했어요Linux "top" 명령: us, sy, ni, id, wa, hi, si 및 st(CPU 사용량)는 무엇입니까?

그리고 여기:https://scoutapm.com/blog/understanding-linuxs-cpu-stats

후자의 소스는 데이터베이스가 '사용자 공간' 부분의 일부라고 구체적으로 말합니다. 이 불일치는 다른 CPU 코어와 관련이 있습니까?

업데이트:

1명령 을 수행한 후 누르면 top코어당 CPU 사용량이 표시됩니다.

여기에 이미지 설명을 입력하세요.

보시다시피 CPU 코어가 18개 있습니다. 그 중 하나는 Postgres에 의해 완전히 소모되었지만 나머지는 비어 있습니다. 상단 명령에 나열된 %CPU는 얼마나 많은 CPU를 사용하는지만 보여줍니다. 단일 코어? 내가 찾은 소스에서는 이것이 명확하지 않았습니다.

보다 솔루션 지향적인 접근 방식을 취하면 더 많은 코어를 추가해도 아무런 효과가 없습니다. 오히려 postgres 프로세스를 실행하는 CPU 크기를 늘리면 잠재적으로 사용하는 CPU 비율이 낮아질 수 있습니까?

답변1

보시다시피 postgres 프로세스가 모든 CPU를 차지하고 있습니다.

아니요, 단일 CPU 코어를 차지합니다. 이는 Unix/Linux에서 100%를 의미하며 심지어 정확하지도 않습니다.

Postgres 프로세스에는 각각 두 개의 서로 다른 CPU 코어의 50%를 차지하는 두 개의 활성 스레드가 있을 수 있으며 top/ ps는 100%를 보고합니다.

다른 CPU 코어와 관련이 있습니까?

예.

보시다시피, 그 중 하나는 포스트그레스에 의해 완전히 먹어치워졌지만 나머지는 비어 있습니다.

스크린샷에는 두 개의 사용 중인 CPU 코어가 있는데, 하나는 88%이고 다른 하나는 9%입니다. 그 합계는 posgres가 사용하는 것과 비슷합니다.

코어를 더 추가해도 아무런 효과가 없습니다.

그러나 특정 상황에서는 실행 중인 워크로드가 무엇이든 단일 스레드 CPU 성능에 의해 제한되는 것처럼 보이므로 정답입니다.

오히려 postgres 프로세스를 실행하는 CPU의 크기를 확장하면 잠재적으로 사용하는 CPU 비율이 낮아질 수 있습니까?

무슨 뜻인지 잘 모르겠습니다.

관련 정보