io 사용량이 많은 프로세스가 제대로 실행되고 있는지 확인하는 방법

io 사용량이 많은 프로세스가 제대로 실행되고 있는지 확인하는 방법

저는 현재 과학 컴퓨팅을 위한 컴퓨터 클러스터를 관리하고 있습니다. 클러스터의 일부 프로세스에는 과도한 IO 사용량이 필요합니다. 이제 나는 그러한 과정을 발견했습니다.

  1. 상태는 DOWN과 RUN 사이에서 빠르게 변하고 CPU 사용량은 1%에서 100% 사이에서 빠르게 변합니다.
  2. 출력 에서 topiowait는 0%이고 유휴 상태는 약 90%입니다.

이 프로세스에 문제가 있을 수 있다고 생각하는데 프로세스 소유자는 아직 디스크에 데이터를 쓰고 있다는 점에서 제대로 실행되고 있다고 주장합니다.

더 많은 정보:

  1. 프로세스가 /home에 마운트된 원격 디스크에 데이터를 쓰고 있습니다.
  2. 이 프로세스는 약간 수정된 코드를 기반으로 합니다. 원본 소프트웨어는 멀티스레딩이 가능하지만 엄청난 양의 메모리가 필요합니다. 수정한 코드는 더 많은 디스크를 사용하고 더 적은 메모리를 사용하지만 코드를 수정한 사람은 멀티스레딩에 대해 전혀 모릅니다.
  3. 소규모 테스트에서는 코드가 올바른 결과를 제공할 수 있음을 보여줍니다.

질문:

  1. 프로세스가 CPU를 100% 사용하지 않는 이유는 무엇이며, 그것이 io를 기다리기 때문이라면 왜 iowait가 0%입니까?
  2. 프로세스에 문제가 있는지 여부와 문제 유형은 어떻게 판단합니까?

답변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 시간으로 보고되지 않을 수도 있지만 페이지를 디스크에 플러시할 때 많은 디스크를 사용하는 시스템 프로세스로 나타날 것이라고 생각합니다.

관련 정보