Linux Monitoring Command

RoyBae·2022년 8월 5일
0

시스템 성능 측정을 위한 항목에는 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] : 파일 시스템 종류와 함께 디스크 정보 출력

profile
반도체 IT System Developer

0개의 댓글