잘 운영되던 서비스가 갑작스럽게 장애가 발생한적이 있지 않나요?
다양한 원인이 있겠지만, 별다른 변경사항이 없었는데 이러한 현상이 발생할 경우 가장 먼저 의심해 볼 수 있는건 '서버에 무슨 문제가 생겼나?' 일 것입니다.
오늘은 Linux 서버 환경에서 갑작스럽게 문제가 발생할 경우 어떤 문제인지를 확인할 수 있는 유용한 명령어들을 소개하고자 합니다.
📌 디스크
✔️ df
마운트된 파일 시스템의 디스크 사용량을 확인할 수 있는 명령어 입니다.
Application 에서 가용량이 적은 파일 시스템을 사용하도록 설정된 경우 Disk 공간 부족으로 서버 장애가 발생할 수 있는데 이런 케이스를 확인할 수 있는 명령어입니다.
✔️ du
특정 경로에 대해 얼마나 많은 디스크를 사용하고 있는지 확인할 수 있는 명령어 입니다.
어느 경로에 데이터가 많이 쌓여있는지, 불필요한 데이터가 쌓여있거나 해당 경로에 데이터를 쌓는 Application 에 문제가 없는지 등을 확인할 수 있는 명령어 입니다.
📌 네트워크
✔️ tcpdump
통신이 정상적으로 되지 않을 경우 이게 client 문제인지 server 문제인지 혹은 방화벽 이슈인지를 판단하기가 쉽지 않습니다.
이때 전송 및 수신되는 네트워크 패킷을 분석하여 판단할 수 있도록 도와주는 명령어가 tcpdump 입니다.
✔️ dig / host / nslookup
Application 에서 target server 와 통신하기 위해 사용하는 DNS 주소가 정상적인지를 확인할 수 있는 명령어 입니다. 서버에서 해당 DNS 로 주소를 조회할 수 있는지, 혹은 DNS 가 정상적으로 구성되어있는지 등을 확인할 수 있습니다.
✔️ telnet / nc
Application 이 지정된 port 주소를 정상적으로 사용하고 있는지를 확인할 수 있는 명령어입니다.
📌 Application
✔️ strace
Application Process 가 시스템에 호출 혹은 수신한 내용이 캡쳐되어 기록되는데 이러한 내용을 확인할 수 있는 명령어입니다. 간혹 Application 이 OS 의 개입으로 비정상 종료가 되었거나 Application 이 OS 에 이슈가 될만한 행동을 했는지를 확인할 수 있습니다.
✔️ ps aux / ls -l /proc/PID/fd
Application Process 에서 현재 점유하고 있는 Open File Count(혹은 File Descriptor)를 확인할 수 있는 명령어입니다.
OS 에서 제한하고 있는 Open File Count 수를 넘어갈 경우 네트워크 통신이나 파일 생성등과 같은 동작이 안될 수 있는데 이런 이슈를 확인할 수 있는 명령어입니다.
✔️ curl
Http 통신 및 응답 내용에 문제가 없는지 -v 옵션을 통해 상세히 파악할 수 있는 명령어 입니다.