프로세스가 CPU, 메모리 또는 디스크에 바인딩되어 있는지 어떻게 알 수 있습니까?
부두가 필요합니다. 따라 다릅니다. 예:
메모리가 충분하고 디스크가 너무 바쁘지 않으면 아마도 가능 CPU 바운드입니다. CPU 사용량과 경계가 100 % 인 경우 CPU 범위를 확인하십시오. 그렇지 않은 경우 구현에 인공 병목 현상이 발생합니다. 예 : 듀얼 코어 CPU에서는 단일 스레드 프로세스가 CPU 사용량의 50 %를 초과하지 않습니다.
CPU와 메모리를 사용할 수 있지만 디스크 사용량이 많거나 IO 대기 시간이 길면 IO가 바인드되었을 가능성이 높습니다. 디스크 추가 (RAID?)가 도움이되는지 확인하십시오.
위의 어느 것도? 사용 가능한 메모리를 확인하십시오.
충분한 메모리? 프로세스 자체에 인공적인 병목 현상이있을 수 있습니다. 즉 누군가 누군가 잠을 제거하는 것을 잊었을 수 있습니까 (1)? Naah는 그렇게 쉬운 일이 아닙니다. ;)
성능에 민감한 제품을 다루는 대부분의 회사에서 성능 엔지니어를위한 전체 실험실이있는 이유가 있습니다!
Sar, vmstat, iostat, oprofile, lockstat, dtrace, 제품 별 성능 모니터링 도구 등과 같은 도구를 사용하여 성능 문제를 디버그하십시오.
iotop
을 (를) 확인하십시오. 유용 할 수 있습니다
여러 프로세스 통계 (메모리, CPU 사용량, I/O 등)를 실시간으로 확인하는 데 유용한 도구는 htop입니다. Sudhanshu가 명명 한보다 전문화 된 도구를 대체하지는 않지만 좋은 시작일 수 있습니다.
언급 된 다른 도구뿐만 아니라 _ps l PID
_를 실행하고 관련 프로세스 ID를 삽입하거나 top 또는 htop에서 STATE 및 WCHAN 열을 확인하십시오.
D (디스크 용) 상태이면 파일 IO를 수행하는 것입니다. 많은 파일을 읽거나 많은 메모리를 사용하고 스왑하기 때문일 수 있습니다. WCHAN 열은 내부에 어떤 커널 기능이 있는지 알려줍니다. 인터넷 검색을하거나 여기에서 질문하면 의미를 알 수 있습니다.
R (실행) 상태 인 경우 사용자 공간에서 CPU를 사용하고 있습니다. 즉, 그 시점에 CPU가 바인드 된 것입니다.
S (잠자기) 상태 인 경우 인터럽트 가능한 시스템 호출 내부에 있습니다. 이는 실제로 잠자고 있거나 네트워크 트래픽 또는 잠금 대기와 같은 작업을 수행하고 있음을 의미 할 수 있습니다. 다시 말하지만, 특정 wchan을 보면 더 많은 것을 알 수 있습니다.
top
을 실행하고 CPU 사용량 라인을보십시오. 사용자 %가 높으면 CPU에 바인딩되어 있음을 나타냅니다. 대기 %가 높으면 IO 바운드임을 나타냅니다.