◾️ 서버 상태 점검
▪️ web
1. nginx 포트 확인
sudo netstat -nltpu | grep '80'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1789/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 1793/docker-proxy
2. nginx 프로세스 확인
ps -ef | grep 'nginx' | grep -v 'grep'
root 1854 1816 0 00:43 ? 00:00:00 nginx: master process nginx -g daemon off;
101 1977 1854 0 00:43 ? 00:00:00 nginx: worker process
▪️ db
1. mysql 포트 확인
sudo netstat -nltpu | grep '3306'
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1782/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 1786/docker-proxy
2. mysql 프로세스 확인
ps -ef | grep 'mysql' | grep -v 'grep'
systemd+ 1823 1802 0 00:43 ? 00:00:02 mysqld
▪️ NFS 서버
1. nfs 포트 확인
sudo netstat -nltpu | grep '2049'
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
2. nginx 프로세스 확인
ps -ef | grep 'nfs' | grep -v 'grep' | grep -v '^nfs' # nfs 유저로 띄워진 프로세스는 제외.
root 704 1 0 00:42 ? 00:00:00 /usr/sbin/nfsdcld
root 1269 2 0 00:42 ? 00:00:00 [nfsd]
root 1272 2 0 00:42 ? 00:00:00 [nfsd]
root 1275 2 0 00:42 ? 00:00:00 [nfsd]
root 1277 2 0 00:42 ? 00:00:00 [nfsd]
root 1279 2 0 00:42 ? 00:00:00 [nfsd]
root 1281 2 0 00:42 ? 00:00:00 [nfsd]
root 1283 2 0 00:42 ? 00:00:00 [nfsd]
root 1285 2 0 00:42 ? 00:00:00 [nfsd]
root 1800 901 0 03:12 ? 00:00:00 sshd: nfs [priv]
◾️ 셸 스크립트
- 웹 서버 트러블슈팅용 셸 스크립트 작성
▪️ 시나리오
- 홈페이지 오픈
- 다같이 축하하며 맥주 한잔
- 다음날 출근해서 웹 서버 로그 확인하는데 에러가 잔뜩?!
▪️ 자주 일어나는 장애유형
웹 서버에서 자주 일어나는 장애 유형에 대해 알아보자.
- Disk Full
- 로그를 기록하는 프로세스가 에러 또는 멈춘다
- 임시 파일을 생성해야 하는 명령어의 실행이 안된다: 로그를 기록할 수 있는 공간이 없음
- 리눅스는 루트 유저만을 위한 예약 블록을 남겨두어 트러블슈팅이 가능하도록 설계: 디스크가 풀이 되어도 예약 블록은 쓰지 않음
- 메모리 풀
- 메모리를 다 쓰고 스왑 영역까지 끌어써서 시스템이 느려짐. 당연히 유저에게 응답또한 느려지게 될 것임
- 시스템 부하
- 로드 에버리지가 cpu 코어 개수보다 높은 경우 유저 요청에 대한 응답 늦어짐
- 프로그램 문제
- 프로그램 오동작
▪️ 한 줄 스크립트 핵심 키워드
키워드 | 내용 | 예제 |
---|---|---|
파이프라인 (|) | 앞 명령어의 결과를 뒤 명령어의 입력으로 전달 | `ls -lh |
세미콜론 (;) | 단일 명령실행 | uptime; df -h |
AND 조건 (&&) | 조건이 참이면 다음 명령어 실행 | [[ 1 == 2 ]] && echo 'true' |
OR 조건 (||) | 조건이 거짓이면 다음 명령어 실행 | `[[ 1 == 2 ]] |
◾️ 장애 상황 만들기
dd
명령어로 디스크 full 상황 만들기
dd if=/dev/zero of=test.txt bs=1G count=49
위 명령어 실행하여 의도적인 disk full 상황을 만들어주도록 하자.
📌 여기서 잠깐
/dev/null
: 비우는 역할
cat /dev/null > /var/log/nginx/access.log
-> /var/log/nginx/access.log 파일의 내용은 비워지게 된다
/dev/zero
: 비우는 역할
내용을 비우면서 무수히 많은 0으로 내용을 채우게 되고, 당연히 무한대로 파일 사이즈가 늘어나게 된다.
cat /dev/zero > /var/log/nginx/access.log
▪️ 장애 원인 찾기
▪️ 서버로드가 높은가?
: No
로드에버리지 확인
uptime
14:53 up 7:31, 3 users, load averages: 3.65 3.93 4.00
서버 부하 그리 높지 않음.
▪️ 메모리가 높은가?
: No
메모리 확인
free -m
total used free shared buff/cache available
Mem: 1974 124 496 0 1353 1677
Swap: 0 0 0
메모리 여유 공간 남아있음.
▪️ 디스크를 많이 쓰는가?
: Yes
디스크확인
df -h | grep "/$"
/dev/sda3 11G 11G 108K 100% /
디스크가 꽉 차있음!!
▪️ 한 줄 스크립트 작성
- '/' 경로에서 용량 높은 파일 찾는 한 줄 스크립트 작성하기
--max-depth=1
: 현재 위치에서 한 단계 아래의 디렉토리의 용량 총 합을 읽기 쉽게 출력
cd /; pwd; du -h --max-depth=1 2>/dev/null | grep "G"
2.1G ./usr
7.0G ./home
9.6G .
cd /; pwd; du -sh * 2>/dev/null | grep "G"
7.0G home
2.1G usr