[Linux] OS 성능 측정 및 상태 체크 명령어들

이동엽·2024년 2월 11일
2

OS

목록 보기
2/2

Linux 서버 사용시 상태 체크에 필요한 명령어 및 플러그인들을 정리합니다.
우측에 나온 목차를 따라 확인하시길 바라며, 본인에게 적합한 명령어를 선택하시길 바랍니다.


$ top

: 현재 OS의 상태를 나타내주는 명령어
메모리 사용량, CPU 사용량 등을 나타내주며 주기적인 업데이트로 실시간 내용을 보여줌

실행 화면


상단 요약 영역

  • 시스템 현재 시간, OS가 살아있는 시간, 유저 세션수
  • 로드 애버리지
  • Tasks
  • CPU 사용량
  • 메모리 사용량

시스템 현재 시간, OS가 살아있는 시간, 유저 세션수

top - 06:55:28 up 229 days, 18:11,  1 user

시스템의 현재 시간 → 06:55:28

이 시간은 GMT 기준으로 +9를 해야 한국 시간과 동일

OS가 살아있는 시간 → 229 days, 18:08

OS가 얼마나 살아있는지를 표시

유저 세션 수 → 1 user

현재 접속중인 유저 세션 수를 표시


로드 애버리지(Load Average)

: CPU Load(CPU가 수행하는 작업의 양)의 이동 평균를 표시

load average: 0.01, 0.02, 0.00

앞에서 부터 1분, 5분, 그리고 15분에 대한 평균값으로, 실행되거나 대기중인 프로세스의 평균


Tasks

: 현재 프로세스들의 상태를 나태내주는 영역

Tasks: 103 total, 1 running, 60 sleeping, 0 stopped, 0 zombie
  • Total: 전체 프로세스
  • running: running 상태인 프로세스
  • sleeping: 대기상태인 process
  • stopped: 종료된 프로세스
  • zombies: 좀비상태인 프로세스의 수

CPU 사용량

: CPU가 어떻게 사용되고 있는지 그 사용율을 보여주는 영역

%Cpu(s): 0.3 us, 1.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  • us : 프로세스의 유저 영역에서의 CPU 사용률
  • sy : 프로세스의 커널 영역에서의 CPU 사용률
  • ni : 프로세스의 우선순위(priority) 설정에 사용하는 CPU 사용률
  • id : 사용하고 있지 않는 비율
  • wa : IO가 완료될때까지 기다리고 있는 CPU 비율
  • hi : 하드웨어 인터럽트에 사용되는 CPU 사용률
  • si : 소프트웨어 인터럽트에 사용되는 CPU 사용률
  • st : CPU를 VM에서 사용하여 대기하는 CPU 비율

메모리 사용량

: 첫번째 줄은 RAM의 메모리 영역으로 Mem이라 표시되어있는 부분
: 아랫줄은 디스크를 메모리 처럼 이용하는 Swap 메모리 영역

일반적으로 Mem의 사용량이 거의 가득 찼을때 Swap 메모리 영역을 사용
→ 이 영역은 디스크이기 때문에 RAM 메모리보다 속도가 많이 느리다.

KiB Mem : 975600 total, 267028 free, 296968 used, 411604 buff/cache
KiB Swap: 786428 total, 540156 free, 246272 used. 536232 avail Mem
  • total : 총 메모리 양
  • free : 사용가능한 메모리 양
  • used : 사용중인 메모리 양
  • buff/cache : IO와 관련되어 사용되는 버퍼에 사용되는 메모리
  • avail Mem : swap 메모리를 사용하지 않고 사용할 수 있는 메모리의 크기

디테일 영역

PID

  • 프로세스 ID으로, 프로세스를 구분하기 위한 겹치지않는 고유한 값

USER

  • 해당 프로세스를 실행한 USER 이름

PR

  • 커널에 의해서 스케줄링되는 우선순위

NI

  • PR에 영향을 주는 nice라는 값

VIRT

  • 프로세스가 소비하고 있는 총 메모리
  • 프로그램이 실행중인 코드, heap, stack과 같은 메모리, IO buffer 메모리를 포함

RES

  • RAM에서 사용중인 메모리의 크기

SHR

  • 다른 프로세스와의 공유메모리(Shared Memory)

S

  • 프로세스의 현재 상태

%CPU

  • CPU 사용량

%MEM

  • RAM에서 RES가 차지하는 비율

TIME+

  • 프로세스가 사용한 토탈 CPU 시간

COMMAND

  • 해당 프로세스를 실행한 커맨드

$ htop

: 기존 top보다 업그레이드 된 실시간 모니터링 툴

  • top은 하나의 코어를 하나의 cpu로 계산
  • htop은 코어갯수를 확인해서 각 프로세스 정보를 더 디테일하게 모니터링 가능

실행시 화면

상단 요약 영역

CPU 상태

각 코어 마다 색이 들어간 파이프가 나타냄

파이프 색 의미

  • 파랑 : low-priority
  • 녹색: normal
  • 빨강: kernel
  • 하늘: virtualiz

Memory

사용된 메모리 양을 파이프로 표현

파이프 색 의미

  • 초록 : 사용됨
  • 파랑 : 버퍼
  • 노랑 : 캐쉬

Swap

파이프 색 의미

  • 빨강 : 사용됨

하단 요약 영역

프로세스 정보

→ 위에서 설명한 top과 동일

도움말

F1 (Help) 클릭 시 보이는 화면 예시


$ nmon

: 리눅스 시스템에서 성능 모니터링을 위해 사용되는 유틸리티

# 사용하는 운영체제에 맞는 파일을 https://sourceforge.net/projects/nmon/files에서 다운로드
wget https://sourceforge.net/projects/nmon/files/nmon16g_x86.tar.gz

# 압축 해제
tar zxvf nmon16g_x86.tar.gz

# 압축 해제한 파일을 실행가능 하도록 변경
sudo cp ./nmon16g_x86_fedora25 /usr/local/bin/nmon
sudo chmod a+x /usr/local/bin/nmon

# 실행
nmon

첫 실행 화면 - 메뉴얼에서 원하는 통계 자료를 입력


원하는 정보를 클릭한 수집 정보 화면


$ glances

: 오픈 소스의 실시간 시스템 모니터링 도구

# 설치 (이전에 python3 설치 필요)
pip install glances

# 실행
glances

실행 화면

  • 호스트 이름
  • OS 이름
  • 릴리스 버전
  • 플랫폼 아키텍처 IP 주소(개인 및 공용)
  • 시스템 가동 시간

Quick Look

: CPU와 메모리 사용량을 표시

CPU

: CPU 사용량을 표시

  • user
    • 사용자 공간에서 소비된 시간의 비율
  • system
    • 커널 공간에서 소비된 시간 비율
  • idle
    • 모든 프로그램에서 사용되는 CPU 비율
  • nice
    • 양수 nice 값을 갖는 사용자 수준 프로세스가 차지하는 시간 비율
    • CPU가 좋은 사용자 프로세스를 실행하는 데 소비한 시간
  • irq
    • 하드웨어/소프트웨어 인터럽트를 서비스/처리하는 데 소요된 시간 비율
  • iowait
    • I/O 작업이 완료되기를 기다리는 CPU에서 소비한 시간 비율
  • steal
    • 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안 가상 CPU가 실제 CPU를 기다리는 시간 비율
  • ctx_sw
    • 초당 컨텍스트 전환(자발적 + 비자발적) 수
  • inter
    • 초당 인터럽트 수
  • sw_inter
    • 초당 소프트웨어 인터럽트 수

Memory & Swap & Load

Memory & Swap

  • percent: (총량 - 사용 가능량) / 총량 * 100
  • total: 사용 가능한 총 실제 메모리
  • used: 사용된 메모리
  • free: 사용되지 않는 메모리
  • active: 현재 사용 중이거나 최근에 사용된 메모리
  • inactive: 사용되지 않은 것으로 표시된 메모리
  • buffers: 파일 시스템 메타데이터와 같은 항목을 위한 캐시
  • cached: 다양한 항목을 위한 캐시

Load

  • 실행 대기열에서 대기 중인 프로세스 수와 1분, 5분, 15분 동안 현재 실행 중인 프로세스 수의 평균 합계

Network

  • 네트워크 인터페이스 비트 전송률을 표시
    • 단위는 동적으로 조정 (bit/s, kbit/s, Mbit/s 등)
  • 인터페이스 속도가 감지되면 기본 임계값이 적용
    • 주의 70%, 경고 80%, 위험 90%

Connections

: 네트워크 연결에 대한 확장 정보를 표시

  • Listen: 서버에서 생성되고 클라이언트가 연결되기를 기다리는 모든 포트
  • Initialized: 연결이 초기화될 때의 모든 상태
  • Established: 클라이언트와 서버 간에 확립된 모든 연결 수
  • Terminated: 연결이 종료되었을 때의 모든 상태
  • Tracked: 현재 수 및 최대 Netfilter 추적기 연결

Disk I/O & File System

Disk I/O

디스크 I/O 처리량을 표시하며, 장치는 동적으로 조정

File Sys

사용된 파일 시스템 디스크 공간과 전체 파일 시스템 디스크 공간을 표시


TASKS & CPU

: top 에서 표시된 프로세스 정보와 동일


$ dmidecode

: 제조사를 비롯해서 RAM/CPU 관련 하드웨어 정보를 확인 가능

  • -t 옵션으로 보고자 하는 정보를 지정
  • 관리자 권한을 필요로 함

RAM 사양 확인

sudo dmidecode -t memory | more

실행 결과

CPU 사양 확인

sudo dmidecode -t processor | more

실행 결과

이외의 CPU 사양 확인 방법

cat /proc/cpuinfo | more

실행 결과


$ free

: 메모리와 스왑(swap) 파티션의 전체 용량, 사용량, 남은 용량 등을 표시

  • -h 옵션을 사용해 메가(M), 기가(G) 단위를 사용해서 가독성을 높일 수 있음


$ du

: directory usage
: 파일과 디렉터리 용량을 계산하는 유틸리티로 용량을 계산

$ du -c /usr/local/

77936   /usr/local/bin
8       /usr/local/etc
1448    /usr/local/include
...
872     /usr/local/share
1204756 /usr/local/
1204756 total

============================

$ du -s /usr/local/

1204756 /usr/local/

============================
du -h /usr/local/

77M     /usr/local/bin
8.0K    /usr/local/etc
1.5M    /usr/local/include
...
5.8M    /usr/local/share
1.2G	/usr/local/

============================

$  du -sh /usr/local/

1.2G    /usr/local/

$ df

: directory free
: 리눅스 시스템 전체의 (마운트 된) 디스크 사용량을 확인

$ df
Filesystem      1K-blocks    Used Available Use% Mounted on
/dev/root        30302592 6310004  23976204  21% /
tmpfs             1964120       0   1964120   0% /dev/shm
tmpfs              785652    1008    784644   1% /run
tmpfs                5120       0      5120   0% /run/lock
/dev/nvme0n1p15     99800    6418     93383   7% /boot/efi
tmpfs              392824       4    392820   1% /run/user/1000

$ df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/root         29G  6.1G   23G  21% /
tmpfs            1.9G     0  1.9G   0% /dev/shm
tmpfs            768M 1008K  767M   1% /run
tmpfs            5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p15   98M  6.3M   92M   7% /boot/efi
tmpfs            384M  4.0K  384M   1% /run/user/1000

======================================================

$ df -Th
Filesystem      Type   Size  Used Avail Use% Mounted on
/dev/root       ext4    29G  6.1G   23G  21% /
tmpfs           tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs           tmpfs  768M 1008K  767M   1% /run
tmpfs           tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p15 vfat    98M  6.3M   92M   7% /boot/efi
tmpfs           tmpfs  384M  4.0K  384M   1% /run/user/1000
  • FIlesystem : 리눅스에 마운트된 파일 시스템 목록
  • Size(1K-blocks) : 전체 용량
  • Usage : 사용량
  • Available : 남은 용량
  • Use% : 용량 대비 사용량에 대한 퍼센트
  • Mounted on : 마운트 된 지점(경로)

$ iostat

: 디스크 read/write 통계지표 / CPU 사용률을 실시간으로 보여줌


$ ulimit

: 리눅스 시스템에서 자원의 한계 값을 확인하고 설정할 수 있는 명령어

  • 리눅스 시스템에도 여러가지 자원 사용의 한계값(limit)이 정해져 있다.
    • soft limit : 프로세스가 생성되면 기본적으로 적용되는 변경될 수 있는 한도 값
    • hard limit : soft limit에서 최대로 늘릴 수 있는 값
# Soft Limit 조회
> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       15302
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  491028
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 15302
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

================================================

# Hard Limit 조회
> ulimit -Ha
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             unlimited
-c: core file size (blocks)         unlimited
-m: resident set size (kbytes)      unlimited
-u: processes                       15302
-n: file descriptors                1048576
-l: locked-in-memory size (kbytes)  491028
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 15302
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

ulimit을 이용해 시스템 리소스 제한 수정하기

$ ulimit -n 2048 # 오픈 파일 갯수를 2048로 수정

/etc/security/limits.conf 파일을 수정하기

  • nproc (number of processes) : 프로세스 최대 개수
  • nofile (number of open files) : 파일 열기 최대 개수
#<domain>      <type>  <item>         <value>

user           soft    nproc          4096
user           hard    nproc          4096
user           soft    nofile         4096
user           hard    nofile         4096

# 리눅스에서는 모든 개체를 파일로 보기에 
# nproc를 높이면 nofile도 같이 높여주는 것이 맞다.

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
# End of file

$ sysbench

: 다목적 벤치마킹 도구
주로 CPU, 메모리, 디스크 및 데이터베이스 성능을 테스트하고 평가하는 데 사용

CPU 성능 테스트 예시

sysbench cpu --events=10000 --cpu-max-prime=20000 --time=0 run


참고 자료

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

1개의 댓글

comment-user-thumbnail
2024년 2월 12일

리눅스 참 재밌어요.

답글 달기