리눅스 환경에서 파일이 삭제됐는데 공간이 풀리지 않는 상황을 겪어보신 적 있으신가요? 이 짧은 기사에서는 이 문제의 시나리오와 해당 솔루션을 소개합니다.
애플리케이션 서버 중 하나, 운영 체제는 Red Hat Linux, 모니터링 알람, /opt/applog 파일 시스템 사용량이 임계값을 초과하고 전체 용량은 50G인데 실제 파일 용량은 20G인데 남은 30G 공간은 얼마나 되나요?
리눅스 환경에서는 모든 것이 파일 형태로 존재한다는 것을 알고 있습니다. 시스템은 일반적으로 애플리케이션과 운영 체제 간의 상호 작용을 위해 파일 설명자를 제공합니다. 인터페이스는 파일이므로 현재 시스템에서 열려 있는 파일을 나열할 수 있는 lsof 명령을 사용할 수 있습니다.
으아아아헤더의 각 필드의 의미는 다음과 같습니다.
COMMAND: 프로세스 이름
PID: 프로세스 식별자
사용자: 프로세스 소유자
FD: 파일 설명자, 애플리케이션은 파일 설명자를 통해 파일을 식별합니다. cwd, txt 등
유형: DIR, REG 등과 같은 파일 유형
DEVICE: 디스크 이름을 지정하세요
SIZE: 파일의 크기
NODE: 인덱스 노드(디스크에 있는 파일 식별)
이름: 열린 파일의 정확한 이름
일부 줄에서는 NAME이 표시(삭제)된 것을 볼 수 있습니다
/opt/applog/E.20171015.info.001.log (삭제됨)
파일이 삭제되었지만 열린 파일에 대한 핸들이 닫히지 않았다는 의미입니다. COMMAND 이름이 filebeat이고 USER 프로세스 소유자가 app입니다. 파일비트 프로세스를 켰습니다.
로그 수집 플랫폼 소개
전통적인 오픈 소스 로깅 플랫폼인 ELK는 ElasticSearch, Logstash 및 Kiabana의 세 가지 오픈 소스 도구로 구성됩니다.
아래 그림과 같은 일반적인 배포 다이어그램
위에서 언급한 파일비트란 무엇인가요? ELK와 어떤 연관이 있나요?
Zhihu에 대한 위대한 전문가 Rao Chenlin("ELKstack Authoritative Guide"의 저자)의 소개가 있는데, 매우 통찰력이 있고 https://www.zhihu.com/question/54058964/answer/137882919
에서 인용했습니다.logstash는 jvm에 의해 실행되고 많은 리소스를 소비하기 때문에 저자는 나중에 golang을 사용하여 기능은 적지만 리소스 소비는 낮은 경량의 logstash-forwarder를 작성했습니다. 그러나 저자는 간단히 말하면, filebeat는 애플리케이션 로그 파일 수집을 담당하는 로그 수집 프로세스 에이전트입니다. 위 문제의 경우 (삭제된) 파일 핸들과 미공개 파일 핸들이 많은 이유는 디스크 공간이 매우 제한되어 있기 때문에 매시간 12시간 전 로그를 삭제하는 작업이 일시적으로 추가되었기 때문입니다. 즉, 예약된 작업은 Filebeat가 이때 열려 있는 일부 파일을 자동으로 삭제하므로 이러한 파일은 미공개 파일이 되기 때문에 실제 파일은 삭제되지만 공간은 공개되지 않습니다. 해결책 1: 점유된 공간을 빠르게 해제하기 위한 가장 직접적인 방법은 -9 filebeat 프로세스를 종료하는 것입니다. 이때 공간이 해제됩니다. 그러나 이것은 근본적인 해결책은 아닙니다. 예약된 작업은 filebeat로 열린 이러한 파일도 삭제하여 공간이 가득 차게 만듭니다. 해결책 2: 즉, 일정 시간 내에 파일이 업데이트되지 않으면 모니터링되는 파일 핸들이 닫힙니다. 기본값은 1시간입니다. 즉, 이름 바꾸기, 삭제 등 파일 이름이 변경되면 파일이 자동으로 닫힙니다. 응용 프로그램 요구 사항에 따라 이 두 매개변수를 결합하면 파일이 30분 이내에 업데이트되지 않으면 파일 이름이 바뀌거나 삭제되면 핸들을 닫아야 합니다 close_older: 30분 파일비트 로그 수집 및 기록 파일 정기적 삭제에 대한 기본 요구 사항을 충족할 수 있습니다.
Filebeat의 구성 파일 filebeat.yml에는 실제로 두 개의 매개변수가 있습니다.
설명: Close old는 close_older보다 오랫동안 수정되지 않은 파일 핸들러를 닫습니다. 2h(2시간), 5m(5분)과 같은 시간 문자열을 사용할 수 있습니다.
참고: 이 옵션은 파일 이름이 변경되는 즉시 파일을 닫습니다. 이 구성 옵션은 Windows에서만 권장됩니다. Filebeat는 읽고 있는 파일을 열어두기 때문에 파일이 제거될 때 문제가 발생할 수 있습니다. Filebeat가 읽기를 닫을 때까지 완전히 제거됩니다. Filebeat는ignore_older 후에 파일 처리기를 닫습니다. 반면에 이 기능을 켜면 회전 파일의 데이터가 손실될 수 있습니다. 읽기가 끝에서 시작되므로 파일 회전 후 새 파일의 시작 부분을 건너뛰는 일이 발생할 수 있습니다. 이 옵션을 false로 두되 파일을 더 빨리 릴리스하려면ignore_older 값을 낮추는 것이 좋습니다.
force_close_files: true
위 내용은 파일 삭제 후 공간이 해제되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!