프로세스가 CPU, 메모리 또는 디스크 바운드인지 어떻게 알 수 있습니까?


42

프로세스가 CPU, 메모리 또는 디스크에 바인딩되어 있는지 어떻게 알 수 있습니까?


그놈 GUI를 사용하는 경우 시스템 모니터 애플릿을 패널에 추가 할 수 있습니다. 설정에서 손실 된 사이클을 IO-Wait으로 설정하여 흰색으로 표시하고 메모리, CPU 및 디스크 읽기 / 쓰기 그래프를 표시하도록 설정할 수 있습니다. 일반적으로 기본 그래프 색상을 변경하여 사용자 / OS 메모리와 디스크 읽기 / 쓰기를 쉽게 구분할 수 있습니다. 실제 솔루션은 아니지만 답변에 언급 된 모든 도구와 함께 사용하는 것이 편리합니다.
제레미

1
@ luis-alvarado 나는이 질문이 유용하지 않다는 것에 동의하지 않지만, 이것이 OverOver 등에 더 잘 맞을 것이라고 주장합니다. 나는 해결책을 찾기 위해 여기에 왔습니다.
skeggse

질문과 관련된 문제는 실행 환경을 고려하지 않는다는 것입니다. 작업 / 프로세스의 호스트 구성 요소 병목 현상을 발견하는 데 가장 효과적인 방법은 작업의 런타임, 실행 환경, 호스트 OS, 하드웨어 등에 밀접하게 연결되어 있으며 각 구성 요소가이를 검사하는 데 사용할 수있는 툴링과 밀접한 관련이 있습니다. 일부 런타임 (Erlang 런타임 또는 IBM의 JVM)은 전체 환경에 걸쳐서이를위한 심도있는 도구를 가지고 있으며, 다른 런타임에는 툴링이 전혀 없으며 htop / iotop 등을 기반으로 교육 된 추측을 할 수 있습니다. 보여줄 수 있습니다.
zxq9

답변:


19

부두가 필요합니다. 따라 다릅니다. 예:

  • 메모리가 충분하고 디스크가 너무 바쁘지 않으면 CPU 바운드 일 수 있습니다 . CPU 사용량과 경계가 100 % 인 경우 CPU 범위를 확인하십시오. 그렇지 않은 경우 구현에 인공 병목 현상이 발생합니다. 예를 들어 듀얼 코어 CPU에서 단일 스레드 프로세스는 CPU 사용량이 50 %를 초과하지 않습니다.

  • CPU와 메모리를 사용할 수 있지만 디스크 사용량이 많거나 IO 대기 시간이 길면 IO가 바인딩 된 것 같습니다. 디스크 추가 (RAID?)가 도움이되는지 확인하십시오.

  • 위의 어느 것도? 사용 가능한 메모리를 확인하십시오.

  • 충분한 메모리? 프로세스 자체에 인공적인 병목 현상이있을 수 있습니다. 예를 들어 누군가 수면을 제거하는 것을 잊었을 수 있습니까 (1)? Naah는 그렇게 쉬운 일이 아닙니다. ;)

성능에 민감한 제품을 다루는 대부분의 회사에서 성능 엔지니어를위한 전체 실험실이있는 이유가 있습니다!

sar, vmstat, iostat, oprofile, lockstat, dtrace, 제품 별 성능 모니터링 도구 등과 같은 도구를 사용하여 성능 문제를 디버그하십시오.


2
이 모든 것을 하나로 묶는 도구가 있습니까?
ssanj

일반적으로 아니요, 그러나 시스템에서 dtrace를 사용할 수있는 경우 (Solaris / FreeBSD / Mac OS X?)이를 사용하면 훨씬 멀리 갈 수 있습니다.
Sudhanshu

방금 도구의 성숙도에 대해 확실하지 않은 것을 제외하고는 Linux에 Systemtap (dtrace와 유사)이 있다는 것을 기억했습니다.
Sudhanshu

vmstat가 유용합니다.
제임스

12

체크 아웃 iotop, 유용 할 수 있습니다


iotop은 기본적으로 redhat에 설치되지 않았습니다
Mona Jalal

9

많은 프로세스 통계 (메모리, CPU 사용량, I / O 등)를 실시간으로 확인하는 데 유용한 도구는 htop 입니다. Sudhanshu가 명명 한보다 전문화 된 도구를 대체하지는 않지만 좋은 시작일 수 있습니다.


4

언급 된 다른 도구뿐만 아니라 ps l PID관련 프로세스 ID를 삽입하여 실행 하거나 STATE 및 WCHAN 열을 top 또는 htop에서 확인하십시오.

D (디스크 용) 상태이면 파일 IO를 수행하는 것입니다. 많은 파일을 읽거나 많은 메모리를 사용하고 스왑하기 때문일 수 있습니다. WCHAN 열은 내부에 어떤 커널 기능이 있는지 알려줍니다. 인터넷 검색을하거나 여기에서 질문하면 의미를 알 수 있습니다.

R (실행) 상태 인 경우 사용자 공간에서 CPU를 사용하고 있습니다. 즉, 그 시점에 CPU가 바인드 된 것입니다.

S (잠자기) 상태 인 경우 인터럽트 가능한 시스템 호출 내부에 있습니다. 이는 실제로 잠자고 있거나 네트워크 트래픽 또는 잠금 대기와 같은 작업을 수행하고 있음을 의미 할 수 있습니다. 다시 말하지만, 특정 wchan을 보면 더 많은 것을 알 수 있습니다.

프로세스의 "대기 채널"이란 무엇입니까?를 참조하십시오 .


2

topCPU 사용량 라인을 실행하십시오 . 사용자 %가 높으면 CPU에 바인딩되어 있음을 나타냅니다. 대기 %가 높으면 IO 바운드임을 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.