Linux(RHEL6.1)에서 디스크 쓰기 작업의 원인(또는 대상 파일)을 파일로 정리할 수 있는 방법이 있나요?

Linux(RHEL6.1)에서 디스크 쓰기 작업의 원인(또는 대상 파일)을 파일로 정리할 수 있는 방법이 있나요?

나는 PHP 기반 응용 프로그램(Apache)이 있는 가상 머신을 가지고 있는데, 디스크 활동을 볼 때 Apache가 실행 중일 때 170kbps의 지속적인 쓰기가 있습니다.

로드를 적용하면 서버 성능은 CPU에 제한되지만 이는 20-30배의 디스크 쓰기 IO 점프와 직접적인 관련이 있는 것으로 보입니다. CPU 사용량 그래프는 쓰기 디스크 액세스 그래프를 반영합니다.

어떤 아이디어가 있나요?

답변1

두 가지 권장사항:

아이오톱명령 과 같은 형식으로 실시간 I/O 사용량을 보여주는 편리한 프로그램입니다 top. 이는 모든 I/O를 수행하는 스크립트/바이너리를 식별하는 데 도움이 됩니다. 최신 커널에는 이미 설치되어 있을 수도 있지만 표시되지 않는 경우 yum에서 RHEL에 제공할 수도 있습니다.

lsofI/O 문제 해결에도 도움이 됩니다. 열려 있는 모든 파일이 나열됩니다.

업데이트

"지속적인" 디스크 활동이 있는 경우 iotop어떤 프로세스가 원인인지 알려주어야 합니다. I/O 트랜잭션 기록 관련: 대부분의 Linux 배포판 어디에도 IO 기록이 기록되지 않는다고 생각하지만 cron 작업을 추가할 수 있습니다.

루트로서 crontab을 열고 crontab -e다음 두 줄을 추가합니다.

* * * * * /bin/date >> /var/log/iotop; /usr/local/bin/iotop -bot --iter=3 -q >> /var/log/iotop
* * * * * /bin/date >> /var/log/lsof; /usr/bin/lsof -b -w >> /var/log/lsof

매분마다 덤프 iotop하고 lsof로그에 출력합니다. 파일이 모든 공간을 차지하지 않도록 각각에 대해 logrotate 스크립트를 추가하십시오. 예:

someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
  rotate 3
  weekly
  compress
  missingok
  notifempty
}

답변2

관련 없는 백그라운드 작업이 php가 사전 컴파일된 /tmp 디렉터리의 내용을 삭제하는 것으로 보입니다. 결과적으로 PHP 사전 컴파일 프로세스가 다시 시작되어 지속적인 디스크 활동이 발생했습니다.

관련 정보