
저는 현재 과학 컴퓨팅을 위한 컴퓨터 클러스터를 관리하고 있습니다. 클러스터의 일부 프로세스에는 과도한 IO 사용량이 필요합니다. 이제 나는 그러한 과정을 발견했습니다.
- 상태는 DOWN과 RUN 사이에서 빠르게 변하고 CPU 사용량은 1%에서 100% 사이에서 빠르게 변합니다.
- 출력 에서
top
iowait는 0%이고 유휴 상태는 약 90%입니다.
이 프로세스에 문제가 있을 수 있다고 생각하는데 프로세스 소유자는 아직 디스크에 데이터를 쓰고 있다는 점에서 제대로 실행되고 있다고 주장합니다.
더 많은 정보:
- 프로세스가 /home에 마운트된 원격 디스크에 데이터를 쓰고 있습니다.
- 이 프로세스는 약간 수정된 코드를 기반으로 합니다. 원본 소프트웨어는 멀티스레딩이 가능하지만 엄청난 양의 메모리가 필요합니다. 수정한 코드는 더 많은 디스크를 사용하고 더 적은 메모리를 사용하지만 코드를 수정한 사람은 멀티스레딩에 대해 전혀 모릅니다.
- 소규모 테스트에서는 코드가 올바른 결과를 제공할 수 있음을 보여줍니다.
질문:
- 프로세스가 CPU를 100% 사용하지 않는 이유는 무엇이며, 그것이 io를 기다리기 때문이라면 왜 iowait가 0%입니까?
- 프로세스에 문제가 있는지 여부와 문제 유형은 어떻게 판단합니까?
답변1
The process is writing data to a remote disk mounted on /home
아마도 당신의 대답이 있을 겁니다. 프로세스 상태 D
가 아님아래에, 그것은방해받지 않는 잠일반적으로 일부 I/O를 완료해야 함을 의미합니다. 네트워크 공유가 있으므로 조건에 따라 I/O 대기로 표시되지 않을 수 있으며 시스템이 대기하는 동안 많은 CPU를 소비하지 않을 수 있습니다.
그러나 애플리케이션 작성 방식, 네트워크 또는 파일 서버 성능으로 인해 네트워크 공유가 느린 경우 귀하와 귀하의 애플리케이션 상황이 매우 느리게 진행됩니다.
애플리케이션이나 네트워크 공유가 이유인지 확인하는 방법은 무엇입니까? 단순함 - 다른 도구 및 기타 사용 패턴을 사용하여 네트워크 공유 성능을 테스트합니다. 많은 데이터를 /home에서 다른 위치로 앞뒤로 복사하고, 벤치마크를 실행하고 iozone
, 원시 네트워크 성능을 테스트하는 iperf
등의 작업을 수행합니다.
이것이 합당한 결과를 준다면 가서 애플리케이션이 무엇을 하고 있는지 살펴보세요.
하지만 그 이유는 다른 곳에 있는 경우가 많습니다. 시스템에 대해 아무것도 모르면 NFS 마운트 설정을 조정해야 할 것 같습니다. 그러나 현재로서는 NFS를 사용 중인지 알 수 없기 때문에 추측일 뿐입니다.
답변2
CPU가 바쁘지 않다면 프로세스는 아마도 외부 무언가를 기다리고 있을 것입니다. 나는 strace를 사용하여 어떤 시스템 호출이 가장 오래 걸리는지 살펴봄으로써 이를 이해할 수 있는 좋은 기회가 있다고 생각합니다.
그렇다면 프로파일러를 사용하여 코드가 수행하는 작업을 알아보세요.
코드에서 mmap'd IO를 사용합니까? 나는 그것이 귀하의 프로세스에 대해 iowait 시간으로 보고되지 않을 수도 있지만 페이지를 디스크에 플러시할 때 많은 디스크를 사용하는 시스템 프로세스로 나타날 것이라고 생각합니다.