실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

36
실무로 배우는 시스템 성능 최적화 서버 OS 모니터링 기본방향, CPU, 메모리

Upload: sung-gon-song

Post on 13-Jan-2017

267 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

실무로 배우는 시스템 성능 최적화

서버 OS 모니터링기본방향, CPU, 메모리

Page 2: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

1장 기본방향

Page 3: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

자원사용률

❖ 서버 자원 사용률 확인 시 중점 점검 항목

CPUCPU자원은 부족한가? 실행 큐(Run queue)가 얼마나 쌓였는가?

CPU사용 유형 중 System이나 wait의 사용률이 높은가? 프로세스별 CPU 사용률 분포는 균등한가?

MEMORY메모리가 부족한가?(스압이 발생하고 있는가? 메모리 서버 전체 또는 개별 프로세스 단위로 메모리 사용량이 지속적으로 증가하는가? 파일 캐시 영역으로 사용하는 메모리량은 얼마인가?

DISK디스크의 서비스 시간은 디스크 대기시간을 포함해서 얼마인가? 특정 디스크로 입출력이 집중됐는가?

파일시스템 중 공간이 부족한 곳은 있는가? 스토리지 채널 병목이 있는가?

NETWORK네트워크 테이터 전송량은 얼마인가?

네트워크 재전송량이 많은가?

RTT(Round–Trip Time) 시간이 높은가?

Page 4: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

모니터링 도구❖ 운영체제별 모니터링 도구

OS IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우

통합nmontopastop

GlancePlus(명령어: glance)top

topnmontophtop

Permon작업 관리자

리소스관리자

기타

filemon(파일 입출력)tprof(CPU프로파일링)fcstat Caliper(프로파일링)

prstat(프로세스)

mpstat(CPU)

perf(프로파일링)

mpstat(CPU)

iotop

ProcExpProcessHacker

기타 공통

vmstat(CPU, 메모리)sar(CPU, 메모리,디스크, IPC, 캐시, 스왑 등)iostat(디스크 입출력)netstat(네트워크 입출력)nfsstat(nfs 입출력)

Page 5: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

자원 모니터링 로그를 남겨서 분석 시❖ 모니터링간격은5초나 10초간격으로 한다

➢ 대부분의 모니터링도구는 자원사용률을 구할 때 측정간격동안의 평균값을 기록하는 경우가 많다. 그래서 모니터링 간격을 5분이나 1분으로 설정한다면 실제는 주기적으로 CPU가 100% 사용하는 경우가 발생하더라도 측정된 로그에서는 평균 값으로 인해 보이지 않는다. 따라서 자원 모니터링을 할 때는 5초나 10초 간격으로 수집하는 것이 적당하다.

❖ 자원 사용률 분석은 그래프를 통해 분석하는 것이 효과적이다 .➢ 수치로는 잘 보이지 않는 규칙적인 패턴이나 현상이 그래프 상에서는 잘 드러날뿐더러 개선 전후 효과를

표현하는 데도 효과적이다.

Page 6: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2장 CPU

Page 7: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.1 사용량 분석❖ 안정적인 운영을 위한 CPU 사용률 기준

➢ CPU 사용률 70% 이하

➢ CPU 실행 큐 : CPU(코어)당 평균 3개 이하

❖ CPU 사용량 상세 분석➢ System : 커널 모드 시스템 콜 호출에 사용된cpu 사용량이다. 시스템 콜은 일과 네트워크의 관리와 입출력 처리, 시스템 정보와 시간

관리 등에 관련된 함수다.

➢ User : 일반 함수를 실행하는 데 사용된 CPU 사용량이다.

➢ IO Wait : 프로세스나 스레드가 CPU를 할당받아 사용할 수 있는 상태가 됐으나 현재 입출력이 완료되기를 기

다라고 있어 CPU를 사용할수 없는 상태의 사용량이다.

➢ Idle : 사용하지 않는 CPU 여유율이다.

❖ 가상화 CPU 사용률➢ 동적 파티션(Dynanic partition)을 구성하면서 각 파티션의 CPU 최대 사용량 합이

100%를 넘게 설정한 경우에는 모니터링 도구에 보이는 CPU 사용률이 100% 이하지만 실제는 CPU

를 100% 사용해 병목이 발생하고 있을 수도 있다.

Page 8: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.2 CPU확인CPU 개수 및 종류 확인

커널 처리 비트 확인

IBM AIX HP-UX 오라클 솔라리스 리눅스

lsdev -Cc processorlparstat -ilgrep "Active Phys" ioscan -fnC processor psrinfo -pv cat /proc/cpuinfo

IBM AIX HP-UX 오라클 솔라리스 리눅스

bootinfo -K getconf KERNEL_BITS isainfo —kw getconf WORD_BIT

Page 9: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.3 동시 다중 쓰레딩SMT를 적용해 성능이 개선되더라도 통상 20% 내외에서 개선되고 간혹 성능 개선 효과가 없거나 저하되는 경우도 있다. 인텔 CPU를 사용하는 HP 서버나 마이크로소프트 원도우에서는 하이퍼 스레딩(HyperThreading)이라는 용어를 사용하는데, 사실상 하이퍼 스레딩도 SMT의 한 형태라고 보면 된다.

SMT동작 여부 확인

https://bugzilla.redhat.com/show_bug.cgi?id=98333

IBM AIX HP-UX 오라클 솔라리스 리눅스

smtctl kctune | grep lcpu_attr설정) 1(설정), 0(미설정)

코어 수 : psrinfo -p가상프로세스 수 : psrinfo -pv cat /proc/cpuinfo

Page 10: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.4 CPU를 많이 사용하는 쓰레드 식별하기❖ CPU 과점 현상의 비정상 및 개선 여부를 판단

➢ CPU를 많이 사용하는 프로세스 식별 (5장 참조)

➢ 프로세스에서 CPU를 과점하고 있는 스레드 식별

➢ 스택정보와 시스템 콜모니터링을 통해 스레드 내부작업 내용을 확인(pstack, jstack, truss)

❖ 프로세스 내에서 각 스레드별로 CPU 사용량

➢ IBM AIX 명령 : ps -mp [pid] -o THREAD

➢ HP-UX명령 : glance실행 -> s키 -> 대상PID 입력 ->G 키(프로세스의 스레드 상태)

➢ 오라클 솔라리스 명령 : prstat -Lm -p [pid]

Page 11: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.5 프로세스의 누적 CPU 사용량 확인하기

Thread ID

CPU사용률

Thread개수

누적 CPU사용률

Thread ID

Page 12: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

2.6 CPU를 많이 사용하는 모듈(코드) 식별하기각 운영체제마다 현재 실행 중인 프로그램의 CPU 사용량을 프로파일링할 수 있는 도구를 제공한다. 이 같은 도구는 C/C++의gprof와 다르게 컴파일 단계에서 다버그 모드로 생성하지 않는 모듈도 가능하기에 편리하지만 gprof 같이 소스에 줄 단위까지 상세하게 프로파일링되지는 않는다.

OS별 CPU 프로파일링 도구

IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우

tрrof caliper (ITANIUM)prospect (PA-RISC) perf xperf

WPR, WPA

Page 13: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

공통

❖ CPU를 많이 사용하는 코드를 식별➢ pstack같은 명령으로 스택을 반복적으로 수집해서 분석➢ 최상위 스택에 있는 함수를 분류해 발생 빈도 비중을 분석하면 성능 영향도가 높은 함수 확인 가능

❖ 성능저하 원인에서 제외할 함수➢ CPU를 거의 사용하지 않는 함수는 제외➢ 네트워크 응답 대기에 해당하는 read, recv, select, poll, connect 함수

■ 비대기 입출력이나 비동기 입출력을 사용하는 경우에는 read, recv가 많이 나타난다면 함수 내에서 입출력 대기가 없으므로 이 또한 CPU를 많이 사용하는 코드로 분류 필요

➢ 락 대기인 wait, lock 같은 함수➢ 하는 일이 없는 sleep성격의 함수

Page 14: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

tproftрrof는 AIX에서 프로세스와 라이브러리, 함수별 cpu 사용량을 모니터링할 수 있는 유용한 도구다.

$ tprof [options] - x [process command]x : tprof 에 의해 실행될 프로그램(processcommand)을 지정하며, 이 프로그램이 종료되면 tprof도 종료된다. 그 래서보통은 모니터링 간격을 조정하기 위해seep 100처럼 지정하고 특정 프로그램을 모니터링할 때는 -p 나 -P옵션을 추가로 지정한다.r : 프로파일에서 생성되는 모든 파일에 사용되는 파일명으로 지정되지 않으면 -x 옵션에 지정된 프로세스명을 사용한다.s : 공유 라이브러리 프로파일링j : 자바 클래스와 메서드 프로파일링I : 바이너리 명령이 수집되게 한다.R : SMT 모드일때 사용한다.N : 소스 줄 정보 수집p : 특정프로세스를 프로파일링할 경우 프로세스명 지정(목록을 지정할 수 있음)P : 특정프로세스를 프로파일링할 경우 PID 지정(목록을 지정할 수 있음)

사용예) tprof-kseu -R -1 -r monitor_all -x sleep 60 <- 60초 동안 시스템 전반을 모니터링자바를 프로파일링하는 경우 자바의 실행 옵션에 -Xrunjpa:source=1, instructions=1을 추가한다.

사용예) tprof - kseuj -N -I -x java -Xrunjpa:source=1, instructions=1 TestPgm <- 자바 프로파일링tprof가 종료된 후 결과는 -r로 지정된 명칭이나 -x에 지정된 프로세스명 뒤에 “.prof”확장자를 가진 파일에서 확인한다.

Page 15: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Calipercaliper는 HP-UX나 Linux에서 수행되는 애플리케이션에 대해 범용으로 성능을 분석할수있게 지원하는 도구이다. caliper는 강력한 모니터링 도구로서 다양한 옵션을 제공하지만 PA-Risc프로세서를 사용하는 서버는 지원하지 않는다.

대표 방식 설명

cstack 샘플링 방식으로 콜 스택에 대한 프로파일링 측정

fprof 함수 호출에 대한 프로파일링 측정

scgprof PMU 샘플링을 통한 함수 호출에 대한 호출그래프 프로파일링 측정

fcount 프로그램의 함수 호출 횟수 프로파일링 측정

cpu 샘플링을 통한 CPU 이벤트에 프로세스별 메트릭 측정

Overview 한 번 실행해서 fprof, cstack, dcache 를 모두 측정

Page 16: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Caliper - cont.명령) caliper [measurement] [options] [pid] [pid...] ← 실행중인 프로그램 PID로 측정caliper [measurement] [options] [program] [arguments] ← 프로그램 실행해 측정 caliper [measurement] [options] - w ← 시스템 전반에 대한 측정

-o : 측정 결과를 저장할 파일명을 지정-p : 사용자 계정이나 프로세스명을 지정하면 해당 사용자나 프로세스에 대해서만 측정을 수행-e : 측정시간 간격(초 단위)

사용예) caliper cstack -e60 -o callstack.txt 1234 ← PID가 1234인 프로세스에 대해 cstack을 60초간 측정해 callstack.txt 파일로 생성

Page 17: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

perf리눅스 커널에 포함되어 있는 도구로서 다양한 성능측정 기법을 제공한다. CPU와 함께 제공되는 PMU(Performance Monitoring Unit)를 이용해 성능을 측정하지만 PMU가 지원되지 않더라도 이벤트 추적 기법을 이용해 제한적인 측정이 가능하다.

서브명령 설명

stat 단일 프로그램이나 시스템 전체에 대해 일정 시간 동안 이벤트 개수를 측정한다.

top 가장 성능 영향도가 큰 함수를 측정해서 보여준다.

record 단일 프로그램에 샘플링 데이터를 측정하고 저장한다.

report perf record로 생성된 파일을 기반으로 분석해 프로세스나 함수 단위로 이벤트 값을 보여준다

annotate 분석하기 쉽게 소스나 어셈블리에 이벤트 측정값으로 주석을 추가한다.

list 사용 가능한 모든 이벤트를 보여준다.

Page 18: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Perf top

Page 19: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Perf record / perf report[root@n1 ~]# perf record -p 4378 -o java.perf.data [root@n1 ~]# perf report -i java.perf.data

GC에서 CPU를 많이 사용하는 경우에는 자바 VM 라이브러리인 libjvm.so의 CPU 사용률이 높게 나타난다.

참조 : http://www.brendangregg.com/perf.html

Ctrl-C

Page 20: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Xperfxperf는 원도우 비스타와 원도우 서버 2008 이상에서 사용할 수 있는 성능 모니터링 도구다.

❏ 설치

❏ 윈도우 SDK를 내려받아 Windows Performance Toolkit(WPT)를 설치하면 사용이 가능하다.❏ 기능

❏ CPU뿐만 아니라 메모리, 디스크, 네트워크 입출력 등 다양한 구성항목에 대한 모니터링이 가능❏ 구성

❏ Xperf : 성능 데이터 수집을 제어❏ Xperfview : 수집된 자료를 분석

❏ 심볼 정보 등록❏ xperf를 실행하기에 앞서 함수명을 식별할 수 있게 심볼 정보를 등록

set _NT_SYMBOL_PATH=C:\Symbols; srv*c:\Symbols*http://msdl.microsoft.com/download/symbols

Page 21: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

Xperf - cont.❏ xperf -providers : 모니터링 가능한 Provider를 확인하는 명령❏ 시작 명령 : xperf - on base - stackwalk profile

base - 사전에 정의된 수집이벤트들의 그룹 명칭slackwalk - 이벤트 수집시 프로그램 스택도 함께 수집하는 조건

❏ 종료 명령: xperf - d [수집 로그 파일명].etl❏ 분석 명령 : xperfview [수집 로그 파일명].etl

윈도우 서버 2008 R2를 비롯해 윈도우7과 8에서는 XPerf 대신 WPR(Windows Performance Recorder)와 WPA(Windows Performance Analyzer)가 제공된다. 이 도구는 xperf와 동일하게 Windows Performance Toolkit의 5.0버전부터 포함돼 있다.

구분 WPT4.0 WPT5.0

성능 수집 Xperf.exe WPRUI.exe, WPR.exe

성능 분석 Xperfyiew.exe WPA.exe

지원 운영체제 윈도우 XP, 비스타윈도우 서버 2003 ~ 2008

윈도우 7, 8윈도우 서버 2008 R2 이후

Page 22: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3장 MEMORY

Page 23: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

메모리 부족과 성능 영향운영체제 측면의 메모리 부족여부와 성능 영향도

- 페이징 스페이스에 대한 스왑 발생 여부로 판단하며, 추가로 메모리는 각 소프트웨어 솔루션의 메모리 사용 방식을 이해하고 성능을 분석하는 작업이 필요

자바 기반 솔루션의 경우

설정한 최대 힙 메모리 이상을 사용하지 않기 때문에 최대 힙 메모리가 운영체제의 메모리 부족이 발생할 가능성은 낮다.

한정된 힙 메모리 내에서 동작하기 때문에 대량의 데이터 처리와 빈번한 GC로 인한 성능 저하가 유발될 가능성이 있다.

힙 메모리를 과하게 크게 설정한 경우에는 메모리를 청소하는 GC작업으로 순간 순간 멈추는 시간이 길어져 서비스 안정성이 떨어질수 있다.

오라클 버퍼캐시처럼 데이터 베이스의 경우

메모리에 최근에 사용한 데이터 블록을 캐시해서 재사용하는 알고리즘

캐시의 메모리 크기가 너무 적게 설정된 경우캐시 적중률이 떨어져 디스크에서 데이터 블록을 읽어와야하는 빈도가 늘어나 성능 저하 유발

캐시를 크게 설정해 운영체제에서 스왈이 발생하게 되면 오히려 작게 설정한 것보다 성능이 더욱 악화되어 서비스가 거의 멈추는 상태 유발

Page 24: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.1 가상 메모리❖ 페이징 스페이스

➢ 운영체제는 상대적으로 값싼 디스크를 보조 메모리로 사용하는 방식을 사용하고 있다. 디스크의 일정공간을 할당해 보조 메모리 용도로 사용

❖ 스와핑

➢ CPU 사용 빈도가 낮은 프로세스의 메인 메모리 사용 부분을 페이징스페이스 부분으로 옮겨 여유 메모리를 확보한 후 사용할 페이징스페이스 부분을 메인 메모리로 로드해서 사용

❖ 활성 가상메모리(Active virtual memory) ➢ CPU가 직접 접근할 수 있는 메인 메모리

❖ 비활성 가상메모리(Inactive virtual memory)➢ 페이징스페이스

❖ 가상메모리 주소➢ 프로세스 내에서만 유효한 주소다. 각 프로세스는 가상메모리 주소와 실제 주소 간의 매핑테이블을 가지고

있어 가상메모리 주소로 실제 주소를 찾아갈 수 있게 돼 있다. ❖ 실제 메모리 주소

➢ 메인 메모리와 페이징 스페이스의 주소.

Page 25: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.2 메모리관련 주요 용어페이징스페이스

페이징스페이스는 메인 메모리가 부족할 때 사용하는 디스크 공간으로, 스왑스페이스라고도 한다.

시스템 성능 관점에서 보면 페이징스페이스는 디스크에 프로세스 메모리를 쓰고, 읽는 스와핑 작업으로 인해 메모리 접근만으로 처리될 때에 비해 큰 성능 저하가 발생한다. 따라서 스와핑이 발생하지 않도록 메모리 여유율을 유지하는 것이 성능에 중요하다.

페이징스페이스 크기 확인

IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우

lsps -asvmon /sbin/swapinfo swap -s

swap -lswapon -scat /proc/swaps 작업관리자

Page 26: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.2 메모리관련 주요 용어-cont.페이징(Paging)

가상 메모리 체계에서는 운영체제가 인식하는 일정한 크기(4KB, 64KB)의 데이터 기록 단위를 페이지라고 한다. 메인 메모리로부터 한 페이지의 데이터를 보조 기억장치(디스크)로 복사하거나 보조 기억장치로부터 메인 메모리로 로드하는 것을 페이징이라고 한다.

메모리 페이지 크기 확인

IBM AIX HP-UX 오라클 솔라리스 리눅스

pagesize dmesg pagesize getconf PAGESIZE

Page 27: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.2 메모리관련 주요 용어-cont.스와핑(swapping)

스와핑은 프로세스가 사용하는 메모리 일부를 페이징스페이스로 옮기거나 페이징스페이스로부터 메모리로 로드하는 것을 가리킨다.

페이지 부재(Page Fault)

페이징 방식의 가상메모리에서 CPU가 사용하려는 페이지가 메인 메모리에 없는 경우다. 사용하려 는 가상 메모리 주소에 해당하는 페이지를 매핑 테이블에서 주소 변환할 때 해당 페이지가 메인 메모리에 없다고 표시되 있으면 페이지 부재가 발생한다.

페이지 인(Page In)

가상 메모리에서 페이지 부재가 일어났을 때 디스크에 있는 프로그램이나 데이터를 메모리로 로드 하는 것이다.

Page 28: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.2 메모리관련 주요 용어-cont.페이지아웃(Page Out)

가상 메모리에서 페이지부재가 발생했을 때 메모리가 부족하면 페이지스틸러(Page stealer)는 기존 메모리를 디스크로 기록하는 페이지 아웃이라는 작업을 수행한다. 기록 대상 메모리가 프로세스의 작업세그먼트(Work segment)영역에 있는 메모리면 페이징 스페이스로 기록하고, 파일에서 읽어들인 내용(Permanent segment)인 경우 페이지의 내용이 변경됐으면 디스크의 해당 파일에 기록하고 그렇지 않으면 소멸시킨다.

페이지 스캔율(Page Scan Rate)

운영체제는 일정량의 여유 페이지(Free page)를 확보해서 필요할 경우 즉시 제공하기 위해 페이지 스캔(Page scan)이라는 검색을 통해 해제함으로써 여분으로 확보할 페이지를 찾는다. 여유 페이지 목록(Free page list) 임계치보다 여유 페이지 수가 줄어들면 메모리 관리자는 기존의 페이지 인된 것 중에서 LRU 알고리즘 검색을 통해 페이지 아웃이 가능한 것을 찾아 페이지 아웃시킨 후 여유 페이지로 변경한다. 여기서 페이지 아웃이 가능한 페이지를 탐색하는 빈도를 의미하는 페이지 스캔률 이 나오는데 반도가 높다는 것은 해제할 페이지가 넉넉하지 못하기 때문에 자주 메모리를 탐색해야 한다는 의미로 볼 수 있다.

Page 29: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.3 사용량 분석서버메모리는 용도에 따라 파일캐시, IPC, 프로세스 메모리로 나뉜다. 따라서 메모리가 부족한 것으로 모니터링되어 사용량을 줄여야 한다면 세가지 부분으로 나뉘어 메모리 사용량을 분석해 줄일수있는 부분을 찾아야 한다.

❖ 안정적 운영을 위한 메모리 판단 기준➢ 메모리 사용률 100% 이하➢ 지속적으로 프로세스 스와핑이 발생하면 메모리 부족

(페이지스캔률이 지속적으로 발생하면서 페이지 이웃이 발생하는 상태)❖ 이중화 서버 메모리 운용 용량

➢ RAC로 구성된 오리클 서버의 경우 한 서버의 서비스가 중단됐을 때 SGA의 메모리 사용량은 큰 변 화가 없으나 DB 연결이 한 서버로 몰리면서 PGA 사용량은 크게 증가되므로 여유율 확보 필요

➢ Tuxedo 서버의 경우에도 한 서버로 서비스가 집중되면 서비스 프로세스 수가 증가해 전체적인 메모리 사용량이 증가되므로 여유율 확보 필요

Page 30: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

vmstat구분 항목/설명

procsr(run-queue) CPU 할당 대기 중인 프로세스/스레드 수b(blocking) 입출력이나 페이징으로 대기 중인 수

memory

swpd 가상 메모리 사용 페이지 수free 메인 메모리의 여유 페이지 수buff(buffer) 파일 입출력 관련 캐시인 버퍼의 사용 페이지 수cache 실행 이미지(파일)를 캐시하는 데 사용한 메모리 페이지 수

swар si(swap in) 초당 페이징스페이스에서 읽은 양so(Swap Out) 초당 페이징스페이스로 쓴 양

io bi(block in) 초당 블록 디바이스에서 읽은 양bo(block out) 초당 블록 디바이스로 쓴 양

system in 초당 인터럽트 발생 횟수cs 초당 컨텍스트 스위칭 발생 횟수

cpu

us user CPU 사용률sy system CPU 사용률id CPU 여유률wa IO wait CPU 사용률

Page 31: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

파일 캐시파일 캐시는 운영체제에서 디스크 입출력 성능 개선을 위해 사용한 파일을 메모리상에 캐시해 디스크 입출력을 줄이는 것이다. 파일캐시에서 성능상 문제가 생기는 것은 캐시를 전체 운영체제 메모리 대비 너무 많이 사용함으로써 프로세스가 사용할 메모리가 부족한 상황이 발생하는 것이다.

DB 서버는 데이터 버퍼(Data Buffer)라는 내부 캐시가 있어 운영체제 파일 캐시를 크게 설정할 필요가 없고, 특히 Raw device를 사용한다면 파일 캐시를 사용하지 않으므로 설정해도 성능 개선이 되지 않는다. 오히려 메모리 부족 현상으로 DB 사용 메모리가 페이징스페이스로 내려가는 상황이 발생하면 급격한 성능 저하가 발생한다. WAS 서버의 경우에도 파일 카시에 의한 성능 개선 사례는 지금까지 경험한 적이 없을 정도로 성능에 큰 영향을 미치지는 않는다. 따라서 파일 캐시는 전체 메모리 대비 최대 크기를 30% 이하로 유지 하는 것을 권고한다. 파일 캐시 크기는 최솟값과 최댓값으로 설정하는데 최솟값까지는 프로세스가 사용하는 메모리가 부족한 상황이 되면 파일 캐시가 사용하는 메모리를 프로세스용으로 반납한다.

IBM AIX HP-UX 오라클 솔라리스 리눅스

vmstat -v kctune | grep filecachekcusage -ht filecache_max

sysdef -i | grep bufhwmecho ::memstat | mdb - k

/proc/sys/vm/buffermem (?)sysctl -w vm.drop_caches=3(운용시스템에서는 inodes lock 주의)free -m

Page 32: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

IPC(Inter-Process Communication)IPC는 프로세스 간에 데이터를 공유하거나 통신할 때 사용하는 여러 방식을 통칭하는 용어다. 프로세스간 메시지 전송 동기화, 데이터 공유, 원격 프로시저 호출용도로 분류해 파일 파이프, 소켓, 메시지 큐. 세마포어, 공유 메모리, 메모리 맵드 파일 등이 있다. 이 가운데 대표적으로 프로세스 메모리와 분리되어 메모리를 사용하는 대표적인 IPC가 메시지큐 세마포어, 공유 메모리다.

Page 33: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

프로세스

프로세스 파일 캐시와 IPC용으로 사용 중인 메모리를 제외하면 대부분은 프로세스가 직접 사용하는 메모리다. 그래서 메모리가 부족할 때는 IPC나 파일 캐시도 보지만 어떤 유저와 프로세스 유형들이 메모리 를 많이 사용하는지 분석한다.

오라클 DB를 예로 들면 IPC인 공유메모리를 사용하는 SGA(System Global Area)가 가장 많은 메모리를 사용하겠지만 그에 못지 않게 개별DB 처리 프로세스가 사용하는 PGA(Program Global Area) 메모리 사용량이 많다. 대형 시스템의 경우 DB 서버 한 대에 수천 개의 DB 연결이 맺어져 있는 경우도 있는데 DB 프로세 스 하나가 10MB씩만 메모리를 사용해도 수십 GB에 달하는 메모리가 사용된다. 이 상황에서 메모 리가 부족하다면 SGA의 메모리 축소 가능성도 검토하겠지만 먼저 DB 연결 수를 줄여서 메모리를 절약하는 방안을 검토할 것이다.

Page 34: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.4 메모리 확인프로세스 메모리 사용량 확인

공통 AIX HP-UX 솔라리스 리눅스 윈도우

pmap <pid>

ps aux <pid>svmon -P <pid>svmon -U <userid>svmon -G

UNIX95= ps -e -o "user, pcpu, cpu, Vsz,pid,ppid, args" | sort -rnk4

prstat ps -eufps –e -orss=, S1ze=, args=

작업관리자procexp, processhacker

Page 35: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

ps❖ AIX ps

➢ SZE : 프로세스 데이터 세션의 가상 메모리 사용 크기(v) ➢ SZ : 프로세스 코어 이미지 크기(-) ➢ SSZ : 커널 스택의 크기(s), 멀티 스레드 프로그램은 이 값이 항상 0이다. ➢ TRS : 텍스트 세션 실제 메모리 사용크기(v) ➢ RSS : 프로세스의 실제 메모리 사용 크기(v)

❖ HP-UX ps ➢ SZ : 프로세스 코어 이미지의 실제 메모리 사용 크기로

텍스트, 데이터, 스택공간을 포함한다(-) (단위 페이지)

➢ VSZ : 프로세스의 가상 메모리 사용 크기(-ovsz)

가상 메모리사용량 실제 물리 메모리

사용량

Page 36: 실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장

3.4 메모리 확인❖ 메인 메모리 총량 확인 명령

운영체제 명령어

IBM AIX lsattr -El mem0bootinfo -r

HP-UX dmesgmachininfo

오라클 솔라리스 prtconf

리눅스cat /proc/meminfofree -m