시스템 성능 측정을 위한 항목에는 CPU, Memory, Disk, Traffic 등이 있습니다. 리눅스 환경에서 이런 리소스들을 확인할 수 있는 다양한 명령어들을 지원하고 있는데요.

각각의 명령어들을 통해 시스템을 모니터링 하는 방법에 대해 알아봅시다.

uname: 시스템과 커널의 정보

Uname 명령어를 사용하면 시스템과 커널의 정보를 확인할 수 있습니다. -a 옵션을 사용하면 모든 정보를 확인할 수 있습니다.

각각의 의미는 다음과 같습니다.

  • [Linux] : 커널 명
  • [Localhost] : 호스트 명
  • [3.13.0-24-generic] : 커널 릴리즈 정보
  • [#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014] : 커널 버전
  • [x86_64] : 머신 하드웨어 이름
  • [x86_64] : 프로세서 종류
  • [x86_64] : 하드웨어 플랫폼
  • [GNU/Linux] : 운영체제

사용할 수 있는 옵션은 아래와 같습니다.

  • [-a, –all] : 전체 내용 출력
  • [-s, –kernel-name] : 커널 명 출력
  • [-n, –nodename] : 네트워크 노드의 호스트 명 출력
  • [-r, –kernel-release] : 커널 릴리즈 정보 출력
  • [-v, -kernel-version] : 커널 버전 출력
  • [-m, –machine] : 머신 하드웨어 이름 출력
  • [-p, –processor] : 프로세서 종류 또는 ‘unknown’ 출력
  • [-i,- -hardware-platform ] : 하드웨어 플랫폼 또는 ‘unknown’ 출력
  • [-o, –operating-system ] : 운영체제 ‘unknown’ 출력

ifconfig: 네트워크 기본 모니터링

시스템에 설정된 네트워크 인터페이스의 상태를 확인 및 변경할 수 있습니다.

그럼 이제 ifconfig 명령어를 사용했을 때 나오는 의미를 살펴보겠습니다.

  • [eth0, eth1] : 흔히 랜 카드라고 불리는 유선 네트워크 인터페이스입니다. 위 예제는 랜 카드가 2개있는 경우입니다.
  • [lo] : 루프 백 인터페이스로 자기자신과 통신하는데 사용하는 가상 장치입니다. IP가 127.0.0.1 입니다. IP주소는 서버에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당되기 때문에 각 네트워크 인터페이스마다 다른 IP주소를 가지고 있습니다.
  • [HWaddr] : 네트워크 인터페이스의 하드웨어 주소(MAC Address)
  • [inetaddr] : 네트워크 인터페이스에 할당된 IP 주소
  • [Bcast] : 브로드캐스트 주소
  • [Mask] : 넷마스크
  • [MTU] : 네트워크 최대 전송 단위(Maxium Transfer Unit)
  • [RX packets] : 받은 패킷 정보
  • [TX packets] : 보낸 패킷 정보
  • [collision] : 충돌된 패킷 수
  • [Interrupt] : 네트워크 인터페이스가 사용하는 인터럽트 번호

Ifconfig 명령어로는 private ip밖에 확인되지 않습니다. 공인 아이피(Public IP)를 알고 싶다면 Curl을 설치 후에 확인하면 됩니다.

$ curl ifconfig.me

top: 운영체제 작업 내역 모니터링

윈도우의 작업관리자와 비슷한 기능을 하는 명령어입니다.

프로세스 작업 명령어로, 시스템 프로세스들의 CPU/Memory 점유율을 실시간으로 볼 수 있습니다. 현재 몇 개의 프로세스가 있는지, CPU의 자세한 사용률은 어떻게 되는지, Memory와 Swap은 얼마나 사용하고 있는지를 확인할 수 있습니다.

  • [us] : 사용자가 사용중인 사용률
  • [sy] : 시스템이 사용중인 사용률
  • [ni] : 프로세스 우선순위를 기반으로 사용되는 사용률(사용자 공간에서 사용됨)
  • [id] : 아무 일도 하지 않는 여유률
  • [wa] : 입출력을 기다리는 프로세스 사용률
  • [hi] : 하드웨어 인터럽트 사용률
  • [si] : 소프트웨어 인터럽트 사용률
  • [st] : 가상화 환경에서 손실률

User값이 높다면, 사용자 코드를 수행하는데 시간이 오래 걸린다면 내부적으로 계산을 많이 하고 있다는 것입니다. System값이 높다면, 시스템에 의해 사용되고 있는 시간이 오래 걸린다면 프로세스들이 시스템 호출 또는 I/O가 많다고 할 수 있습니다. idle의 값이 항상 0이라면 CPU를 100% 사용하고 있다는 것을 의미합니다. CPU를 계속 사용하고 있는 프로세스를 찾아 적절하게 대응할 필요가 있습니다.

  • [PID] : 프로세스 ID
  • [USER] : 프로세스를 실행시킨 사용자 ID
  • [PR] : 프로세스의 우선순위
  • [NI] : NICE 값, 마이너스를 가지는 값이 우선순위가 높음
  • [VIRT] : 가상 메모리의 사용량(SWAP+RES)
  • [RES] : 현재 페이지가 상주하고 있는 크기
  • [SHR] : 가상 메모리 중 사용중인 메모리를 제외한 잔여 가상 메모리
  • [S] : 프로세스의 상태
  • [%CPU] : 프로세스가 사용하는 CPU의 사용률
  • [%MEM] : 프로세스가 사용하는 메모리의 사용률
  • [TIME+] : 프로세스가 CPU를 사용한 시간
  • [COMMAND] : 실행된 명령어

프로세스 목록을 원하는 특정 기준에 따라 정렬할 수 있습니다. top 실행화면에서 Shift 키와 영문자를 누르면 프로세스의 정렬 기준이 변경됩니다.

  • [SHIFT + M] : 메모리 사용률 정렬
  • [SHIFT + N] : PID 기준 정렬
  • [SHIFT + P] : CPU 사용률 정렬
  • [SHIFT + T] : 실행시간 기준 정렬
  • [SHIFT + R] : 정렬 기준변경 (오름차순인 경우 내림차순으로, 내림차순인 경우 오름차순으로 변경)

free: 메모리 모니터링

메모리에 대한 정보를 확인할 수 있습니다. 저는 Memory와 Swap에 대한 값의 총 합을 확인하기 위하여 -t 옵션을 주었습니다.

  • [MEM] : 실제 메모리
  • [Swap] : 일종의 가상 메모리
  • [Buffers] : 일부 프로세스에 의해 발생한 임시 메모리
  • [Cached] : 기존에 실행된 프로그램들이 사용했던 메모리로 실행 중이거나 새로 시작될 프로그램들이 필요할 때 빠르게 재 사용할 수 있는 메모리 영역

Buffers와 Cached 둘 다 Free영역의 일부이므로 실제로는 2번째 줄에 보이는 364812가 실 여유 메모리를 말하며 즉, 사용자가 사용 가능한 메모리입니다.

실제 사용률은 1번째 줄에 보이는 used – (buffers + cached)인 2번째 줄에 보이는 used값 인 것이지요.

  • [$ free -b # or –bytes] : show output in bytes
  • [$ free -k # or –kilo] : show output in kilobytes
  • [$ free -m # or –mega] : show output in megabytes
  • [$ free -g # or –giga] : show output in gigabytes

vmstat: 시스템 정보 모니터링

시스템 작업, 하드웨어 및 시스템 정보를 확인할 수 있습니다. 메모리, 페이징, 블록장치의 I/O, CPU상태 등을 볼 수 있습니다.

  • [r] : CPU에서 대기중인 프로세스의 수를 의미한다. r의 개수가 CPU의 개수의 2배를 넘는다면 CPU의 성능을 올려주어야 합니다.
  • [b] : 인터럽트가 불가능한 sleep 상태에 있는 프로세스의 수 (I/O 처리를 하는 동안 블록 처리된 프로세스)이다. b의 수치가 높은 경우라면 CPU가 계속 대기상태로 있다는 의미이므로 디스크 I/O를 확인해 볼 필요가 있습니다.
  • [si(swap in)] : 디스크 swap 공간에 있는 데이터를 메모리로 호출하는 양을 의미합니다. 사용되고 있는 swap 디스크가 해제되는 양(per sec)입니다.
  • [so(swap out)] : 메모리에서 디스크로 보내는 데이터의 양을 의미합니다. 물리적 메모리가 부족할 경우 디스크로부터 사용되는 메모리 양(per sec)입니다. swap out이 지속적으로 발생한다면 메모리 부족을 의심해 볼 수 있습니다. swap out값이 증가하면 메모리가 부족하다는 의미이므로 메모리를 늘려야 합니다. Swap out값은 0에 가까워야 좋고 초당 10블럭 이하가 좋습니다. swap필드의 값이 높다고 해도 free 메모리에 여유가 있다면 메모리가 부족한 것은 아닙니다.
-s 옵션을 주면 메모리 통계 항목들을 확인할 수 있습니다.

vmstat [delay [count]]를 사용하면 실시간으로 메모리 상태를 확인할 수 있습니다.

  • [$ verstat 3 5] : 3초 간격으로 모니터링 정보를 5번 출력

iostat: CPU, 디스크 입출력 상태 모니터링

평균 CPU부하 와 디스크 I/O의 세부적인 내용을 확인 할 수 있습니다.

  • [tps] : 디바이스에 초당 전송 요청 건수
  • [kB_read/s] : 디바이스에서 초당 읽은 데이터 블록 단위
  • [kB_wrtn/s] : 디바이스에서 초당 쓴 데이터 블록 단위
  • [kB_read] : 디바이스에서 지정한 간격 동안 읽은 블록 수
  • [kB_wrtn] : 디바이스에서 지정한 간격 동안 쓴 전체 블록 수

-x 옵션을 사용하면 더 자세한 내역을 볼 수 있습니다.

iostat [delay [count]]를 사용하면 실시간으로 디스크의 상태를 확인할 수 있습니다.

  • [$ iostat 3 5] : 3초 간격으로 모니터링 정보를 5번 출력하게 됩니다.

netstat: 네트워크 상태 모니터링

현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태 등을 볼 수 있습니다.

2개의 영역으로 나누어져 보여집니다.

  • [Active Internet connections] : TCP, UDP, raw로 연결된 목록만 보여집니다.
  • [Active UNIX domain sockets] : 도메인 소켓으로 연결된 목록만 보여집니다.

옵션은 아래와 같습니다.

  • [-n] : 호스트명, 포트명을 lookup하지 않고(도메인으로 보이지 않고) IP, Port번호를 보여줍니다.
  • [-a] : 모든 네트워크상태를 보여줍니다.
  • [-t] : TCP 프로토콜만 보여줍니다.
  • [-u] : UDP 프로토콜만 보여줍니다.
  • [-p] : 해당 포트를 사용하는 프로그램과 프로세스ID(PID)를 보여줍니다.
  • [-r] : 라우팅 테이블 출력
  • [-s] : 프로토콜 별(IP, ICMP, TCP, UDP 등)로 통계를 보여줍니다.
  • [-c] : 연속적으로 상태를 보여줍니다.
  • [-l] : 대기중인 소켓 목록을 보여줍니다.

State는 아래와 같이 표현됩니다.

  • [공백] : 연결되어 있지 않음
  • [FREE] : socket은 존재하지만 할당되어 있지 않다.
  • [LISTENING] : 연결요청에 대한 응답준비가 되어 있는 상태
  • [CONNECTING] : 연결이 막 이루어진 상태
  • [DISCONNECTING] : 연결해제 되고 있는 상태
  • [UNKNOWN] : 알 수 없는 연결, 알려지지 않은 연결 상태
  • [LISTEN] : 연결 가능하도록 daemon이 떠있으며 연결이 가능한 상태
  • [SYS-SENT] : 연결을 요청한 상태
  • [SYN_RECEIVED] : 연결요구에 응답 후 확인 메시지 대기중인 상태
  • [ESTABLISHED] : 연결이 완료된 상태
  • [FIN-WAIT1] : 소켓이 닫히고 연결이 종료되고 있는 상태
  • [FIN-WAIT2] : 로컬이 원격으로부터 연결 종료 요구를 기다리는 상태
  • [CLOSE-WAIT] : 종료 대기 중
  • [CLOSING] : 전송된 메세지가 유실되었음
  • [TIME-WAIT] : 연결종료 후 한동안 유지되어 있음
  • [CLOSED] : 연결이 완전히 종료

옵션에 따라 다른 정보를 확인 할 수 있습니다. 유용하게 쓰이는 옵션들은 알아 두어야 합니다.

  • [$ netstat -r] : 서버의 라우팅 테이블 출력
  • [$ netstat -na –ip] : tcp/udp의 세션 목록 표시
  • [$ netstat -na | grep ESTABLISHED | wc -l] : 활성화된 세션 수 확인
  • [$ netstat -nap | grep :80 | grep ESTABLISHED | wc -l] : 80포트 동시 접속자수
  • [$ netstat -nltp] : LISTEN 중인 포트 정보 표시

df: 디스크 모니터링

현재 디스크의 전체 용량 및 남은 용량을 확인할 수 있습니다.

옵션은 아래와 같습니다.

  • [-h] : 용량을 읽기 쉽게 단위를 계산하여 출력
  • [-T] : 파일 시스템 종류와 함께 디스크 정보 출력

※위 포스팅이 문제 있을시 삭제처리하겠습니다.

출처 : https://www.whatap.io/ko/blog/10/