◾️ 서버 상태 점검
▪️ 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-proxy2. 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-proxy2. 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