Linux에서 대용량 로그 파일을 살펴봐야 할 때 vim
같은 편집기는 가급적 사용하지 않는 편이 좋다. 그 이유 중 하나를 살펴보자.
필자는
/tmp
안의 대용량 파일 때문에 /(루트) 파일 시스템이 가득 찼다는(시스템이 종종 작동하지 않을 수 있는 위험한 상황) 경고를 얼마나 많이 받았는지 셀 수가 없다. 구체적으로 말하면 루트 디렉터리에는 대용량의.swp
파일들이 있었다. vim이 파일을 열 때 vim 은 전체 내용을.swp
파일로 복사한다. vim의 어떤 버전에서는 이.swp
파일을/tmp
에 저장하고 어떤 버전에서는/var/tmp
에 저장하며, 또 어떤 버전에서는~/tmp
안에 저장한다. 어쨌든 실제로 일어났던 일은 시스템의 특정 사용자가 크기가 기가바이트에 달하는 아파치 로그 파일을 보려고 했다는 것이다. 사용자가 그 파일을 열었을 때/tmp
안에 수 기가바이트나 되는.swp
파일이 만들어졌고 루트 파일 시스템이 가득 차고 말았다. 그 문제를 해결하기 위해 문제가 되는 vim 프로세스를 찾아서 죽여야 했다.출처:
데브옵스 – 카일 랜킨 지음, 조남웅 외 옮김/위키북스 |
또다른 이유는 대용량 로그 파일을 함부로 열면 서비스가 중지될 수도 있기 때문이다.
리눅스 커널에서는 out-of-memory (OOM) killer도 제공하는데, 이것은 시스템이 위험할 정도로 낮은 RAM을 확보한 상태에서 실행되고 있을 때 작동한다. 시스템의 RAM이 거의 고갈됐을 때 OOM Killer는 프로세스를 강제로 종료하기 시작할 것이다. OOM Killer는 RAM을 모두 소모하고 있는 프로세스를 종료시키기 위해 작동하지만 이렇게 보장되지 않는 경우도 있다. OOM Killer는 실제 원흉인 프로세스 대신 sshd 같은 프로그램이나 다른 프로세스를 대신 강제시킬 수도 있다.
출처: 데브옵스
실제 서비스에서는 Tomcat/JBoss 같은 WAS나 MySQL 같은 데이터베이스가 메모리를 소진시키므로 까딱 잘못하면 이 프로세스가 종료되어서 서비스가 중지될 수도 있다.
그러면 vim
말고 무엇을 써야 하느냐? tail
이나 cat
이 대안이 될 수 있다. 물론 vim
의 검색 기능 등을 원한다면 이보다는 less
가 낫다.
Less is similar to
more
command, butless
allows both forward and backward movements. Moreover,less
don’t require to load the whole file before viewing. Try opening a large log file in Vim editor andless
— you’ll see the speed difference.출처: Linux 101 Hacks
성능도 성능이지만 less
는 vim
과 거의 동일한 검색 명령어를 지원한다. /
, n
, N
등