gunzip은 모든 기존 파일을 메모리로 안전하게 보호합니다.

gunzip은 모든 기존 파일을 메모리로 안전하게 보호합니다.

서버의 모든 gzip 압축 파일에 문자열이 있는지 확인하고 싶습니다. gunzip -c *.gz | grep "string to be searched"서버 같은 것을 실행하면 압축이 풀린 파일의 캐시에 과부하가 걸릴까 걱정됩니다 .

일회성 요청이고 실험할 공간이 없기 때문에 아직 스크립트를 실행하지 않았습니다. 대본 확정됐나요? 순차적으로 보이고 그 사이에 캐시를 저장하지 않는 것처럼요?

답변1

파이프가 작동하는 방식 때문에 gunzip -c *.gz파이프가 처리할 수 있는 것보다 더 많은 데이터를 파이프에 공급할 수 없으므로 grep파이프 자체는 메모리 문제를 일으키지 않습니다. gunzip압축이 풀릴 때 데이터를 스트리밍하므로 출력할 수 있는 것보다 더 많은 데이터를 압축 해제하지 않고 너무 많은 메모리를 사용하지 않습니다.

디스크에서 모든 데이터를 읽으면 데이터가 캐시되지만 커널은 이를 잘 관리합니다. 거기에는 걱정할 것이 없습니다.

내 시스템에서는

/bin/time sh -c "gunzip -c *.gz | grep test"

3.1GiB 압축 파일(6.1GiB 비압축)에서는 전체 파이프라인이 최대 3MiB의 RAM을 소비하는 것으로 나타났습니다. 캐시 사용량은 1.3GiB 증가했습니다.

답변2

파일을 하나씩 분석하고 그 사이의 시스템 부하를 모니터링할 수 있습니다. zgrep보다 직접적인 입력 방법을 사용할 수도 있습니다 .

zgrep "string" file.gz

세상에 "확실한" 것은 없습니다. 그러나 컴퓨터에 거대한 zip 파일이 있거나 아주 작은 RAM이 없다면 괜찮을 것입니다. 이 프로그램을 실행할 때 RAM 사용량에 주의하시기 바랍니다.

관련 정보