대량의 대용량 파일을 빠르게 압축

대량의 대용량 파일을 빠르게 압축

저는 매일 약 200GB의 로그 데이터를 생성하며 약 150개의 다양한 로그 파일에 분산되어 있습니다.

파일을 임시 위치로 이동하고 임시 디렉터리에서 tar-bz2를 수행하는 스크립트가 있습니다.

200GB 로그를 12~15GB 정도로 압축하니 좋은 결과를 얻었습니다.

문제는 파일을 압축하는데 시간이 오래 걸린다는 점이다. 이것예약 된 일들작업은 매일 오전 2시 30분에 실행되어 오후 5시부터 6시까지 계속됩니다.

압축 속도를 높이고 작업을 더 빨리 완료할 수 있는 방법이 있습니까? 어떤 아이디어가 있나요?

다른 프로세스에 대해서는 걱정하지 마십시오. 압축은 다음 위치에서 발생합니다.나스, 전용 세션에서 이 작업을 수행할 수 있습니다.가상 기기거기에서 압축 스크립트를 실행하십시오.

이것이 출력이다맨 위참고로:

top - 15:53:50 up 1093 days,  6:36,  1 user,  load average: 1.00, 1.05, 1.07
Tasks: 101 total,   3 running,  98 sleeping,   0 stopped,   0 zombie
Cpu(s): 25.1%us,  0.7%sy,  0.0%ni, 74.1%id,  0.0%wa,  0.0%hi,  0.1%si,  0.1%st
Mem:   8388608k total,  8334844k used,    53764k free,     9800k buffers
Swap: 12550136k total,      488k used, 12549648k free,  4936168k cached
 PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7086 appmon    18   0 13256 7880  440 R 96.7  0.1 791:16.83 bzip2
7085  appmon    18   0 19452 1148  856 S  0.0  0.0   1:45.41 tar cjvf /nwk_storelogs/compressed_logs/compressed_logs_2016_30_04.tar.bz2 /nwk_storelogs/temp/ASPEN-GC-32459:nkp-aspn-1014.log /nwk_stor
30756 appmon    15   0 85952 1944 1000 S  0.0  0.0   0:00.00 sshd: appmon@pts/0
30757 appmon    15   0 64884 1816 1032 S  0.0  0.0   0:00.01 -tcsh

답변1

첫 번째 단계는 병목 현상이 무엇인지 파악하는 것입니다. 즉, 디스크 I/O입니까, 네트워크 I/O입니까, 아니면 CPU입니까?

병목 현상이 디스크 I/O인 경우 할 수 있는 일이 많지 않습니다. 디스크가 많은 병렬 요청을 처리하고 있지 않은지 확인하세요. 이렇게 하면 성능이 저하될 뿐입니다.

병목 현상이 네트워크 I/O인 경우 파일이 저장된 컴퓨터에서 압축 프로세스를 실행하십시오. 더 강력한 CPU가 장착된 컴퓨터에서 압축 프로세스를 실행하면 CPU가 병목 현상인 경우에만 도움이 됩니다.

병목 현상이 CPU인 경우 가장 먼저 고려해야 할 것은 더 빠른 압축 알고리즘을 사용하는 것입니다. Bzip2가 반드시 나쁜 선택은 아닙니다. 주요 약점은 압축 해제 속도입니다. 그러나 gzip을 사용하고 압축 속도를 위해 크기를 희생하거나 lzop 또는 lzma와 같은 다른 형식을 사용해 볼 수도 있습니다. 압축 수준을 조정할 수도 있습니다. bzip2의 기본값은 -9(최대 블록 크기, 즉 최대 압축 및 최대 압축 시간)입니다. 환경 변수를 압축 수준 3 BZIP2으로 설정합니다.-3이 스레드그리고이 스레드특히 일반적인 압축 알고리즘에 대해 설명합니다.이 블로그 게시물derobert가 인용한 일부 벤치마크 에서는 gzip -9.bzip2bzip2 -9이것은 또 다른 벤치마크또한 bzip2 압축 비율이 낮은 수준에서 더 빠르게 달성될 수 있음 을 보여주는 lzma(7zip의 알고리즘이므로 7z대신 사용할 수 있음)도 포함되어 있습니다. bzip2 이외의 선택을 하면 압축 해제 시간이 단축됩니다. 압축 비율은 데이터에 따라 달라지며, 압축 속도는 압축기 버전, 컴파일 방법, 이를 실행하는 CPU에 따라 달라집니다.tar --lzmalzma

병목 현상이 CPU이고 코어가 여러 개인 경우 또 다른 옵션은 병렬 압축입니다. 이를 수행하는 방법에는 두 가지가 있습니다. 모든 압축 알고리즘에 적용되는 한 가지 접근 방식은 파일을 개별적으로(개별적으로 또는 그룹별로) 압축하고 다음을 사용하는 것입니다.parallel아카이브/압축 명령을 병렬로 실행합니다. 이렇게 하면 압축이 줄어들 수 있지만 개별 파일 검색 속도가 빨라지고 모든 도구에서 사용할 수 있습니다. 또 다른 접근 방식은 압축 도구의 병렬 구현을 사용하는 것입니다.이 스레드몇 가지를 나열해 보세요.

답변2

병렬 gzip을 설치 pigz하고 다중 스레드 압축으로 tar를 사용할 수 있습니다. 좋다:

tar -I pigz -cf file.tar.gz *

옵션 -I은 다음과 같습니다:

-I, --use-compress-program PROG
  filter through PROG

물론, NAS에 멀티 코어/강력한 CPU가 없으면 어쨌든 CPU 성능으로 인해 제한을 받게 됩니다.

가상 머신 및 압축된 하드 드라이브/어레이 실행 속도도 병목 현상을 일으킬 수 있습니다.

답변3

데이터를 압축하는 가장 빠르고 효율적인 방법은 더 적은 양의 데이터를 생성하는 것입니다.

어떤 유형의 로그를 생성합니까? 1MB의 텍스트가 약 500페이지에 해당하므로 하루에 1억 페이지에 해당하는 텍스트를 생성한다는 점을 고려하면 하루 200GB는 꽤 많은 것 같습니다(Google이나 일부 ISP가 아닌 이상...). d 주간 도서관에서 의회를 채우십시오.

로그 데이터를 확인하여 어떻게든 데이터를 줄이고 로그에서 필요한 정보를 얻을 수 있는지 확인하세요. 예를 들어 로그 수준을 낮추거나 보다 간결한 로그 형식을 사용합니다. 또는 통계를 위해 로그를 사용하는 경우 즉시 통계를 처리하고 요약이 포함된 파일을 덤프한 다음 저장을 위해 압축하기 전에 로그를 필터링합니다.

답변4

압축 양을 줄여(절약된 공간 측면에서) 속도를 높일 수 있습니다. 첫째, bzip2는 압축률이 낮음에도 불구하고 gzip보다 훨씬 느립니다. 속도를 위해 크기를 교환하기 위해 bzip2, gzip 또는 대부분의 압축기의 압축 수준을 변경할 수도 있습니다.

속도를 크기로 바꾸지 않으려면 LZMA(예: xz)를 사용하는 압축기를 사용하여 속도를 향상시키면서 동일한 크기 또는 더 작은 크기를 얻을 수 있습니다.

검색하면 벤치마크를 찾을 수 있지만 가장 좋은 방법은 대상 하드웨어에서 자신의 파일을 사용하여 일부 테스트를 수행하는 것입니다.

관련 정보