brunch

You can make anything
by writing

C.S.Lewis

by 강진우 Mar 09. 2016

리눅스 서버 운영 중 몇 가지 팁

오늘은 좀 가벼운 글로.. 리눅스 서버 운영 중에 유용한 몇 가지 팁을 정리해 보려고 합니다. 리눅스 서버 운영 중에 발생할 수 있는 문제들의 원인을 추적하고 해결하는데 도움을 줄 수 있는 팁들입니다.


sysstat 수집 주기 변경


sysstat으로 서버의 각종 지표를 살펴보는 일은 매우 중요합니다. 특히 서버가 이상 현상을 일으킬 때 원인을 파악하는데 많은 도움이 되죠. 하지만 sysstat을 기본으로 설치하면 10분에 한 번 시스템 지표를 수집하게 되는데요, 이 마저도 평균값이 아닌 순간의 값이기 때문에 큰 도움이 안 될 때도 있습니다. 그래서 대부분은 sysstat의 주기를 변경해서 사용하는데요, 일부 서버 중 세부적으로 지표 변화를 살펴봐야 할 경우 sysstat1초 단위까지도 수집할 수 있게 변경할 수 있습니다.

그 비밀은 바로 /etc/cron.d/sysstat 파일에 있습니다.

* * * * * root /usr/lib64/sa/sa1 10 1

이 구문을 아래와 같이 수정합니다.

* * * * * root /usr/lib64/sa/sa1 1 59

시스템 지표 수집 툴을 1분 간격으로 59번 호출하게 되면 1초에 한 번 호출하게 됩니다.

1분 간격으로 찍던 걸 1초 단위로 볼 수 있습니다.

하지만 1초 단위로 바뀐 만큼 sar 파일의 크기가 커지게 됩니다. 반드시 적용 전에 예상 크기 변화와 디스크 가용량을 감안해서 적용하시기 바랍니다.

시스템 부하가 높으면 1초 단위로 적용해도 시간이 밀릴 수 있습니다.

tcpdump 지속적으로 걸어 놓기


애플리케이션에서 타임아웃이 발생한다면 추적하기 위해 가장 좋은 방법은 tcpdump를 통한 패킷 덤프 분석 일 겁니다. 하지만 타임아웃이 주기적으로 발생하는 것이 아니고 간헐적으로 발생하게 된다면 어떻게 패킷 덤프를 남길 수 있을까요? 계속해서 걸어 놓을 수도 없고, 하루 종일 지켜보고 있을 수도 없습니다. 그럴 때는 아래와 같은 옵션을 사용하면 1시간 단위로 덤프 파일을 새로 만들어 줄 수 있습니다.

tcpdump -vvv -nn -A -G 3600 -w /var/log/tcpdump/dump_$(hostname)_%Y%m%d-%H%M%S.pcap -Z root host <추적하고자 하는 dest ip> and port <추적하고자 하는 dest 포트> &

보통은 /var/log 밑에 tcpdump라는 디렉터리를 만들어 놓고 위 명령을 실행합니다. -G 옵션에 의해서 3600초에 한 번 파일을 갱신하게 됩니다. 이렇게 하면 계속해서 서버에 들어가서 덤프 파일의 크기가 얼마나 커졌는지 확인할 필요도 없고 다른 업무를 하다가 타임아웃이 발생한 순간의 덤프 파일만 가져다가 분석하면 됩니다. 하지만 tcpdump 버전에 따라 -G 옵션이 없는 경우가 있으니 확인하셔서 사용하시기 바랍니다.

CentOS 6.x 이상에 설치된 tcpdump 에는 해당 옵션이 있습니다.

swap 영역 날려 버리기


서버를 운영하다 보면 긴급한 순간이 있습니다. 메모리 사용률이 쭉쭉 올라가고 스왑을 사용하기 시작하는 그런 순간 말입니다. 문제의 원인을 파악해서 메모리 릭을 발생시키는 프로세스를 죽이고 사용 패턴을 정상화시켜도 찝찝하게 남아 있는 스왑 메모리가 있습니다.

긴급한 순간을 넘기고 난 후의 메모리 모습

메모리 사용률은 정상 패턴이 되었지만 긴박할 때 사용했던 스왑 영역이 훈장처럼 남아 있습니다. 사람에 따라 다르겠지만, 왠지 저런 부분을 싹 지워줘야 뭔가 더 정리된 듯한 느낌을 받을 때가 있죠. 저 영역을 어떻게 날려 버릴 수 있을까요? 가장 좋은 방법은 리부팅이겠지만, 굳이 저 스왑 영역을 날려 버리기 위해 리부팅을 할 필요는 없습니다. 바로 아래와 같이 명령을 입력하면 됩니다.

swapoff -a
swapon -a

말 그대로 스왑 영역을 아예 날렸다가 다시 붙이는 명령입니다.

아마 이 명령이 서비스 중인 시스템에 다른 사이드 이펙트를 불러일으키진 않을까에 대해서는 시스템 엔지니어마다 약간씩 견해가 다를 수 있습니다. 하지만 사이즈가 그리 크지 않고 (MB 단위) 대부분 서비스와 상관없는 프로세스들이 점유하고 있다면 큰 영향은 있지 않습니다. 스왑 영역에 보관되어 있는 메모리가 없어진다고 해도, 커널에서는 해당 영역을 다시 메모리에 올릴 만큼의 충분한 Free 영역을 보유하고 있기 때문입니다.


마치며


오늘은 업무 하면서 사용했던 툴들에 대한 이야기를 했습니다. 리눅스 서버를 운영하시는 분들에게 많은 도움이 되었으면 좋겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari