[모니터링] 서버의 부하 상태 확인 - 서버의 반응이 늦을 때

김봉남·2024년 1월 21일
0

Linux

목록 보기
15/36
post-thumbnail
  • 서버의 부하 상태 확인 - 서버의 반응이 늦을 때
  • 프로세스 상태 점검 - 부하 원인 발견
  • 네트워크 상태 점검 - 엑세스 감시, 설정 확인
  • 네트워크 카드 점검 - 이더넷의 상태, 카드 설정 확인
  • 디스크 상태 - 용량 확인
  • 로그 - 서버 작동에 문제가 있을 시 확인

서버의 cpu 부하 확인

명령어 – w / top / uptime
uptime
12:47pm up 3 days, 12:22, 3 users, load average: 1.21, 0.86, 0.44
부하 점검 1.21(최근 1분간의 평균) 0.86(최근 5분간의 평균) 0.44(최근 15분간의 평균)

리눅스에서 cpu의 부하는 이 load average라는수치를 표준으로 한다.
이는 cpu를 필요로 하고 있는(ps명령어로 STAT가 [R]로 표시되고 있는) 프로세스 수의 평균치이다.

예를 들어 한 개의 프로세스가 폭주해 항상 CPU를 필요로 하게 되면 그 프로세스 때문에 수치가 1 증가하고 서버에 부하를 주게된다.

간단한 표준으로 CPU가 한 개인 경우는 load average가 1을 초과하면 서버는 바쁜 상태이고, 1 미만이면 CPU부하에 관해서는 별 문제가 없다.

load average가 마구 올라가는 경우는 어떤 프로세스가 폭주하고 있다고 생각해야 한다.
특히 유저가 만든 CGI프로세스가 폭주해서 load average가 올라가는 경우가 흔하다.

프로세스 상태 확인

명령어 – ps / top
ps aux
실행 중인 프로세스가 출력된다.
Kill 프로세스 번호 명령으로 프로세스를 종료한다.
USER PID CPU %MEM VSZ RSS TTY STAT START TIME
root 1 0.0 0.2 1104 72 ? S Feb11 0:04
COMMAND
Init [3]

[풀이]
USER - 실행하고 있는 유저 명
PID - 프로세스 번호
CPU - cpu 이용률
%MEM - 메모리 이용률
VSZ/RSS – 이용하고 있는 메모리 사이즈
TTY - 표준 입력이나 표준 출력에 사용되는 단말기 종류
STAT - 프로세스 상태
START - 프로세스의 개시된 시간
TIME - cpu를 이용한 시간
COMMAND – 명령어의 이름

[프로세스의 상태]
S – 슬립
D – I/O 대기
R – CPU 대기/실행 중
T – 정지 중
Z – 종료 중
W – 모두 SWAP되어 있다.
< - 우선도가 높다.
N – 우선도가 낮다.
L – 특별한 프로세스 (전혀 SWAP되지 않은 메모리가 할당되어 있다.)

@ 이상 징후
STAT가 항상 R(CPU를 필요로 하고 있는 상태), CPU 이용률이 계속 99%가 되거나 메모리 이용률이 비 정상적으로 증대하고 있는 프로세스는 폭주하고 있을 가능성이 높다.
정상 종료가 되지 않으면 Kill –KILL PID로 강제 종료한다.

네트워크의 상태 확인

명령어 – netstat –t (-t 옵션은 TCP/IP의 상태를 표시)
접속자의 주소와 정보 등이 표시되고, 접속중인 상태는 ESTABLISHED라고 표시된다.

netstat –tl (-l 옵션은 TCP/IP로 접속을 기다리는 상태를 표시)
TCP/IP로 접속할 수 있는 서버가 표시되고, 대기중인 상태는 LISTEN이라고 표시된다.

NIC 상태 확인

명령어 – ifconfig
네트워크 카드의 상태를 확인하고, MAC주소(네트워크 카드 자신의 번호)나 카드에 할당되어 있는 IP주소 이더넷 충돌의 수, 통과한 패킷의 수, 하드웨어의 정보 등을 확인

디스크의 빈 공간을 확인

명령어 – df
사용 가능한 용량이 적어졌다면 여분의 파일을 지우거나 빈 공간이 큰 영역에 디렉토리를 이동해서 그 디렉토리에 symbolic 링크를 붙이는 등의 대책이 필요하다.

디렉토리 용량을 조사한다.

명령어 – du
du /var/log | sort –nr
표시된 숫자는 KB 단위이고 디렉토리마다 사용량이 큰 순서로 표시
일반적으로 아파치의 로그가 가장 크다.

  • 리눅스 로그 파일
    /var/log/boot.log – 데몬의 실행이나 종료의 로그
    /var/log/cron – crond의 로그(정기적으로 명령어를 실행하는 데몬)
    /var/log/dmesg – 커널의 메시지
    /var/log/message – BIND나 커널, su 등 그 외의 로그
    /var/log/secure – 로그인의 기록이나 tcpd의 로그(TCP Wrappers)

  • 서버의 로그
    /var/log/maillog – sendmail 의 로그
    /var/log/smtplog – smptfeed 의 로그
    /var/log/xferlog – ftpd 의 로그
    /var/log/samba/log.* - samba 의 로그
    /usr/local/www/logs/access_log – apache 엑세스 로그
    /usr/local/www/logs/error_log – apache 에러 로그
    /usr/local/www/logs/ssl_request_log – mod_ssl 엑세스 로그
    /usr/local/www/logs/ssl_engine_log – mod_ssl 암호화에 관한 로그

profile
남자다

0개의 댓글