실시간으로 내 디스크 I/O를 차지하는 앱이 정확히 무엇인지 보여주는 리눅스 명령어를 찾았습니다
내 Linux 배포판이나 설정에 상관없이, 일상적인 활동에서 어느 시점에는 성능 저하나 지연을 경험하기 시작합니다. 때때로, top을 사용할 때 CPU와 메모리 사용량이 정상으로 보이기 때문에 문제가 복잡해지기도 합니다.
저는 최근에 iotop을 사용해 보았고, 실시간으로 제 디스크를 읽거나 쓰고 있는 앱들을 보여주었으며, 이는 제가 성능 문제에 직면했을 때 보통 간과하는 부분입니다. iotop은 이제 리눅스 문제 해결을 위한 제 자주 사용하는 명령 중 하나입니다.
몇 초 만에 iotop 설치
설치하기는 간단하지만, 대부분의 가이드가 놓치는 한 가지 세부사항이 있습니다
Ubuntu나 Mint와 같은 Debian 기반 배포판에 iotop을 설치하려면 다음을 실행하세요:
sudo apt install iotop
Fedora에서는 sudo dnf install iotop를 실행하고, Arch에서는 sudo pacman -S iotop를 실행합니다.
이 도구에는 두 가지 변형이 있습니다: 일반 iotop(Python 기반)과 iotop-c(C로 작성됨)입니다. iotop-c는 더 새로운 버전이며, 일부 최신 Ubuntu 및 Debian 시스템에서 iotop를 설치하면 자동 기본값이 됩니다. 인터페이스만으로는 구분하기 거의 불가능하지만, iotop-c는 일상 사용에서 더 원활합니다. iotop-c를 제공하는 배포판에서는 일반적으로 그것이 더 나은 선택입니다.
iotop이 실제로 무엇을 말하고 있는지 이해하세요
실제로 디스크 압력을 보여주는 몇 가지 숫자
iotop 전체 인터페이스는 압도적일 수 있지만, 그 중 많은 부분이 중요하지 않을 수 있다는 것을 인식하면 해석이 쉬워집니다. 저는 일반적으로 진단을 위해 네 개의 열을 참고합니다:
- 디스크 읽기: 초당 읽은 바이트 수를 표시
- 디스크 쓰기: 초당 기록된 바이트를 표시
- IO%: 프로세스/스레드가 I/O(대기 + 스와핑)를 수행하는 데 소비한 시간의 비율
- 명령: 프로세스 이름을 표시합니다
나는 전체 디스크 활동을 보는 것이 원인을 추적할 때 별로 도움이 되지 않기 때문에 상단 섹션을 자주 건너뛴다. 나는 아래 목록을 살펴보는 것이 더 나은 통찰을 제공하며, 가장 중요한 플래그는 -o와 -a이다. -o를 사용하면 현재 I/O를 수행 중인 프로세스만 포함한 보다 간소화된 목록을 얻을 수 있다. -a는 내가 iotop을 시작한 이후 읽거나 쓴 바이트의 총계를 볼 수 있는 누적 모드로 이동하게 한다.
제 진단의 대부분은 -o 플래그로 이루어집니다. -a는 문제가 간헐적으로 발생하거나, 가끔씩 끊김이 있거나, 파일을 열 때 잠시 느려지거나, iotop의 실시간 뷰에서 아무 것도 찾지 못할 때 최후의 수단입니다.
아치
정확한 프로세스를 잡기 위해 iotop을 사용하는 방법
디스크 활동을 명확한 답변으로 바꾸는 실제 워크플로우
시스템이 느려졌을 때 iotop이 필요하다는 것을 깨달았습니다. 제가 사용하던 일반적인 시스템 모니터로는 문제의 원인을 잡을 수 없었기 때문입니다. 설치 후에 다음 명령어를 실행했습니다: sudo iotop -o -d 2몇 초 만에 한 프로세스가 상단에 고정되었습니다. 패턴을 잡기 쉽게 하려면 새로고침 속도를 늦추는 것이 좋습니다(명령어에서 -d 2가 하는 역할이 바로 그것입니다). 이 프로세스를 관찰했을 때, 새로고침 주기 동안 지속적인 디스크 쓰기가 발생하는 것을 확인했습니다. 특히 눈에 띈 것은 지속 시간인데, 짧은 스파이크는 정상입니다.
내 브라우저에는 지속적으로 디스크에 메가바이트를 쓰는 프로세스가 있었고, 이 관찰을 통해 다른 가능한 원인을 배제할 수 있었습니다. 다른 경우에는, 제가 긴 스파이크를 일으키는 다른 프로세스를 잡을 수 있었습니다:
- 백업 작업(rsync)이 꾸준히 기록 중
- 패키지 관리자가 업데이트를 가져오는 중
- 예상보다 많은 로그를 작성하는 로깅 서비스
일반적인 경험 법칙은 프로세스가 상단에 머물면서 여러 새로 고침 주기 동안 I/O를 생성하는 것을 발견하면 조사하는 것입니다. iotop은 활동과 정확한 이름을 모두 보여주기 때문에 추측을 없애줍니다.
범인을 찾으면 무엇을 해야 하는가
아무 것도 부수지 않고 가시성을 행동으로 전환하세요
나는 디스크에 많은 양을 쓰고 있는 프로세스를 즉시 종료하지 않는다. 사실, 내가 취하는 정확한 조치는 해당 프로세스가 무엇인지에 따라 달라진다. 문제가 되는 것이 사용자 애플리케이션일 경우, 애플리케이션의 설정을 조정하거나 완전히 종료하는 것이 합리적이다. 또한 어떤 것이 그 행동을 유발하는지 조사할 수도 있다. 브라우저의 경우, 확장 프로그램이 급증을 일으키거나 공격적인 캐싱이 원인일 수 있다.
하지만 제가 익숙하지 않은 프로세스라면 바로 종료하지 않습니다. 대신 구글 검색을 통해 더 알아보고 종료해도 안전한지 확인하는 것을 선호합니다.
또한, 상단에 보이는 모든 프로세스가 예측 불가능한 행동의 신호는 아닙니다. kworker와 jbd2 같은 커널 스레드는 정상일 수 있습니다—jbd2는 ext4 저널링과 관련되어 있으며, 많은 쓰기가 발생할 때 높을 수 있습니다; kworker는 여러 이유로 나타날 수 있는 일반적인 커널 스레드입니다. 프로세스를 확인하려면 lsof -p PID를 실행하여 접근하는 파일을 확인하세요. 이 정보를 iotop과 결합하면, 어떤 트리거가 있는지 알 수 있습니다.
iotop을 보완하는 도구
저는 iotop을 단독으로 사용하지 않습니다. 그것은 많은 디스크 I/O를 일으키는 프로세스를 보여줍니다. 하지만 상황을 이해하기 위해 다른 도구들과 함께 사용합니다:
|
도구 | 그것이 보여주는 것 | 언제 사용해야 하는지 |
|---|---|---|
아이오스탯 | 디스크/장치 통계 | 전체 디스크 부하 확인 |
lsof | 프로세스당 열 수 있는 파일 | 무엇이 액세스되는지 확인 |
htop | CPU 사용률 + I/O 대기 | 시스템 전체 맥락 가져오기 |
이 도구들과 함께 iotop을 사용하면 디스크 읽기 및 쓰기가 많은 정확한 파일을 추적할 수 있습니다. 대부분의 문제에서는 문제 해결을 더 깊이 할 필요가 없습니다. iotop은 이제 제가 터미널에서 실행하는 가장 엉뚱하게 유용한 명령 중 하나입니다.








