1. 시스템 정보 확인
uname - 커널/OS 정보
# 전체 정보
uname -a
# Linux hostname 5.15.0-91-generic #101-Ubuntu SMP x86_64 GNU/Linux
# 커널 릴리즈 버전
uname -r
# 5.15.0-91-generic
# 커널 이름
uname -s # Linux
# 머신 아키텍처
uname -m # x86_64
# OS 이름
uname -o # GNU/Linuxhostnamectl - 호스트 정보 (systemd 기반)
hostnamectl
# Static hostname: myserver
# Icon name: computer-vm
# Machine ID: ...
# Boot ID: ...
# Operating System: Ubuntu 22.04.3 LTS
# Kernel: Linux 5.15.0-91-generic
# Architecture: x86-64
# 호스트네임 변경
sudo hostnamectl set-hostname new-hostname하드웨어 정보 도구
# CPU 정보
lscpu
# Architecture: x86_64
# CPU(s): 4
# Model name: Intel(R) Core(TM) i7-...
# Thread(s) per core: 2
# Core(s) per socket: 2
# CPU MHz: 2400.000
# 메모리 정보
lsmem
# 또는
cat /proc/meminfo
# PCI 장치 (그래픽카드, 네트워크카드 등)
lspci
lspci -v # 상세
lspci -nn # 벤더/디바이스 ID 포함
# USB 장치
lsusb
lsusb -v # 상세
# 상세 하드웨어 정보 (BIOS, 메인보드, 메모리 슬롯 등)
sudo dmidecode
sudo dmidecode -t memory # 메모리 슬롯 정보
sudo dmidecode -t bios # BIOS 정보
sudo dmidecode -t processor # CPU 상세 정보2. CPU/메모리 모니터링
top - 실시간 프로세스/시스템 모니터링
toptop 화면 구성:
top - 14:30:01 up 5 days, 3:22, 2 users, load average: 0.52, 0.48, 0.45
Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 91.8 id, 0.3 wa, 0.0 hi, 0.6 si, 0.0 st
MiB Mem : 7953.5 total, 1234.2 free, 3456.7 used, 3262.6 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4123.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 567892 123456 45678 S 12.5 1.5 5:30.22 java
CPU 행 해석:
us- 사용자 프로세스 CPU (user space)sy- 커널 프로세스 CPU (system/kernel)ni- nice 값이 변경된 프로세스 CPUid- 유휴 (idle) - 높을수록 여유wa- I/O 대기 - 높으면 디스크 병목hi- 하드웨어 인터럽트si- 소프트웨어 인터럽트st- 가상화 환경에서 하이퍼바이저에 빼앗긴 시간 (steal)
인터랙티브 명령어:
| 키 | 동작 |
|---|---|
k | 프로세스 kill (PID 입력 - 시그널 입력) |
M | 메모리 사용량 기준 정렬 |
P | CPU 사용량 기준 정렬 |
1 | 개별 CPU 코어별 사용률 표시 토글 |
c | 전체 명령어 경로 표시 토글 |
f | 표시할 필드 선택 |
H | 스레드 표시 토글 |
q | 종료 |
d | 업데이트 간격 변경 |
W | 설정 저장 (~/.toprc) |
# 특정 사용자의 프로세스만 표시
top -u www-data
# 배치 모드 (스크립트용, 1회 출력)
top -b -n 1 > top_output.txthtop - 향상된 top
htop
# 장점:
# - 컬러 표시, CPU/메모리 바 그래프
# - 마우스 클릭 지원
# - 트리 뷰 (F5), 검색 (F3), 필터 (F4)
# - 직관적인 프로세스 kill (F9)
# - 수평/수직 스크롤free - 메모리 사용량
free -h
# total used free shared buff/cache available
# Mem: 7.8Gi 3.4Gi 1.2Gi 125Mi 3.2Gi 4.0Gi
# Swap: 2.0Gi 0B 2.0Gi
# 핵심 해석:
# - used: 실제 프로세스가 사용 중인 메모리
# - buff/cache: 커널이 디스크 캐시로 사용 (필요 시 해제 가능)
# - available: 실제 사용 가능한 메모리 (free + 해제 가능한 cache)
# → "available"이 진짜 남은 메모리
# 주기적 모니터링 (2초 간격)
free -h -s 2
# MB 단위
free -mvmstat - 가상 메모리 통계
# 1초 간격으로 출력
vmstat 1
# procs -----memory----- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 0 0 1234000 56000 3200000 0 0 12 25 400 800 5 2 92 1 0
# 주요 컬럼:
# r - 실행 대기 프로세스 수 (CPU 코어 수보다 크면 과부하)
# b - 인터럽트 불가능 상태(I/O 대기 등)의 프로세스 수
# si - swap in (디스크→메모리) → 0이 아니면 메모리 부족
# so - swap out (메모리→디스크) → 0이 아니면 메모리 부족
# wa - I/O 대기 CPU %
# 초 단위, N회 반복
vmstat 2 10 # 2초 간격, 10회mpstat - CPU별 상세 통계
# 모든 CPU 코어별 통계
mpstat -P ALL 1
# 특정 코어
mpstat -P 0,1 1 # CPU 0, 1번만3. 프로세스 모니터링
ps - 프로세스 스냅샷
# 가장 많이 쓰는 형태
ps aux
# 컬럼 설명:
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 1 0.0 0.1 169580 13200 ? Ss Mar15 0:05 /sbin/init
# STAT 코드:
# S - Sleep (대기), R - Running, D - Disk sleep (I/O 대기)
# T - Stopped, Z - Zombie
# s - 세션 리더, + - 포그라운드, l - 멀티스레드, < - 높은 우선순위
# 트리 형태 출력
ps auxf
# 특정 프로세스 검색
ps aux | grep nginx
# 메모리 사용량 기준 상위 10개
ps aux --sort=-%mem | head -11
# CPU 사용량 기준 상위 10개
ps aux --sort=-%cpu | head -11
# 커스텀 포맷
ps -eo pid,ppid,user,%cpu,%mem,vsz,rss,comm --sort=-%mem | head -20pidstat - 프로세스별 상세 리소스 통계
# CPU 사용률 (1초 간격)
pidstat 1
# 메모리 통계
pidstat -r 1
# I/O 통계
pidstat -d 1
# 특정 PID만
pidstat -p 1234 1
# 스레드별 통계
pidstat -t 14. I/O 모니터링
iostat
# 디바이스별 확장 통계 (1초 간격)
iostat -dx 1
# MB 단위 표시
iostat -dxm 1
# CPU 통계도 함께 표시
iostat -xm 1iotop
# I/O 발생 프로세스만 표시
sudo iotop -o
# 누적 통계 모드
sudo iotop -adstat - 통합 시스템 통계
# 기본 출력 (CPU, 디스크, 네트워크, 페이징, 시스템)
dstat
# 상세 옵션
dstat -cdnm 1 # CPU, Disk, Net, Memory (1초 간격)
# 상위 프로세스 표시
dstat --top-cpu --top-mem --top-io
# CSV 출력 (분석용)
dstat -cdnm --output stats.csv 1 605. 네트워크 모니터링
iftop - 인터페이스별 트래픽 (top 스타일)
# 기본 실행
sudo iftop
# 특정 인터페이스
sudo iftop -i eth0
# 포트 번호 표시
sudo iftop -P
# DNS 해석 비활성화 (속도 향상)
sudo iftop -nnload - 대역폭 실시간 그래프
nload eth0
# 인/아웃바운드 트래픽을 실시간 그래프로 표시nethogs - 프로세스별 네트워크 사용량
# 어떤 프로세스가 네트워크를 많이 쓰는지 확인
sudo nethogs
sudo nethogs eth0bmon - 대역폭 모니터링
bmon
# 인터페이스별 트래픽 통계 및 그래프6. 시스템 부하
uptime과 Load Average
uptime
# 14:30:01 up 5 days, 3:22, 2 users, load average: 0.52, 0.48, 0.45
# 1분 5분 15분Load Average 해석:
- 실행 중(R) + 실행 대기(R) + I/O 대기(D) 상태의 프로세스 평균 수
- CPU 코어 수와 비교하여 판단
CPU 4코어 기준:
Load 0.5 → 여유 (12.5% 활용)
Load 4.0 → 포화 (100% 활용, 대기 없음)
Load 8.0 → 과부하 (4개 프로세스가 대기)
Load 12.0 → 심각 (8개 프로세스가 대기)
경험칙: Load / CPU 코어 수
< 0.7 → 정상
0.7~1.0 → 주의
> 1.0 → 과부하
추세 분석:
- 1분 > 5분 > 15분 - 부하 증가 중
- 1분 < 5분 < 15분 - 부하 감소 중
- 세 값이 비슷 - 안정적
# 상세 정보
cat /proc/loadavg
# 0.52 0.48 0.45 1/215 12345
# 실행중/전체 마지막PID7. 로그 시스템
로그 아키텍처

/var/log/ 디렉토리 주요 파일
| 파일 | 설명 |
|---|---|
/var/log/syslog (Debian계) | 일반 시스템 로그 전체 |
/var/log/messages (RHEL계) | 일반 시스템 로그 전체 |
/var/log/auth.log (Debian계) | 인증 관련 (로그인, sudo, SSH) |
/var/log/secure (RHEL계) | 인증 관련 |
/var/log/kern.log | 커널 메시지 |
/var/log/dmesg | 부팅 시 커널 메시지 (하드웨어 감지 등) |
/var/log/boot.log | 서비스 시작 로그 |
/var/log/cron | cron 작업 로그 |
/var/log/apt/ | 패키지 관리자 로그 (Debian계) |
/var/log/yum.log | 패키지 관리자 로그 (RHEL계) |
/var/log/nginx/ | Nginx 로그 (access.log, error.log) |
/var/log/lastlog | 마지막 로그인 정보 (바이너리, lastlog 명령으로 조회) |
/var/log/wtmp | 로그인 이력 (바이너리, last 명령으로 조회) |
/var/log/btmp | 실패한 로그인 (바이너리, lastb 명령으로 조회) |
rsyslog 설정
# 주 설정 파일
cat /etc/rsyslog.conf
# 추가 설정
ls /etc/rsyslog.d/
# 시설(facility).우선순위(priority) 형식
# 예시 룰:
# auth,authpriv.* /var/log/auth.log
# *.*;auth,authpriv.none /var/log/syslog
# kern.* /var/log/kern.log
# 시설(facility): auth, cron, daemon, kern, local0~7, mail, user 등
# 우선순위(priority): emerg > alert > crit > err > warning > notice > info > debugSyslog 우선순위 (높음 - 낮음):
| 레벨 | 키워드 | 설명 |
|---|---|---|
| 0 | emerg | 시스템 사용 불가 |
| 1 | alert | 즉시 조치 필요 |
| 2 | crit | 치명적 상태 |
| 3 | err | 오류 |
| 4 | warning | 경고 |
| 5 | notice | 정상이지만 주목할 상태 |
| 6 | info | 정보 메시지 |
| 7 | debug | 디버그 메시지 |
8. journald와 journalctl
systemd의 로깅 시스템. 바이너리 형식으로 저장하며 강력한 필터링을 지원한다.
기본 사용법
# 전체 로그 조회 (페이저로 표시)
journalctl
# 최신 로그부터 역순 표시
journalctl -r
# 마지막 N줄
journalctl -n 50
# 실시간 추적 (tail -f와 유사)
journalctl -f서비스별 필터링
# 특정 유닛(서비스) 로그
journalctl -u nginx.service
journalctl -u sshd.service
# 실시간 추적 + 서비스 필터
journalctl -u nginx.service -f
# 여러 서비스
journalctl -u nginx.service -u php-fpm.service우선순위 필터링
# 에러 이상만 표시
journalctl -p err
# 경고 이상
journalctl -p warning
# 범위 지정
journalctl -p err..crit시간 범위 필터링
# 오늘 로그만
journalctl --since today
# 특정 시간부터
journalctl --since "2024-01-15 10:00:00"
# 시간 범위
journalctl --since "2024-01-15" --until "2024-01-16"
# 상대 시간
journalctl --since "1 hour ago"
journalctl --since "30 min ago"부트별 필터링
# 현재 부트 로그
journalctl -b
# 이전 부트 로그
journalctl -b -1
# 2번 전 부트 로그
journalctl -b -2
# 부트 목록 확인
journalctl --list-boots기타 유용한 옵션
# 커널 메시지만 (dmesg 대체)
journalctl -k
# 특정 PID
journalctl _PID=1234
# 특정 사용자
journalctl _UID=1000
# 특정 실행파일
journalctl /usr/sbin/sshd
# JSON 출력
journalctl -o json-pretty
# 디스크 사용량 확인
journalctl --disk-usage
# 오래된 로그 삭제 (500MB 이하로 유지)
sudo journalctl --vacuum-size=500M
# 2주 이전 로그 삭제
sudo journalctl --vacuum-time=2weeksjournald 설정
# 설정 파일: /etc/systemd/journald.conf
# 주요 설정:
# Storage=persistent # 영구 저장 (auto/volatile/persistent/none)
# SystemMaxUse=500M # 최대 디스크 사용량
# SystemMaxFileSize=50M # 개별 저널 파일 최대 크기
# MaxRetentionSec=1month # 최대 보관 기간
# Compress=yes # 압축 여부
# 설정 변경 후 적용
sudo systemctl restart systemd-journald9. dmesg - 커널 메시지
# 커널 메시지 조회
dmesg
# 사람이 읽기 쉬운 타임스탬프
dmesg -T
# 실시간 추적
dmesg -w
# 레벨별 필터링
dmesg -l err # 에러만
dmesg -l err,warn # 에러 + 경고
# 시설별 필터링
dmesg -f kern # 커널만
# 컬러 출력
dmesg --color=always | less -R
# 실전: 하드웨어 문제 진단
dmesg -T | grep -i error
dmesg -T | grep -i "usb" # USB 장치 인식 확인
dmesg -T | grep -i "ata" # 디스크 오류 확인
dmesg -T | grep -i "oom" # OOM (Out of Memory) 확인
dmesg -T | grep -i "segfault" # 세그폴트 확인10. logrotate - 로그 순환 관리
로그 파일이 무한히 커지는 것을 방지하며, 주기적으로 로그를 순환(rotate)한다.
설정 구조
# 전역 설정
/etc/logrotate.conf
# 서비스별 개별 설정
/etc/logrotate.d/
├── nginx
├── syslog
├── apt
└── ...설정 예시
# /etc/logrotate.d/nginx 예시
/var/log/nginx/*.log {
daily # 순환 주기: daily, weekly, monthly, yearly
missingok # 로그 파일이 없어도 에러 안 냄
rotate 14 # 최대 14개 파일 보관
compress # gzip으로 압축
delaycompress # 직전 파일은 압축하지 않음 (다음 순환 시 압축)
notifempty # 빈 파일은 순환하지 않음
create 0640 www-data adm # 새 파일 생성 (퍼미션 소유자 그룹)
sharedscripts # 스크립트를 한 번만 실행 (와일드카드 매칭 시)
postrotate # 순환 후 실행할 명령
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}logrotate 관리
# 수동 실행 (테스트)
sudo logrotate -d /etc/logrotate.d/nginx # 드라이런(실행 안 함)
sudo logrotate -f /etc/logrotate.d/nginx # 강제 실행
# logrotate 상태 파일
cat /var/lib/logrotate/status
# cron에 의해 자동 실행
# /etc/cron.daily/logrotate11. sar (System Activity Reporter)
시스템 활동 이력을 기록하고 분석하는 도구. sysstat 패키지에 포함.
# 설치
sudo apt install sysstat # Debian/Ubuntu
sudo yum install sysstat # RHEL/CentOS
# sysstat 수집 활성화
# /etc/default/sysstat에서 ENABLED="true" 설정 (Debian)
sudo systemctl enable --now sysstatsar 사용법
# CPU 사용률 (1초 간격, 5회)
sar -u 1 5
# 메모리 사용량
sar -r 1 5
# 스왑 사용량
sar -S 1 5
# 디스크 I/O
sar -d 1 5
# 네트워크 인터페이스 통계
sar -n DEV 1 5
# 네트워크 에러
sar -n EDEV 1 5
# 로드 에버리지와 실행 큐
sar -q 1 5
# 과거 데이터 조회 (특정 날짜)
sar -u -f /var/log/sysstat/sa15 # 15일 데이터
# 시간 범위 지정
sar -u -s 10:00:00 -e 12:00:00
# 데이터 파일 위치
ls /var/log/sysstat/ # sa01, sa02, ... (일별)
# 또는
ls /var/log/sa/12. watch - 주기적 명령 실행
# 2초마다 명령 반복 실행 (기본)
watch df -h
# 간격 변경 (0.5초)
watch -n 0.5 'ps aux | head -20'
# 변경된 부분 하이라이트
watch -d free -h
# 차이가 없으면 종료 않고 계속
watch -d=cumulative 'cat /proc/loadavg'
# 명령이 실패하면 종료
watch -e 'some-command'
# 실전 활용 예시
watch -n 1 'ss -tuln' # 포트 변화 감시
watch -n 5 'tail -5 /var/log/syslog' # 로그 감시
watch -d -n 1 'cat /proc/net/dev' # 네트워크 패킷 변화
watch -n 2 'docker ps --format "table {{.Names}}\t{{.Status}}"' # 컨테이너 상태실전 정리: 시스템 문제 진단 체크리스트
# 1. 시스템 전체 상태 빠르게 파악
uptime # 부하 확인
free -h # 메모리 확인
df -h # 디스크 확인
# 2. CPU 문제 의심
top # CPU 사용률 높은 프로세스 확인 (P로 정렬)
mpstat -P ALL 1 # 코어별 사용률 (특정 코어만 100%인지)
pidstat 1 # 프로세스별 CPU 상세
# 3. 메모리 문제 의심
free -h # available 확인
vmstat 1 # si/so가 0이 아니면 swap 발생 (메모리 부족)
ps aux --sort=-%mem | head # 메모리 많이 쓰는 프로세스
dmesg -T | grep -i oom # OOM killer 확인
# 4. 디스크 문제 의심
iostat -dx 1 # %util, await 확인
iotop -o # I/O 발생 프로세스
df -h && df -i # 용량 + inode 확인
# 5. 로그 확인
journalctl -p err -b # 현재 부트의 에러 로그
journalctl -u <service> -n 100 # 문제 서비스 로그
dmesg -T | tail -50 # 최근 커널 메시지