일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- #문법 #일본어 #일어 #일본
- #일본어문법 #ので문법 #n4문법 #이유표현 #정중표현 #jlpt #일본어공부 #비즈니스일본어 #실용일본어 #일본어중급
- #jlpt #n1 #일본어 #최고급문법 #일본어시험 #고급일본어 #실전연습 #문법정복 #문어체 #비즈니스일본어
- #여행한자 #일본여행 #일본어한자 #jlpt #일본어공부 #여행일본어 #한자학습 #실용일본어 #관광한자 #한자암기
- 태그: #여름한자 #계절한자 #일본어한자 #jlpt #일본어공부 #여름일본어 #한자학습 #실용일본어 #계절표현 #한자암기
- #간염 #b형 #간암 #절제 #간경화
- 태그: #미술한자 #일본어한자 #미술관일본어 #jlpt #일본어공부 #예술일본어 #한자학습 #실용일본어 #갤러리일본어 #미술감상
- #일본어문법 #のに문법 #n3문법 #대조표현 #양보표현 #jlpt #일본어공부 #감정표현 #실용일본어 #일본어중급
- #jlpt #n5 #일본어 #기초문법 #일본어시험 #초급일본어 #실전연습 #문법기초 #일본어회화 #일본어공부
- #일본어메일 #바로써먹는일본어 #일본어회화 #비즈니스일본어 #일본어공부 #실용일본어 #이메일매너 #일본어표현
- #일본어공부 #주차장일본어 #렌터카여행 #일본여행 #실용일본어 #여행일본어 #일본주차 #주차장표현 #일본어회화 #여행팁
- 태그: #반려동물한자 #펫케어일본어 #일본어한자 #jlpt #일본어공부 #반려동물일본어 #한자학습 #실용일본어 #펫샵일본어 #한자암기
- #하동여행 #삼성궁 #경남여행 #국내여행 #드라이브코스 #힐링여행 #단군성지 #하동가볼만한곳
- 태그: #일본어문법 #結果문법 #n3문법 #인과관계표현 #일본어회화 #jlpt #일본어공부 #고급문법 #비즈니스일본어 #학술일본어
- #일본여행 #환전일본어 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #여행준비
- #일본식당예약 #일본여행 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #일본맛집
- 태그: #일본식당일본어 #일본어회화 #바로써먹는일본어 #여행일본어 #실용일본어 #일본어공부 #식당표현 #점원일본어 #일본맛집 #여행준비
- 태그: #생활용품한자 #일본어한자 #jlpt #일본어공부 #생활일본어 #한자학습 #실용일본어 #일본생활 #한자암기 #일본쇼핑
- 태그: #jlpt #n3 #일본어 #중급문법 #일본어시험 #양보표현 #복합문법 #실전연습 #일본어회화 #일본어공부
- #jlpt #n4 #일본어 #중급문법 #일본어시험 #조건표현 #경어 #실전연습 #일본어회화 #일본어공부
- 태그: #일본사케 #ひやしぼり #사케리뷰 #최고금상 #프리미엄사케 #와인글래스사케 #일본술 #사케추천 #홈술 #사케페어링
- #나가사키여행 #메가네바시 #일본여행 #혼자여행 #포토스팟 #일본문화 #여행후기 #나가사키맛집 #안경다리 #일본관광
- #오토코야마 #남산사케 #홋카이도사케 #니혼슈 #일본술 #사케 #준마이다이긴죠 #몽드셀렉션 #삿포로여행 #사케추천 #일본여행선물 #이마트사케 #홋카이도여행
- #일본어문법 #たい문법 #n4문법 #희망표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #욕구표현
- #산마르짜노 #신퀀타 #블랙에디션 #이탈리아와인 #풀리아 #프리미티보 #네그로아마로 #풀바디와인 #베리향 #와인추천 #프리미엄와인 #와인리뷰 #이탈리아남부 #홈와인 #와인페어링
- #일본어문법 #を문법 #に문법 #조사완전정복 #n5문법 #일본어기초 #jlpt #일본어공부 #기초문법 #실용일본어
- #일본요리 #요리일본어 #일본어회화 #바로써먹는일본어 #생활일본어 #실용일본어 #일본어공부 #요리교실
- #일본어문법 #らしい문법 #n4문법 #추측표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #문법정복
- #일본어문법 #そうだ문법 #n4문법 #추측표현 #일본어회화 #jlpt #일본어공부 #중급문법 #실용일본어 #외견추측
- #일본어 #한자 #일어 #일본
Archives
- Today
- Total
일상과 여행 사이, 작은 발견들을 기록합니다
Solaris mpstat 완전 가이드 - CPU 성능 분석의 핵심 본문
728x90
반응형
Solaris mpstat 완전 가이드 - CPU 성능 분석의 핵심
📋 개요
mpstat는 Multi-Processor Statistics의 줄임말로, Solaris에서 CPU별 성능 통계를 제공하는 핵심 도구입니다. vmstat이 전체 시스템의 평균을 보여준다면, mpstat은 각 CPU 코어별로 상세한 정보를 제공합니다.
🔧 기본 사용법
기본 구문
mpstat [interval] [count]
mpstat [-aq] [interval [count]]
간단한 예시
# 현재 CPU 상태 1회 출력
mpstat
# 2초 간격으로 5번 출력
mpstat 2 5
# 모든 CPU에 대한 상세 정보
mpstat -a 1 3
📊 mpstat 출력 해석
기본 출력 형태
$ mpstat 2 3
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 0 0 0 516 274 562 7 1 1 0 887 12 5 0 83
1 0 0 0 89 45 234 2 0 0 0 445 8 3 0 89
2 0 0 0 102 58 198 1 0 1 0 321 5 2 0 93
3 0 0 0 95 52 176 0 1 0 0 289 6 4 0 90
각 필드 상세 설명
필드 설명 단위 정상 범위
CPU | CPU 번호 | - | 0부터 시작 |
minf | Minor Page Faults | 개/초 | < 100 |
mjf | Major Page Faults | 개/초 | 0 (이상적) |
xcal | Cross Calls | 개/초 | < 50 |
intr | Interrupts | 개/초 | 100-2000 |
ithr | Interrupt Threads | 개/초 | < intr |
csw | Context Switches | 개/초 | 100-1000 |
icsw | Involuntary Context Switches | 개/초 | < csw/2 |
migr | Thread Migrations | 개/초 | < 10 |
smtx | Spin Mutex Operations | 개/초 | < 50 |
srw | Readers/Writer Locks | 개/초 | < 10 |
syscl | System Calls | 개/초 | 100-5000 |
usr | User CPU Time | % | 가변 |
sys | System CPU Time | % | < 30 |
wt | Wait Time (I/O) | % | < 10 |
idl | Idle Time | % | > 70 (정상) |
🎯 주요 옵션들
-a 옵션: 모든 프로세서 표시
$ mpstat -a 2 3
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1 0 2 645 356 723 9 2 3 0 1124 15 7 1 77
1 0 0 1 112 67 289 3 1 1 0 578 10 4 0 86
2 0 0 0 98 54 201 1 0 2 0 445 7 3 0 90
3 1 0 1 104 61 185 2 1 0 0 398 9 5 0 85
all 0 0 1 240 135 350 4 1 2 0 636 10 5 0 85
특징:
- 각 CPU별 상세 통계
- 마지막에 전체 평균('all') 표시
- CPU 불균형 확인 가능
-q 옵션: 큐 통계 표시
$ mpstat -q 2 3
CPU runq_sz %runocc swpq_sz %swpocc
0 1.2 45 0.0 0
1 0.8 32 0.0 0
2 0.5 18 0.0 0
3 0.7 28 0.0 0
큐 통계 의미:
- runq_sz: 평균 실행 대기열 크기
- %runocc: 실행 대기열 점유율
- swpq_sz: 평균 스왑 대기열 크기
- %swpocc: 스왑 대기열 점유율
🔍 실제 시나리오 분석
시나리오 1: 균등한 부하 분산 (정상)
$ mpstat -a 1 5
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1 0 1 234 128 445 5 1 2 0 678 25 8 2 65
1 0 0 1 198 108 389 4 1 1 0 612 23 7 1 69
2 1 0 0 212 115 421 6 2 2 0 645 26 9 1 64
3 0 0 1 187 102 367 3 1 1 0 589 24 8 2 66
all 1 0 1 208 113 406 5 1 2 0 631 25 8 2 66
분석 포인트:
- ✅ 모든 CPU의 사용률이 비슷함 (25% 내외)
- ✅ 낮은 대기 시간 (wt 1-2%)
- ✅ 적절한 컨텍스트 스위치 (400대)
- ✅ 균등한 인터럽트 분산
시나리오 2: CPU 불균형 (문제 상황)
$ mpstat -a 1 5
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 15 2 12 1890 1245 2344 45 15 23 5 3456 85 12 1 2
1 1 0 0 145 78 234 2 1 1 0 445 8 3 0 89
2 0 0 1 123 65 198 1 0 2 0 321 5 2 0 93
3 1 0 0 134 71 189 1 1 0 0 298 6 4 0 90
all 4 1 3 573 365 741 12 4 7 1 1130 26 5 0 69
문제 분석:
- ⚠️ CPU 0이 과부하 상태 (usr=85%, sys=12%)
- ⚠️ CPU 0에 인터럽트 집중 (1890 vs 평균 145)
- ⚠️ 높은 페이지 폴트 (minf=15, mjf=2)
- ⚠️ 과다한 컨텍스트 스위치 (2344)
시나리오 3: I/O 대기 문제
$ mpstat -a 2 4
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 2 1 3 456 234 567 8 2 4 1 789 15 18 25 42
1 1 0 2 389 198 489 6 1 3 0 678 12 16 28 44
2 3 1 4 423 218 523 9 3 5 1 734 14 19 26 41
3 1 0 2 367 187 445 5 1 2 0 645 13 17 27 43
all 2 1 3 409 209 506 7 2 4 1 712 14 18 27 43
I/O 병목 징후:
- ⚠️ 높은 대기 시간 (wt 25-28%)
- ⚠️ 낮은 유휴 시간 (idl 40%대)
- ⚠️ 상대적으로 낮은 사용자 시간 (usr 12-15%)
- 💡 해결: I/O 성능 개선 필요
💡 고급 분석 기법
CPU Affinity 확인
# 특정 프로세스가 어느 CPU를 사용하는지 확인
pbind -q [PID]
# 프로세스를 특정 CPU에 바인딩
pbind -b 2 [PID] # CPU 2에 바인딩
# 바인딩 해제
pbind -u [PID]
인터럽트 분산 확인
# 인터럽트 분산 상태 확인
intrstat 1 5
# 네트워크 인터럽트 분산
dladm show-linkprop -p rxfanout
SMT (Simultaneous Multi-Threading) 상태 확인
# SMT 상태 확인
psrinfo -v | grep -E "Status|core"
# SMT 비활성화 (필요시)
psradm -f [cpu_id]
🛠️ 성능 최적화 전략
1. CPU 불균형 해결
인터럽트 분산 개선
# 네트워크 카드 인터럽트 분산 설정
# 예: 4개 CPU에 균등 분산
for i in 0 1 2 3; do
echo "CPU $i 인터럽트 설정..."
# 실제 설정은 하드웨어에 따라 다름
done
프로세스 CPU 바인딩
# 중요한 프로세스를 특정 CPU에 할당
# 예: 데이터베이스를 CPU 0-1에, 웹서버를 CPU 2-3에
pbind -b 0,1 $(pgrep oracle)
pbind -b 2,3 $(pgrep httpd)
2. 컨텍스트 스위치 최적화
프로세스 우선순위 조정
# CPU 집약적 작업의 우선순위 낮추기
renice +10 $(pgrep "batch_job")
# 중요한 서비스의 우선순위 높이기
renice -5 $(pgrep "critical_service")
스레드 풀 크기 조정
# Apache 워커 프로세스 수 최적화
# CPU 코어 수 × 2 정도가 일반적
cpu_count=$(psrinfo | wc -l)
recommended_workers=$((cpu_count * 2))
echo "Recommended Apache workers: $recommended_workers"
📋 간단한 모니터링 방법
CPU 불균형 감지
# 모든 CPU 사용률을 한눈에 확인
mpstat -a 1 1
# 80% 이상 사용하는 CPU 찾기
mpstat -a 1 1 | awk '$12+$13>80 && $1!="CPU" && $1!="all" {print "CPU"$1" overloaded: "$12+$13"%"}'
# CPU별 사용률 차이 확인
mpstat -a 1 3 | grep -v CPU
CPU 성능 트렌드 관찰
# 10분간 30초 간격으로 모니터링
mpstat -a 30 20
# 특정 CPU만 관찰 (예: CPU 0)
mpstat 1 | awk '$1 == 0 || NR == 1'
# 전체 시스템 평균만 보기
mpstat -a 1 5 | grep "all"
인터럽트 분산 상태 확인
# 인터럽트 수가 높은 CPU 찾기
mpstat -a 1 1 | awk '$5>1000 && $1!="CPU" && $1!="all" {print "CPU"$1" high interrupts: "$5"/sec"}'
# 인터럽트 분산 상세 확인
intrstat 1 5
# 네트워크 인터럽트 확인
netstat -i
🎯 문제 해결 가이드
높은 시스템 시간 (sys > 30%)
원인 분석:
# 시스템 콜이 많은 프로세스 확인
dtrace -n 'syscall:::entry { @[execname] = count(); }'
# I/O 집약적 프로세스 확인
iosnoop -D
해결 방안:
- I/O 성능 개선 (SSD, RAID 구성)
- 시스템 콜 최적화 (애플리케이션 튜닝)
- 버퍼 크기 조정
높은 컨텍스트 스위치 (csw > 2000)
원인 분석:
# 스레드가 많은 프로세스 확인
ps -eLo pid,nlwp,comm | sort -k2 -nr | head -10
# 스레드별 CPU 사용률
prstat -L 1 3
해결 방안:
- 스레드 풀 크기 최적화
- 프로세스 우선순위 조정
- CPU 바인딩 적용
CPU 불균형 (특정 CPU > 80%)
즉시 조치:
# 과부하 CPU의 프로세스 확인
prstat -c 1 3 # CPU별 프로세스 확인
# 인터럽트 재분산
# (실제 명령은 하드웨어에 따라 다름)
장기 해결책:
- 인터럽트 분산 설정
- 애플리케이션 아키텍처 개선
- 로드 밸런서 도입
📊 모니터링 베스트 프랙티스
일일 CPU 상태 점검
# 간단한 CPU 건강도 체크
mpstat -a 1 1 | awk '
/^[ ]*[0-9]+/ && $1 != "all" {
cpu=$1; usr=$12; sys=$13; wt=$14; idl=$15
total_util = usr + sys
if(total_util > 80) status="HIGH"
else if(total_util > 50) status="MEDIUM"
else status="LOW"
if(wt > 10) io_status="HIGH_WAIT"
else io_status="OK"
printf "CPU%s: %s load (%.1f%%), I/O wait: %s (%.1f%%)\n",
cpu, status, total_util, io_status, wt
}'
주간 성능 리포트 생성
#!/bin/bash
# weekly_cpu_report.sh
generate_weekly_report() {
local report_file="/var/log/cpu_weekly_$(date +%Y%m%d).log"
{
echo "=== Weekly CPU Performance Report ==="
echo "Report Period: $(date -d '7 days ago' +%Y-%m-%d) to $(date +%Y-%m-%d)"
echo ""
echo "=== Current CPU Configuration ==="
psrinfo -v | grep -E "Status|operates|core" | head -10
echo ""
echo "=== Average CPU Utilization (last 7 days) ==="
# sar 데이터가 있다면 활용
sar -u -f /var/adm/sa/sa* | grep "Average" | tail -7
echo ""
echo "=== Current CPU Balance ==="
mpstat -a 1 1
echo ""
echo "=== Recommendations ==="
echo "1. Monitor CPU balance daily"
echo "2. Check interrupt distribution weekly"
echo "3. Review process CPU binding monthly"
} > "$report_file"
echo "Weekly CPU report saved: $report_file"
}
# 실행
generate_weekly_report
📝 정리 및 핵심 포인트
🎯 반드시 확인해야 할 지표들
- CPU 사용률 균형: 모든 CPU가 비슷한 부하를 가져야 함
- 대기 시간 (wt): 10% 미만 유지
- 컨텍스트 스위치: CPU당 1000 미만 권장
- 인터럽트 분산: 특정 CPU에 집중되지 않아야 함
💡 실무 활용 팁
# 📊 현재 CPU 상태 빠른 확인
mpstat -a 1 1
# 🔍 CPU 불균형 감지
mpstat -a 1 3 | awk '$1 != "CPU" && $1 != "all" && $12+$13 > 80 {print "CPU"$1" overloaded:"$12+$13"%"}'
# 📈 5분간 트렌드 관찰
mpstat 30 10
# 🎯 특정 CPU만 모니터링 (예: CPU 0)
mpstat 1 | awk '$1 == 0'
🚨 주의해야 할 상황들
- usr + sys > 90%: CPU 과부하
- wt > 20%: I/O 병목
- csw > 5000: 과도한 컨텍스트 스위치
- mjf > 0: 메모리 부족으로 인한 스와핑
- CPU간 사용률 차이 > 30%: 불균형 상태
mpstat은 CPU 성능 분석의 핵심 도구입니다. 정기적인 모니터링을 통해 시스템의 CPU 상태를 파악하고, 문제를 조기에 발견하여 대응하세요! 🚀
728x90
'Oracle_Unix_Server' 카테고리의 다른 글
Solaris 환경 변수(env) 완벽 가이드 (0) | 2025.10.15 |
---|---|
Solaris Volume Manager (SVM) 개요 및 이론 (0) | 2025.10.14 |
Solaris MDB memstat으로 메모리 사용량 완벽 분석하기 (1) | 2025.09.26 |
Solaris vmstat 완전 가이드 (0) | 2025.09.26 |
Solaris 성능 분석 완벽 가이드 (0) | 2025.09.26 |