오래된 파일을 삭제하면 속도가 느려지고 IO 성능이 "취소"됩니다.

오래된 파일을 삭제하면 속도가 느려지고 IO 성능이 "취소"됩니다.

오래된 파일을 정리하기 위해 find를 사용하고 있는데 파일이 너무 많습니다. 실행하는 데 몇 분/시간이 걸리고 다른 서버 프로세스에서는 IO 성능 문제가 발생합니다.

find -mtime +100 -delete -print

ionice를 사용해 보았으나 도움이 되지 않는 것 같습니다.

ionice -c 3 

1. 조회 작업 속도를 높이고 2. 다른 프로세스에 영향을 주지 않으려면 무엇을 할 수 있습니까? FS는 ext4인데.. 이런 작업에는 ext4가 적합하지 않나요? 커널은 3.16이고 스토리지는 RAID 1의 2x 1TB 7200rpm HDD입니다. 이제 610228개의 파일에 93GB가 있으므로 평균 152KB/파일입니다.

어쩌면 하나의 디렉토리에 너무 많은 파일을 저장하면 안 될까요?

답변1

게시됨과 같은 명령을 실행하면 찾은 모든 파일에 대해 작업이 수행 find됩니다 . rm성능면에서 이는 좋은 접근 방식이 아닙니다.

이 작업을 개선하려면 -execfind의 옵션을 사용하여 명령의 출력을 처리 할 수 있습니다 rm.

find -mtime +100 -exec rm {} +

+대체보다는 종료를 사용하는 것이 중요합니다 \;. 를 사용하면 +find는 rm단순 실행 시 처리할 수 있는 최대 파일 수에 대해서만 명령을 실행합니다. 종료 후에는 각 파일에 대해 하나의 명령이 \;실행되므로 동일한 문제가 발생합니다.findrm

ionice더 나은 성능을 위해 언급한 명령 에 이를 추가할 수 있습니다 . 시스템 성능이 향상되는 것을 느끼지 못한다면 CPU와 같은 I/O보다 다른 리소스를 더 많이 소비할 가능성이 높습니다. 이렇게 하려면 renice명령을 사용하여 프로세스의 CPU 사용 우선순위를 낮출 수 있습니다.

나는 다음을 사용합니다 :

ionice -c 3 find -mtime +100 -exec rm {} +

이제 다른 셸에서 find 명령의 PID를 찾아야 합니다.ps -ef | grep find

마지막으로 renice 명령을 실행합니다.renice +19 -p <PID_find_command>

관련 정보