우리가 만든 서비스를 제대로 운영하기 위해서는, 프로그램이 실행되고 있는 서버의 환경을 이해할 필요가 있다. 서버에 문제가 발생했을때 빠르게 원인을 파악하고 해결하기 위해서다.

서버에서 발생할 수 있는 문제

CPU 사용량 확인

top 명령어를 통해서 CPU 사용량을 확인할 수 있다.

top [옵션]
옵션 설명
-b batch 모드로 정보를 출력한다. 실시간으로 정보를 화면에 일렬로 출력한다.
-d delay 지정한 시간(delay 초)의 간격으로 정보를 업데이트하여 출력한다.
-i idle 토글값이 off일 때, idle 프로세스나 좀비 프로세스 정보를 출력하지 않는다.
-n num 지정한 시간(num)만큼 업데이트 정보를 출력한다.
-p pid 지정한 프로세스 ID의 정보만 출력한다.
-q 시간의 간격 없이 게속하여 업데이트 정보를 출력한다.
-s 몇 개의 대화식 명령을 비활성화한다.(시큐어 모드)
-S 누적된 정보를 출력한다.(cumulative 모드)

top

  1. 현재 CPU 사용 상태를 나타낸다. 이 중 id에 해당하는 부분이 현재 여유 CPU 사용량을 나타낸다.
  2. 각 프로세스 별 CPU 사용량을 나타낸다.

메모리

메모리 사용량과 관련된 명령어로는 vmstatfree가 있다.

vmstat

가상 메모리의 정보를 통계 형식으로 출력한다.

vmstat [-a][-n][delay[count]][-f][-s][-m][-S unit][-d][-D][-p disk partition][-V]
옵션 설명
-a 활성화와 비활성화 메모리를 출력한다.
-f 부팅 이후 포크의 수를 출력한다.
-n 헤더 정보를 한 번만 출력한다.
-s 여러 이벤트 카운터와 메모리 통계를 테이블 형식으로 출력한다. 반복하여 출력하지는 않는다.
delay 업데이트되는 정보를 출력하는 시간 간격(delay 초)를 지정한다.
count 정보를 업데이트하는 수를 지정한다.
-d 디스크 통계를 출력한다.
-D 디스크 액티비티의 요약 통계를 출력한다.
-p partition 지정한 파티션의 상세한 통계를 출력한다.
-S unit 지정한 유닛의 크기별로 출력한다. 크기는 k(1000), K(1024), m(1000000), M(1048576)으로 지정할 수 있고 기본값은 K이다.
-V 버전 정보를 출력한다.

아래는 1초마다 정보를 업데이트하면서 5번까지 출력하는 예시다.

vmstat

빨간 사각형 부분이 메모리와 관련된 부분이다.

  • swpd: 사용한 스왑 메모리 용량
  • free: 여유 메모리의 용량
  • buff: 버퍼에 사용한 메모리 용량
  • cache: 페이지 캐시에 사용한 메모리 용량
  • si: 디스크에서 스왑인한 메모리 용량
  • so: 디스크에서 스왑아웃한 메모리 용량

si나 so가 0이 아니라면 현재 시스템에 메모리가 부족하다는 것을 의미한다.

free

시스템에서 사용하지 않는 메모리와 이미 사용하고 있는 물리적인 메모리, 스왑 메모리의 전체 용량 등의 메모리 사용현황을 확인할 때 쓴다.

free [옵션]
옵션 설명
-b 메모리의 양을 바이트로 표시한다.
-k 킬로바이트 단위로 표시한다.
-m 메가바이트 단위로 표시한다.
-t 총계가 포함된 줄을 출력한다.
-o 버퍼에 조정된 줄의 출력을 비활성화한다.
-s 지정된 초마다 출력하게 한다. 어떤 부동 소수점도 사용할 수 있다.

free

  • available : swapping 없이 새로운 프로세스에서 할당 가능한 메모리의 예상 크기

디스크

디스크 상태를 확인할 수 있는 명령어로는 iostat이 있다.

iostat [-c][-d][-N][-n][-h][-k|-m][-t][-V][-x][-z][device[...]|ALL][-p[device[,...]|ALL]][interval[count]]
옵션 설명
-c CPU 사용률을 표시한다.
-d 장치 사용률을 표시한다.
-k 초당 블록대신 초당 킬로 바이트로 표시한다.
-m 초당 블록대신 초당 메가 바이트로 표시한다.
-N 등록 된 장치 매퍼 이름을 표시한다.
-n 네트워크 파일 시스템의 통계를 표시한다.
-p[device[,…]|ALL] 해당 장치의 통계를 표시한다.
-t 각 통계의 시간을 표시한다.
-V 버전 번호를 인쇄하고 종료한다.
-x 확장된 통계를 표시한다.
-z 샘플 기간 동안 활동이 없었던 모든 장치에 대한 출력을 생략한다.

iostat

  • await: I/O 처리 평균 시간을 의미하며, 애플리케이션이 이 시간동안 대기하게 된다. 보통 하드웨어 상에 문제가 있거나 디스크를 모두 사용하고 있을 경우에 처리 시간이 비정상적으로 높아진다.

참고자료

  • 유닉스리눅스 명령어 사전 (우종경, 박종오)

댓글남기기