Recent Posts
Recent Comments
Link
160x600
반응형
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

일상과 여행 사이, 작은 발견들을 기록합니다

🖥️ Solaris vmstat 완전 정복 가이드 - Solaris 시스템 모니터링의 필수 도구 본문

Oracle_Unix_Server

🖥️ Solaris vmstat 완전 정복 가이드 - Solaris 시스템 모니터링의 필수 도구

kerasi 2025. 6. 5. 10:17
728x90
반응형

🖥️ Solaris vmstat 완전 정복 가이드 - Solaris 시스템 모니터링의 필수 도구

안녕하세요! 오늘은 Solaris 시스템 관리자라면 반드시 알아야 할 vmstat 명령어에 대해 쉽고 재미있게 알아보겠습니다. vmstat을 마스터하면 시스템의 건강 상태를 한 눈에 파악할 수 있어요! 🩺

🤔 vmstat이 뭔가요?

vmstat은 "Virtual Memory Statistics"의 줄임말로, 시스템의 메모리, CPU, 프로세스 등의 상태를 실시간으로 보여주는 명령어입니다. 마치 시스템의 건강 검진표와 같다고 생각하면 됩니다!

🚀 기본 사용법

가장 간단한 사용법

vmstat

이렇게 입력하면 시스템 부팅 이후의 평균 통계가 나타납니다.

실시간 모니터링

vmstat 2        # 2초마다 업데이트
vmstat 1 10     # 1초마다 10번 출력
vmstat 5        # 5초마다 계속 출력 (Ctrl+C로 중지)
vmstat -T d 3   # 타임스탬프 포함하여 3초마다

📊 Solaris vmstat 출력 해석하기

vmstat을 실행하면 이런 화면이 나타납니다:

kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr v0 v1 v2 v3   in   sy   cs us sy id
 0 0 0 515040 1326760 2   7  2  3  6  0 96  0 29  0  0  899 1229  972  1  1 99

🏃‍♂️ kthr (커널 스레드 정보)

  • r (runnable): 실행 가능한 커널 스레드 수
    • 💡 : CPU 코어 수보다 계속 높으면 과부하 상태!
  • b (blocked): 자원 대기 중인 스레드 수
    • 💡 : 이 값이 높으면 I/O나 메모리 병목 의심!
  • w (swapped): 스왑된 스레드 수
    • 💡 : 이 값이 0이 아니면 심각한 메모리 부족!

🧠 memory (메모리 정보)

  • swap: 사용 가능한 스왑 공간 (KB)
    • 💡 주의: 이 값이 계속 줄어들면 스왑 부족!
  • free: 사용 가능한 메모리 (KB)
    • 💡 : 너무 적으면 메모리 증설 고려

📄 page (페이징 정보)

  • re (reclaim): 회수된 페이지 수
  • mf (minor faults): 마이너 페이지 폴트 수
  • pi (page in): 페이지 인 횟수 (스왑에서 메모리로)
    • 🚨 경고: 계속 발생하면 메모리 부족!
  • po (page out): 페이지 아웃 횟수 (메모리에서 스왑으로)
    • 🚨 경고: 계속 발생하면 메모리 부족!
  • fr (freed): 해제된 페이지 수
  • de (anticipated short-term memory shortfall): 예상 메모리 부족량
  • sr (scan rate): 페이지 스캔 비율
    • 💡 : 높으면 메모리 압박 상태

💾 disk (디스크 정보)

  • v0, v1, v2, v3: 각 디스크별 초당 I/O 횟수
    • 💡 : 특정 디스크만 높다면 부하 분산 고려

⚙️ faults (시스템 정보)

  • in (interrupts): 초당 인터럽트 횟수
    • 💡 : 급격히 높아지면 하드웨어 문제 의심
  • sy (system calls): 초당 시스템 콜 횟수
    • 💡 : 애플리케이션 효율성 지표
  • cs (context switches): 초당 컨텍스트 스위치 횟수
    • 💡 : 너무 높으면 스케줄링 오버헤드 증가

🎯 cpu (CPU 사용률)

  • us (user): 사용자 프로세스 CPU 사용률 (%)
  • sy (system): 시스템(커널) CPU 사용률 (%)
  • id (idle): 유휴 CPU 사용률 (%)

🤔 I/O 대기율은 어디에?: Solaris vmstat에는 I/O 대기율이 없어요! iostat -x 또는 sar -u 명령어를 별도로 사용해야 합니다.

📋 당신의 vmstat 출력 분석

보여주신 출력을 분석해보면:

vmstat -T d 3  # 날짜/시간 포함하여 3초 간격으로 모니터링
2025년 06월  5일 목요일 오전  7시 12분 56초 KST
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr v0 v1 v2 v3   in   sy   cs us sy id
 0 0 0 515040 1326760 2   7  2  3  6  0 96  0 29  0  0  899 1229  972  1  1 99

시스템 상태: 🟢 매우 건강함!

  • r=0: 실행 대기 중인 스레드 없음 → CPU 여유로움
  • b=0: 자원 대기 스레드 없음 → 병목 없음
  • w=0: 스왑된 스레드 없음 → 메모리 충분
  • swap=515MB: 사용 가능한 스왑 공간
  • free=1.3GB: 사용 가능한 메모리 충분
  • pi=2, po=3: 매우 낮은 페이징 → 메모리 압박 거의 없음
  • v1=29: 약간의 디스크 I/O 있음 (정상 수준)
  • us=1, sy=1, id=99: CPU 사용률 2%로 거의 유휴 상태

결론: 완벽한 시스템 상태! 😎

💡 참고: -T d 옵션으로 타임스탬프까지 포함해서 모니터링하고 계시네요! 로그 분석할 때 매우 유용합니다.

🔍 실전 활용 예제

1. 시스템 부하 체크

# 10초간 1초마다 모니터링
vmstat 1 10

체크 포인트:

  • r 값이 CPU 코어 수보다 많이 높은가? → CPU 과부하
  • pi, po가 계속 발생하는가? → 메모리 부족
  • sr 값이 높은가? → 메모리 압박

2. 메모리 압박 상황 감지

# 페이징 활동 모니터링
vmstat 2 | awk '$9>0 || $10>0 {print strftime("%Y-%m-%d %H:%M:%S"), "PAGING DETECTED:", $0}'

3. I/O 대기율 확인 (별도 명령어 필요)

# I/O 상세 분석
iostat -x 2

# CPU 대기율 포함
sar -u 2

4. 디스크별 부하 분석

# 디스크 통계는 iostat으로
iostat -x 2   # 상세 디스크 분석
iostat -D 2   # 디스크별 통계

🚨 문제 상황별 진단법

😰 상황 1: 시스템이 느려요!

vmstat 2

체크리스트:

  • r > CPU 코어 수 × 2 → CPU 업그레이드 고려
  • b > 5 → I/O 병목 또는 메모리 부족
  • pi, po > 0 → 메모리 증설 필요
  • sr > 200 → 메모리 압박 상태

😱 상황 2: 메모리가 부족한 것 같아요!

# 메모리 상태 상세 확인
vmstat 1 5
prtconf | grep Memory    # 총 메모리 확인

진단:

  • pi, po 값이 계속 증가 → 심각한 메모리 부족
  • w > 0 → 프로세스가 스왑됨 (매우 심각!)
  • sr > 100 → 메모리 압박

🐌 상황 3: 디스크가 느린 것 같아요!

vmstat 1
iostat -x 2

확인사항:

  • v0, v1, v2, v3 값이 계속 높은가?
  • b (blocked) 값이 높은가?
  • iostat에서 %busy가 높은가?

💡 vmstat 마스터 팁

1. 종합 모니터링 스크립트

#!/bin/ksh
# Solaris 시스템 모니터링
echo "=== SYSTEM OVERVIEW ==="
uptime
echo ""
echo "=== VMSTAT ==="
vmstat 1 3
echo ""
echo "=== MEMORY ==="
prtconf | grep Memory
echo ""
echo "=== DISK I/O ==="
iostat -x 1 2

2. 메모리 압박 감지 스크립트

#!/bin/ksh
# 메모리 압박 상황 실시간 감지
vmstat 5 | while read line; do
    pi=$(echo $line | awk '{print $9}')
    po=$(echo $line | awk '{print $10}')
    sr=$(echo $line | awk '{print $12}')
    
    if [ "$pi" -gt 0 ] || [ "$po" -gt 0 ] || [ "$sr" -gt 100 ]; then
        echo "$(date): MEMORY PRESSURE DETECTED! pi=$pi po=$po sr=$sr"
        # 알림 메일 발송
        echo "Memory pressure detected on $(hostname)" | mailx -s "System Alert" admin@company.com
    fi
done

3. CPU 과부하 감지

#!/bin/ksh
# CPU 과부하 감지 (CPU 코어 수에 따라 임계값 조정)
CPU_CORES=$(psrinfo | wc -l)

vmstat 5 | while read line; do
    runnable=$(echo $line | awk '{print $1}')
    if [ "$runnable" -gt $((CPU_CORES * 2)) ]; then
        echo "$(date): HIGH CPU LOAD! Runnable processes: $runnable"
    fi
done

📈 성능 최적화 가이드

CPU 최적화

  • us 높음 → 애플리케이션 최적화 또는 CPU 업그레이드
  • sy 높음 → 시스템 콜 줄이기, 커널 파라미터 튜닝
  • cs 매우 높음 → 프로세스/스레드 수 조정

메모리 최적화

  • pi, po 발생 → 메모리 증설 또는 애플리케이션 메모리 사용량 최적화
  • sr 높음 → 커널 파라미터 튜닝 (lotsfree, minfree 등)
  • w > 0 → 즉시 메모리 증설 필요

디스크 I/O 최적화

  • 특정 디스크만 바쁨 → 부하 분산 고려 (ZFS pool 재구성)
  • 전체적으로 높음 → SSD 도입 또는 ZFS 성능 튜닝
  • iostat과 함께 분석하여 병목 지점 정확히 파악

🔧 Solaris vmstat 옵션들

기본 옵션

vmstat              # 시스템 부팅 이후 평균
vmstat 간격         # 예: vmstat 2 (2초마다)
vmstat 간격 횟수    # 예: vmstat 2 10 (2초마다 10회)

고급 옵션

vmstat -T d         # 날짜/시간 타임스탬프 포함
vmstat -p           # 페이징 상세 정보
vmstat -s           # 시스템 전체 통계 요약
vmstat -S           # 스왑 상세 정보

페이징 상세 분석 (-p 옵션)

vmstat -p 2

이 옵션은 페이징 관련 더 자세한 정보를 제공합니다.

시스템 통계 요약 (-s 옵션)

vmstat -s

시스템 부팅 이후의 모든 통계를 요약해서 보여줍니다.

🎯 실습 문제

문제 1: 다음 vmstat 출력을 보고 시스템 상태를 진단해보세요.

kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr v0 v1 v2 v3   in   sy   cs us sy id
12  3 2  8192000 102400 15 20 50 80 100 0 300 0 0 15 0  2000 5000 8000 70 25  5

해답:

  • r=12: 높은 실행 대기열 → CPU 과부하
  • b=3: 자원 대기 프로세스 존재 → I/O 또는 메모리 병목
  • w=2: 스왑된 프로세스 → 심각한 메모리 부족!
  • pi=50, po=80: 활발한 페이징 → 메모리 부족
  • sr=300: 높은 스캔율 → 메모리 압박
  • v2=15: 디스크 I/O 활동
  • id=5: CPU 사용률 95% → CPU 과부하
  • 결론: 즉시 메모리 증설과 CPU 업그레이드 필요! 🚨

🛠️ 유용한 vmstat 조합 명령어

# 시스템 전반적 상태 체크
alias syscheck='echo "=== VMSTAT ==="; vmstat 1 3; echo "=== MEMORY ==="; prtconf | grep Memory; echo "=== LOAD ==="; uptime; echo "=== I/O ==="; iostat -x 1 2'

# 5분간 상세 모니터링 (타임스탬프 포함)
vmstat -T d 5 60 | tee system_performance_$(date +%Y%m%d_%H%M).log

# 메모리 압박 상황 감지
vmstat 2 | awk '$9>0 || $10>0 || $12>100 {print strftime("%Y-%m-%d %H:%M:%S"), "MEMORY PRESSURE:", $0}'

# 실시간 CPU 과부하 감지
vmstat 1 | awk '{if(NR>3 && $1>4) print strftime("%Y-%m-%d %H:%M:%S"), "HIGH CPU LOAD:", $1, "runnable"}'

🔍 Solaris 전용 성능 모니터링 조합

# 종합 성능 분석
echo "=== CPU & MEMORY ==="
vmstat -T d 1 3
echo ""
echo "=== DISK I/O ==="  
iostat -x 1 3
echo ""
echo "=== NETWORK ==="
netstat -i
echo ""
echo "=== PROCESS ==="
prstat 1 1

# ZFS 성능 분석 (ZFS 사용 시)
echo "=== ZFS ARC ==="
kstat -p zfs:0:arcstats | grep -E "(hits|misses|size)"

🎊 마무리

Solaris vmstat은 시스템 관리자의 Swiss Army Knife같은 도구입니다! 정기적으로 모니터링하면:

장애 예방: 메모리 압박이나 CPU 과부하를 미리 감지
성능 최적화: 페이징 패턴으로 병목 지점을 정확히 파악
용량 계획: 하드웨어 업그레이드 시점 예측
트러블슈팅: 문제 발생 시 빠른 원인 분석

특히 pi/po (페이징) 모니터링이 핵심이에요! 이 값들이 계속 발생하면 즉시 메모리 증설을 고려해야 합니다.

Solaris의 경우 ZFS와 함께 사용할 때 더욱 강력한 성능 분석이 가능하니, iostat, zpool iostat, prstat 등과 함께 활용해보세요!

이제 여러분도 Solaris vmstat 마스터가 되어 시스템을 완벽하게 관리해보세요! 💪


📚 관련 글 추천:

  • iostat으로 Solaris 디스크 성능 분석하기
  • prstat로 Solaris 프로세스 모니터링하기
  • ZFS 성능 튜닝 완전 가이드
  • Solaris DTrace 활용법

🤝 궁금한 점이 있으시다면 댓글로 남겨주세요!

728x90