본문 바로가기
운영체제 (LNX,WIN)

리눅스 서버 다운 원인 분석과 해결책 방안

by 날으는물고기 2009. 1. 14.

리눅스 서버 다운 원인 분석과 해결책 방안


리눅스 서버를 관리하다 보면 서버가 다운이 되어 사용할수 없게 되는 경우가 발생한다.

이런 다운의 원인은 어디에 있는지 다운의 원인이 되는 것들에 대해서 알아보자.

1. 부족한 리소스 : 하드 디스크나, 메모리의 과도한 사용으로 인한 리소스 부족으로 인한 다운. 리눅스(유닉스)에서는 하드디스크나 메모리를 시스템에서 사용하게 될때, 모든 공간을 할당하여 사용하는 것이 아니라, 리소스가 부족하게 되면 다운되는것을 알고 있기 때문에 미리 여분의 공간을 따로 두고 나머지를 이용해서 운영하게 된다. 그래서 하드디스크의 경우 df로 검색시 100%가 사용중이라고 나와도 다운이 되지 않는 이유는 바로 여기에 있다.  하지만 100%가 사용중인 상태에서 계속 사용하게 되면 여분으로 남겨져 있던 부분까지 모두 사용하게 되어 결국은 다운이 되게 된다.

메모리의 경우에도 page단위(리눅스에서는 4k)로 관리가 되는데, 이역시 리눅스 시스템에서 정한 freepages.min  단위까지 내려가게 되면 시스템은 메모리를 반환하기 위해서 swaping을 하게 된다.  swapping 이 되는 속도 보다 리소스 사용량이 많게 되면 결국은 시스템이 다운되고 마는것이다.
(swapping등 퍼포먼스에 관련된 내용은 추후 퍼포먼스 강좌를 통해서 다시 이야기 할것이다.)

2. 파일 시스템 에러 : 리눅스 서버의 구조는 파일 구조로 되어있다. 즉 리눅스에서의 모든 파일이나 디렉토리등은 파일로 간주한다.  이런 파일들을 관리하기 위해서는 각 파일마다 inode라는 값을 주어 구분을 하게 되는데, 파일을 지우고 쓰고, 또다시 생성하고, 복사하고 하는 도중에 동일한 inode를 가지는 파일이 생성될수도 있고, inode가 잘못된 값을 가지고 있게 되는경우도 발생한다.
(이런 경우가 rm명령으로 data를 지웠는데, 파티션의 용량이 줄지않고 그대로인 경우이다.)

이런것이 반복되다 보면 시스템이 파일 시스템 오류를 일으키며 다운되는 경우가 발생한다.

이를 방지하기 위해서는 fsck명령으로 파일시스템을 체크해주면 오류수정이 가능하다. 리눅스 서버를 관리하면서 다운 타임이 없는것은 물론 좋은일이지만, 주기적으로 시스템 점검 시간을 가지고, 서버를 점검하고, reboot도 하는것은 안정적인 서버 운영에 있어서 필요하다.

3. 하드웨어 문제 : 가장 발견하기 어려운 에러중에 하나이다. 관리자들은 하드웨어의 수명에 대해서 잘 신경쓰지 않고 있는데, 하드웨어는 소모품인 관계로 수명이 있다는것을 인지하여야 한다.

가장 수명에 관계가 있는것이 바로 하드 디스크이다. 일반적으로 IDE는 2년을 보고, SISC는 3년을 교체 시기로 보는것이 적당하다. "아니 집에서 매일 쓰는 컴퓨터는 몇년째 쓰고 있는데" 라고 생각을 한다면 오산이다. 서버에 돌고 있는 하드디스크는 1년 365일 돌고있으며, 매일같이 하드디스크에 access가 일어나고 있으므로, 피로의 누적도가 일반 가정의 컴퓨터와는 많은 차이가 있음을 인식해야 한다.

현재 서버의 구축시기 등을 확인해서 하드디스크의 교체 시기를 생각해 보도록 한다.

4. 랜카드 불량 : 이것역시 하드웨어 문제로 넣을수 있겠으나, 따로 알아 보도록 한다.  랜카드가 수명이 다되거나 불량이거나 자신의 처리 한계를 넘어서는 패킷을 처리해야 할경우에는 서버자체가 다운되는것이 아니라 랜카드만 다운되는 경우가 있다. 하지만 이로인해 서버에 접속할수 없게되므로, 이것 역시 서버의 다운에 속하게 되는것이다. 랜카드의 수명은 카드에 따라 다르므로 꼭집어 언제라고 말할수는 없고, 자신의 능력을 벗어나는 패킷처리로 알아 보면 가장 일반적으로 확인하는것이 ifconfig 명령을 수행했을때 나타나는 collisions로 확인해볼수 있다. collisions이 많다는것은 랜카드에서 처리하는 패킷이 충돌 난다는 것으로 자신이 처리 할수 있는 능력치를 벗어났을 경우이거나, 스위치 등의 네트워크 장비들의 처리 능력이 갑자기 떨어져서 랜카드가 보내는 패킷이 정상적으로 전송이 되지 못할때 발생하게 되는데, 이를 가지고 랜카드의 문제점을 확인하기도 하므로 참고하기 바란다.

5. 불법 프로그래밍 또는 프로그램밍 에러 : 얼마전 리눅스 서버가 자주 다운된다는 한 고객의 문의를 듣고, 서버를 점검해 봤더니, 불법 리눅스용 게임이 실행되어, 그 실행으로 인해서 리소스가 줄어들어 서버가 다운이 되는 경우를 보았다. 또한 프로그래밍을 잘못 설계해서 특정 프로그램을 수행할때 리소스를 한꺼번에 많이 사용하여, 서버가 다운되는 경우도 확인했다.

선자의 경우에는 시스템 관리자가 설치해놓지 않았다면, 최악의 경우에는 시스템이 해킹을 당했을수도 있는 경우이므로, 원인 확인후 해킹의 징후가 보인다면, 필요한 데이터를 모두 백업 받아 놓은뒤에 시스템을 다시 설치하는것이 가장 안전한 대처 방안이다. (재설치 하는 이유는 해커가 어느곳에 백도어를 설치해 놓았을지 알수가 없기때문에 재발을 방지하기 위해서 다시 설치 하는것이다.) 후자의 경우에는 ps 나 vmstat, sar, top등의 명령을 활용하여 어느 프로그램이 동작할때 리소스가 많이 먹는지 체크를 해야하며 리소스를 많이 차지하는 프로그램을 발견했을때에는 소스 코드를 확인하여 문제를 확인해야 한다. 발견은 시스템 관리자의 몫 코드확인은 프로그래머의 몫이다.


지금까지 일반적인 서버 다운이 일어날수 있는 경우를 알아보았는데 대부분의 다운은 이 범주안에 들것이다. (전원이 꺼지는 에러말고는)

서버 관리자의 꾸준한 노력만이 서버를 안전하게 안정적으로 관리할수 있는 방법이므로  로그를 분석함( 리눅스 시스템에서는 /var/log/디렉토리 밑에 각종 로그가 쌓이게 된다.) 으로써 문제의 원인을 찾고 그에 따른 해결책을 찾는 노력을 해야 할것이다.

 

출처 : 호스트웨이

728x90

댓글