운영 자 서버 고장 처리 방법 총화

6075 단어 서버 고장 처리
우리 팀 이 지난 회 사 를 위해 운영,최적화 와 확장 업 무 를 맡 았 을 때 우 리 는 다양한 규모 의 성능 이 매우 나 쁜 시스템 과 기초 설비(대형 시스템 이 많 고 예 를 들 어 CNN 이나 세계 은행 의 시스템)를 만 났 다.만약 에 복원 시간 이 촉박 하고 기이 한 기술 플랫폼,정보 와 문서 가 부족 하면 대체적으로 이 과정 은 우리 로 하여 금 깊 은 기억 을 남기 게 할 정도 로 비참 할 것 이다.
서버 고장 으로 문제 가 생 긴 원인 은 단번에 생각 하기 어렵다.우 리 는 기본적으로 다음 과 같은 절차 에서 착수 할 것 이다.
1.가능 한 한 문제 의 원인 과 결 과 를 파악 한다.
서버 앞 에 단번에 박 히 지 말고 이 서버 에 대해 얼마나 알 고 있 는 지,그리고 고장 의 구체 적 인 상황 을 알 아야 합 니 다.그렇지 않 으 면 너 는 목적 없 이 활 을 쏘 고 있 을 것 이다.
반드시 밝 혀 야 할 문 제 는 다음 과 같다.
고장 의 표현 은 무엇 입 니까?응답 없 음?잘못 을 보고 하 다고장 은 언제 발 견 했 습 니까?고장 은 재현 할 수 있 습 니까?마지막 으로 전체 플랫폼 을 업데이트 하 는 내용 은 무엇 입 니까(코드,서버 등)?고장 에 영향 을 미 치 는 특정 사용자 군 은 어떤 것 입 니까?기본 구조(물리 적,논리 적)의 문 서 를 찾 을 수 있 습 니까?모니터링 플랫폼 을 사용 할 수 있 습 니까?(예 를 들 어 Munin,Zabbix,Nagios,New Relic...무엇이든 가능 합 니 다)로그 가 있 습 니까?예 를 들 어 Loggly,Airbrake,Graylog...)마지막 두 가 지 는 가장 편리 한 정보 원 이지 만 너무 큰 기 대 를 가지 지 마 세 요.대체적으로 없 을 겁 니 다.더 찾 아 봐 야 겠 어.
둘,누가 있 습 니까?

$ w
$ last
이 두 명령 으로 누가 온라인 에 있 는 지,어떤 사용자 가 방 문 했 는 지 살 펴 보 자.이것 은 무슨 관건 적 인 절차 가 아니 지만,다른 사용자 가 일 을 하고 있 을 때 시스템 을 디 버 깅 하지 않 는 것 이 가장 좋다.일산 에 호랑이 두 마 리 를 용납 하지 않 는 다 는 말 이 있 잖 아 요.ne cook in the kitchen is enough.)
3.전에 무슨 일이 있 었 습 니까?
$history 이전 서버 에서 실 행 된 명령 을 확인 하 십시오.항상 맞 는 것 같 아 요.앞 에 누가 로그 인 했 는 지 보 는 정보 까지 합치 면 좀 쓸모 가 있 을 것 같 아 요.또한 admin 으로서 자신의 권한 을 이용 하여 다른 사람의 프라이버시 를 침해 하지 않도록 주의해 야 합 니 다.
이 명령 이 실 행 된 시간 을 표시 하기 위해 HISTTIMEFORMAT 환경 변 수 를 업데이트 해 야 할 수도 있 습 니 다.그렇지 않 으 면 언제 실 행 될 지 모 르 는 명령 만 보면 미 치 겠 지.
4.현재 실행 중인 프로 세 스 는 무엇 입 니까?

$ pstree -a
$ ps aux
이것 은 모두 기 존 프로 세 스 를 보 는 것 이다.ps aux 의 결 과 는 비교적 복잡 하고 pstree-a 의 결 과 는 비교적 간단명료 하 며 실행 중인 프로 세 스 와 관련 사용 자 를 볼 수 있 습 니 다.
5.감청 하 는 인터넷 서비스

$ netstat -ntlp
$ netstat -nulp
$ netstat -nxlp
나 는 보통 이 세 명령 을 따로 실행 하 는데,모든 서 비 스 를 한꺼번에 보고 싶 지 않다.netstat-nap 도 괜 찮 습 니 다.그러나 나 는 절대로 numeric 옵션 을 사용 하지 않 을 것 이다.
실행 중인 모든 서 비 스 를 찾 아서 실행 해 야 하 는 지 확인 하 십시오.각 감청 포트 를 보십시오.netstat 에 표 시 된 서비스 목록 의 PID 와 ps aux 프로 세 스 목록 은 같 습 니 다.
서버 에 자바 나 Erlang 같은 프로 세 스 가 여러 개 동시에 실행 되 고 있다 면 PID 에 따라 각각 프로 세 스 를 찾 을 수 있 는 것 이 중요 합 니 다.
일반적으로 우 리 는 모든 서버 에서 실행 되 는 서비스 가 적 고 필요 할 때 서버 를 늘 릴 수 있 도록 권장 합 니 다.서버 에 30,40 개의 감청 포트 가 열 려 있 는 것 을 본다 면 기록 을 하 세 요.나중에 시간 이 있 을 때 정리 하고 서버 를 다시 구성 하 세 요.
6.CPU 와 메모리

$ free -m
$ uptime
$ top
$ htop
다음 문제 에 주의 하 세 요:
남 은 메모리 가 있 습 니까?서버 가 메모리 와 하 드 디스크 사이 에서 swap 를 진행 하고 있 습 니까?남 은 CPU 가 있 나 요?서버 는 몇 핵 입 니까?어떤 CPU 핵 부하 가 너무 많 습 니까?서버 의 가장 큰 부하 가 어디에서 왔 습 니까?평균 부하 가 얼마 입 니까?
하드웨어

$ lspci
$ dmidecode
$ ethtool
많은 서버 가 누 드 상태 인지 볼 수 있 습 니 다.
RAID 카드 를 찾 았 습 니 다(BBU 예비 배터리 가 있 습 니까?)CPU,남 은 메모리 슬롯.이런 상황 에 따라 하드웨어 문제 의 출처 와 성능 개선 방법 을 대체적으로 알 수 있다.네트워크 카드 를 설정 하 시 겠 습 니까?듀 플 렉 스 상태 로 실행 되 고 있 습 니까?속도 가 10MBps?TX/RX 가 잘못 보 고 했 습 니까?
8.IO 성능

$ iostat -kx 2
$ vmstat 2 10
$ mpstat 2 10
$ dstat --top-io --top-bio
이 명령 들 은 백 엔 드 성능 을 디 버 깅 하 는 데 매우 유용 하 다.
디스크 사용량 검사:서버 하 드 디스크 가 가득 찼 습 니까?swap 교환 모드(si/so)를 열 었 습 니까?CPU 는 누구 에 게 점용 되 었 습 니까:시스템 프로 세 스?사용자 프로 세 스?가상 컴퓨터dstat 는 나의 최 애 이다.이 를 통 해 누가 IO 를 진행 하고 있 는 지 알 수 있 습 니 다.MySQL 이 모든 시스템 자원 을 먹 어 버 린 것 이 아 닙 니까?아니면 당신 의 PHP 프로 세 스 입 니까?
9.마 운 트 지점 과 파일 시스템

$ mount
$ cat /etc/fstab
$ vgs
$ pvs
$ lvs
$ df -h
$ lsof +D / /* beware not to kill your box */
모두 몇 개의 파일 시스템 을 마 운 트 했 습 니까?서비스 전용 파일 시스템 이 있 습 니까?예 를 들 면 MySQL?)파일 시스템 마 운 트 옵션 은 무엇 입 니까?noatime?default? 파일 시스템 이 읽 기 전용 모드 로 다시 마 운 트 되 었 습 니까?디스크 공간 이 남 았 습 니까?큰 파일 이 삭제 되 었 으 나 비 워 지지 않 았 습 니까?디스크 공간 에 문제 가 있 으 면 파 티 션 을 확장 할 공간 이 있 습 니까?
10.커 널,인 터 럽 트 와 네트워크

$ sysctl -a | grep ...
$ cat /proc/interrupts
$ cat /proc/net/ip_conntrack /* may take some time on busy servers */
$ netstat
$ ss -s
인 터 럽 트 요청 이 CPU 에 균형 적 으로 할당 되 었 습 니까?아니면 많은 네트워크 인 터 럽 트 요청 이나 RAID 요청 으로 인해 과부하 되 었 습 니까?SWAP 교환 설정 은 무엇 입 니까?워크스테이션 에 서 는 swappinness 를 60 으로 설정 하면 좋 지만 서버 에 서 는 너무 나 쁩 니 다.서버 에 SWAP 교환 을 영원히 시 키 지 않 는 것 이 좋 습 니 다.그렇지 않 으 면 디스크 의 읽 기와 쓰기 가 SWAP 프로 세 스 를 잠 그 지 않 는 것 이 좋 습 니 다.
conntrack_max 는 서버 의 데이터 에 대처 할 수 있 도록 충분히 설정 되 어 있 습 니까?다른 상태 에서(TIMEWAIT,...)TCP 연결 시간의 설정 은 어떻게 됩 니까?모든 존재 하 는 연결 을 표시 하려 면 netstat 가 느 릴 것 입 니 다.먼저 ss 로 전체적인 상황 을 볼 수 있 습 니 다.리 눅 스 TCP tuning 을 통 해 네트워크 성능 향상 의 요점 도 알 수 있다.
11.시스템 로그 와 커 널 메시지

$ dmesg
$ less /var/log/messages
$ less /var/log/secure
$ less /var/log/auth
오류 와 경고 메 시 지 를 봅 니 다.예 를 들 어 연결 수가 너무 많아 서 그런 가?하드웨어 오류 나 파일 시스템 오류 가 있 는 지 확인 하 시 겠 습 니까?이 잘못된 사건 들 을 앞에서 발 견 된 의문점 과 시간 적 으로 비교 할 수 있 는 지 분석 하 다.
12.정시 임무

$ ls /etc/cron* + cat
$ for user in $(cat /etc/passwd | cut -f1 -d:); do crontab -l -u $user; done
어떤 정시 작업 이 너무 자주 실행 되 는 것 이 있 습 니까?일부 사용자 가 숨겨 진 정시 작업 을 제출 하 였 습 니까?고장 이 났 을 때 마침 백업 작업 이 실행 되 고 있 습 니까?
13.응용 시스템 로그
이 안 에는 분석 할 만 한 것 이 많 지만,아마도 너 는 운영 자로 서 그것 을 자세히 연구 할 시간 이 없 을 것 이다.전형 적 인 LAMP(Linux+Apache+Mysql+Perl)응용 환경 에서 다음 과 같은 뚜렷 한 문 제 를 주목 하 십시오.
Apache & Nginx; 접근 과 오류 로 그 를 찾 습 니 다.5xx 오 류 를 직접 찾 고 limit 이 있 는 지 확인 하 십시오.zone 오류.MySQL; my sql.log 에서 오류 메 시 지 를 찾 습 니 다.구조 가 잘못된 표 가 있 는 지,innodb 복구 프로 세 스 가 실행 되 고 있 는 지,disk/index/query 문제 가 있 는 지 확인 하 십시오.PHP-FPM;php-slow 로 그 를 설정 하면 오류 정보(php,mysql,memcache,...)를 찾 습 니 다.설정 하지 않 았 으 면 빨리 설정 하 십시오.Varnish; varnishlog 와 varnishstat 에서 hit/miss 비 를 검사 합 니 다.설정 정보 에 어떤 규칙 이 누락 되 었 는 지 확인 하여 최종 사용자 가 백 엔 드 를 직접 공격 할 수 있 도록 합 니까?HA-Proxy; 백 엔 드 상황 은 어 떻 습 니까?건강 상태 검사 성공 여부?전단 입 니까?백 엔 드 의 대기 열 크기 가 최대 치 에 이 르 렀 습 니까?
결론.
이 5 분 후에 당신 은 다음 과 같은 상황 에 대해 비교적 잘 알 아야 합 니 다.
서버 에서 실행 되 는 것 은 무엇 입 니까?이 고장 은 IO/하드웨어/네트워크 또는 시스템 설정(문제 가 있 는 코드,시스템 커 널 조정,...)과 관련 된 것 으로 보 입 니 다.이 고장 은 당신 이 익숙 한 특징 이 있 습 니까?예 를 들 어 데이터베이스 색인 을 잘못 사용 하거나 apache 배경 프로 세 스 가 너무 많 습 니 다.너 는 심지어 진정한 고장 원인 을 찾 을 수도 있다.아직 찾 지 못 했 더 라 도 위의 상황 을 알 게 된 후에 너 는 지금도 깊이 파 내 는 조건 을 갖 추 었 다.계속 노력 하 세 요!
링크

좋은 웹페이지 즐겨찾기