웹 서버 정지없이 매우 큰 파일 삭제 Linux CentOS)에는 매우 큰 로그 파일 (

내 웹 서버 (apache가 실행 중임, Linux CentOS)에는 매우 큰 로그 파일 ( 50GB )이 있습니다. 이 웹 서버에는 프로덕션에 일부 웹 서비스가 있습니다.

로그 파일을 삭제하려고 할 때 웹 서버에 약 10 초 동안 응답이 없었습니다. (서비스 시간.)

rm -f monthly.log

아파치 동결 없이이 큰 파일을 삭제하는 방법이 있습니까?



답변

다음 logrotate과 같은 구성을 사용하여을 통해 먼저 회전하십시오 .

/path/to/the/log {
    missingok
    notifempty
    sharedscripts
    daily
    rotate 7
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
    compress
}

그런 다음 자정에 크론 작업을 만들어 회전 된 파일을 삭제하십시오.

30 2 * * * nice -n 19 ionice -c2 -n7 rm -f /path/to/the/log/file.1

답변

큰 파일을 빠르게 삭제하려면 truncate-명령을 사용하여 크기를 0으로 줄인 다음 삭제하십시오.

 truncate -s 0  monthly.log && rm -f monthly.log

퀀 타가 권장하는 것처럼 먼저 로그 로테이션해야합니다.


답변

echo "0" > monthly.log && rm -f monthly.log

답변

: > /path/to/monthly.log작업으로 파일을 자르거나 제로화합니다 . 그런 다음 Apache 프로세스를 다시 시작하고 향후에 이런 일이 발생하지 않도록 로그 회전을 설정하십시오 …

그러나 이것은 종종 발생합니다.

참조 : IO /로드를 중단하지 않고 Linux에서 100GB 파일을 삭제하는 방법이 있습니까?

유닉스에서 활발하게 기록되는 대용량 로그 파일의 크기를 줄이는 가장 좋은 방법은 무엇입니까?

공간이 부족한 Linux 서버


답변

데이터가 필요하지 않은 경우 / dev / null을 사용하여 자릅니다.

cat /dev/null > monthly.log

웹 서버는 잘린 후에도 파일에 데이터를 계속 기록하므로 파일 rm monthly.log을 제거하는 (와 달리 ) 웹 서버를 다시 시작할 필요가 없습니다 .

즉각적인 위기를 해결 한 후 Quanta가 제안한대로 로그 로테이션을 고려하십시오. 이런 일이 다시 일어나길 원하지 않습니다. Apache 로그 파일은 CentOS에서 기본적으로 이미 회전되어 있습니다.

syslog를 통해 웹 로그를 보내는 것도 고려하십시오 ( /usr/bin/logger예 🙂 . syslog를 사용하여 생성 된 로그에는 일반적으로 이미 로그 로테이션이 설정되어 있습니다.


답변

ext3 파일 시스템을 사용하는 경우 ext4로 전환하십시오.

Ext3은 모든 개별 4k 블록의 위치를 ​​저장하기 때문에 대용량 파일을 삭제하는 데 시간이 오래 걸릴 수 있습니다. 파일 내용이 디스크에서 어디에 있는지 추적하기 위해 총 50MiB의 부기 데이터가 있습니다. 이 큰 블록 목록은 많은 간접 블록에 흩어져있을 수 있으며 파일을 삭제할 때 모두 업데이트해야합니다. 이러한 모든 간접 블록에 액세스하려는 디스크는 아마도 지연의 원인 일 수 있습니다.

반면 Ext4는 최대 128MiB의 “extents”에 파일을 할당합니다. 이 50GiB 파일은 13107200 개별 블록 번호가 아닌 400 개의 익스텐트 레코드를 사용하여 inode 테이블에 기록 할 수 있으므로 파일을 삭제할 때 필요한 디스크 I / O의 양이 크게 줄어 듭니다.

기존 ext3 파일 시스템을 대신하여 ext4로 변환하면 파일이 범위를 사용하여 할당되지만 기존 파일은 여전히 ​​차단 목록을 사용합니다. chattr +e명령을 사용하여 범위를 사용하여 기존 파일을 재 할당 할 수 있습니다 . 성능 측면에서 이것은 파일을 복사 한 다음 원본을 삭제하는 것과 비슷합니다.


답변

이것은 파일 시스템 성능 문제로 귀결됩니다. 이 SO 질문 에는 이것에 대한 흥미로운 대답이 있지만 이것은 사용중인 파일 시스템에 따라 다릅니다. XFS 의 삭제 성능이 ext3보다 훨씬 우수했기 때문에 MythTV에 수백 개의 멀티 기가 바이트 MPEG2 파일을 저장하기 위해 파일 시스템을 만들 때 XFS를 사용했습니다 . 개입 년 동안 상황이 크게 변경되었을 수 있습니다.

@quanta의 답변을 좋아합니다. 파일을 작은 부분으로 나누면 더 빨리 삭제됩니다.