상세 컨텐츠

본문 제목

[Liunx] 리눅스 서버 장애 원인 파악

프로그래밍/linux

by 2hansoul 2021. 7. 23. 16:39

본문

반응형

1) CPU 상태 확인

서버 퍼포먼스 문제가 있다면 top 명령어로 CPU 사용량을 확인한다. 당신이 만든 어플리케이션이 지나치게 많은 CPU를 (50% 이상) 먹고있지 않은지 확인한다. (다른 것도 중요 하긴 한데 메모리가 차게 되면 제일 먼저 봐야됌)

$ top

2) 메모리 상태 확인

당연하겠지만 메모리가 부족하면 안된다. 아래 명령어로 얼마나 메모리가 남았나 확인한다. 최소한 500메가 이상은 남아줘야 커널패닉이 나지 않는다.

$ free -m 

$ free -h 

3) 프로세스(쓰레드 상태) 확인

프로세스가 너무 많이 생겼거나 아예 프로세스가 죽어버린 경우가 있다. 본인이 띄운 프로세스가 살아 있는지 확인한다.

$ ps -ef | grep <process name>

4) 서비스/데몬 확인

데몬(daemon)은 백그라운드에서 돌아가는 프로세스를 말한다. 윈도우즈의 서비스를 생각하면 된다. 본인의 서버 프로그램이 데몬으로 돌아간다면 프로세스가 잘 돌아가고 있는지 확인한다.

$ service <daemon name> status

5) 네트워크 상태 확인

당연하지만 현재 서버의 네트워크 설정 및 상태를 보고 싶다면 아래 명령어를 쓴다.

$ ifconfig

하지만 이게 다가 아니다. 네트워크 쪽은 특별히 몇가지 케이스로 다뤄본다.

내 서버에서 접속이 가능합니까?

TCP 80, 443등의 특수 포트가 열려 있는지 확인하고자 한다면

$ nc <hostname> <port>
$ nc localhost 80
$ nc localhost 443

UDP인 경우엔 u 옵션으로 빠르게 확인해볼수 있다.

$ nc -u <hostname> <port>

<hostname>을 외부 서버로 해두면 이 서버에서 해당 host로 접속이 가능한지 확인해볼수 있다. 예를들어, 방화벽으로 막혀 있는가 등을 확인해 볼수 있다. 좀더 자세한 output을 위해선 -v 옵션을, 연결테스트 하는데 3초만 기다리고 싶다면 -w3 옵션을 주자.

누가 내 포트를 먹었는가?

개발하다보면 다른 프로세스와 port가 겹치는 에러를 접하게 된다. 이때 어떤 프로세스가 내가 port를 독차지하고 있는지 확인해볼수 있다. 예를들어 TCP 80 포트를 잡아먹고 있는 프로세스를 찾는다면

$ lsof -i TCP:80

또는 현재 특정 프로세스가 어떤 포트를 차지하는지 알고 싶다면 (여기선 httpd 데몬)

$ lsof -c httpd

nc와 lsof 명령어는 쓸모가 매우 많으니 잘 알아두자

서버가 응답이 자꾸 늦어져요

종종 서버의 응답이 늦어질때 요청이 서버에 엄청 몰리는게 문제인지 알고 싶을때가 있다. 이때엔 네트워크 연결수로 확인해볼수 있다.

$ netstat -nap | grep ESTAB | wc

연결수가 지나치게 많다면 어디선가 자꾸 연결이 생성되고 있다고 보면된다. 요청이 외부에서 들어온다면 몰리는 것이고 아니라면 뭔가 서버에 이상이 있는 것이다.

$ netstat -nap | grep TIME_WAIT | wc

TIME_WAIT 수가 비정상적으로 많으면 들어오는 요청을 서버에서 제대로 처리를 못하고 있다고 보면된다. 한마디로 병목현상이 벌어지고 있는 것이다.

5) 디스크 상태 확인

서버는 한번 전원이 들어오면 오랜시간 방치하는 경우가 많기 때문에 디스크에 쓰레기가 쌓이는 경우가 많다. 디스크가 꽉 차버리면 시스템에서 파일을 못 만들게 되고 결국 서버가 죽는다. 디스크 볼륨별로 얼마나 차 있는지, 빈 공간이 얼마나 남았는지 알고 싶다면 다음명령어로 확인한다.

$ df -h

$ df -ih

root와 swap 볼륨이 충분한 여유가 있어야 한다.

6) 로깅 상태 확인

이건 번외인데 서버 초보들이 자주 범하는 실수라 적어둔다. 리눅스의 서버 로그는 /var/log 폴더 아래 저장이 되는데 여기에 본인 어플리케이션의 로그를 log rotation 시켜놓지 않는 경우가 있다.

그래서 단일 로그파일이 수 기가 바이트를 우습게 넘기는걸 종종 목격하는데 파일이 크면 클수록 프로세스가 처리하기 힘들어지고 결국 성능 저하로 연결된다. 메모리가 점점 늘어나고, 디스크 읽기 쓰기 성능이 계속 저하되는 증상을 보이지만 모니터링을 하지 않기 때문에 모르는 경우도 많고 이게 문제인지도 몰라서 고생하는걸 여러번 봤다.

log rotate를 처음 들어보고, 본인 서버 어플리케이션 성능이 계속 저하된다면 본인 서버의 로그가 어디 찍히는지 확인해보자.

 

반응형

'프로그래밍 > linux' 카테고리의 다른 글

[Liunx] APACHE 서버란?  (0) 2021.07.29
[Liunx] dmesg 명령어  (0) 2021.07.26
[Liunx] linux server reboot  (0) 2021.07.23
[Liunx] linux 기본 명령어 모음  (0) 2021.06.14
[Liunx] locale 한글->영어->한글 로 변경하기  (0) 2021.06.14

관련글 더보기

댓글 영역