우리가 만든 서비스를 제대로 운영하기 위해서는, 프로그램이 실행되고 있는 서버의 환경을 이해할 필요가 있다. 서버에 문제가 발생했을때 빠르게 원인을 파악하고 해결하기 위해서다.
서버에서 발생할 수 있는 문제
- CPU: CPU 사용량이 높아질 경우, 성능에 병목이 발생할 수 있다. 또한 하나의 프로세스가 과도하게 CPU를 점유하고 있을 확률이 높다.
- 메모리: 메모리가 부족할 경우, 스왑(swap)이 발생한다. 하드디스크의 접근은 메모리 접근보다 현저히 느리므로 성능 저하를 일으킨다. 스왑 공간도 고갈될 경우 OOM 킬러가 프로세스를 선택하여 죽인다.
- 디스크: 디스크가 부족할 경우, 시스템 파티션 공간 부족으로 시스템이 멈추는 현상이 발생할 수 있다.
CPU 사용량 확인
top
명령어를 통해서 CPU 사용량을 확인할 수 있다.
top [옵션]
옵션 | 설명 |
---|---|
-b | batch 모드로 정보를 출력한다. 실시간으로 정보를 화면에 일렬로 출력한다. |
-d delay | 지정한 시간(delay 초)의 간격으로 정보를 업데이트하여 출력한다. |
-i idle | 토글값이 off일 때, idle 프로세스나 좀비 프로세스 정보를 출력하지 않는다. |
-n num | 지정한 시간(num)만큼 업데이트 정보를 출력한다. |
-p pid | 지정한 프로세스 ID의 정보만 출력한다. |
-q | 시간의 간격 없이 게속하여 업데이트 정보를 출력한다. |
-s | 몇 개의 대화식 명령을 비활성화한다.(시큐어 모드) |
-S | 누적된 정보를 출력한다.(cumulative 모드) |
- 현재 CPU 사용 상태를 나타낸다. 이 중
id
에 해당하는 부분이 현재 여유 CPU 사용량을 나타낸다. - 각 프로세스 별 CPU 사용량을 나타낸다.
메모리
메모리 사용량과 관련된 명령어로는 vmstat
과 free
가 있다.
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번까지 출력하는 예시다.
빨간 사각형 부분이 메모리와 관련된 부분이다.
- swpd: 사용한 스왑 메모리 용량
- free: 여유 메모리의 용량
- buff: 버퍼에 사용한 메모리 용량
- cache: 페이지 캐시에 사용한 메모리 용량
- si: 디스크에서 스왑인한 메모리 용량
- so: 디스크에서 스왑아웃한 메모리 용량
si나 so가 0이 아니라면 현재 시스템에 메모리가 부족하다는 것을 의미한다.
free
시스템에서 사용하지 않는 메모리와 이미 사용하고 있는 물리적인 메모리, 스왑 메모리의 전체 용량 등의 메모리 사용현황을 확인할 때 쓴다.
free [옵션]
옵션 | 설명 |
---|---|
-b | 메모리의 양을 바이트로 표시한다. |
-k | 킬로바이트 단위로 표시한다. |
-m | 메가바이트 단위로 표시한다. |
-t | 총계가 포함된 줄을 출력한다. |
-o | 버퍼에 조정된 줄의 출력을 비활성화한다. |
-s | 지정된 초마다 출력하게 한다. 어떤 부동 소수점도 사용할 수 있다. |
- 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 | 샘플 기간 동안 활동이 없었던 모든 장치에 대한 출력을 생략한다. |
- await: I/O 처리 평균 시간을 의미하며, 애플리케이션이 이 시간동안 대기하게 된다. 보통 하드웨어 상에 문제가 있거나 디스크를 모두 사용하고 있을 경우에 처리 시간이 비정상적으로 높아진다.
참고자료
- 유닉스리눅스 명령어 사전 (우종경, 박종오)
댓글남기기