Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
실무로 배우는 시스템 성능 최적화
서버 OS 모니터링
기본방향, CPU, 메모리
1장 기본방향
자원사용률
❖ 서버 자원 사용률 확인 시 중점 점검 항목
CPU
CPU자원은 부족한가? 실행 큐(Run queue)가 얼마나 쌓였는가?
CPU사용 유형 중 System이나 wait의 사용률이 높은가? 프로세스별 CPU ...
모니터링 도구
❖ 운영체제별 모니터링 도구
OS IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우
통합
nmon
topas
top
GlancePlus
(명령어: glance)
top
top
nmon
top
htop...
자원 모니터링 로그를 남겨서 분석 시
❖ 모니터링간격은5초나 10초간격으로 한다
➢ 대부분의 모니터링도구는 자원사용률을 구할 때 측정간격동안의 평균값을 기록하는 경우가 많다. 그래서
모니터링 간격을 5분이나 1분으로 설...
2장 CPU
2.1 사용량 분석
❖ 안정적인 운영을 위한 CPU 사용률 기준
➢ CPU 사용률 70% 이하
➢ CPU 실행 큐 : CPU(코어)당 평균 3개 이하
❖ CPU 사용량 상세 분석
➢ System : 커널 모드 시스템 콜...
2.2 CPU확인
CPU 개수 및 종류 확인
커널 처리 비트 확인
IBM AIX HP-UX 오라클 솔라리스 리눅스
lsdev -Cc processor
lparstat -ilgrep "Active Phys"
ioscan ...
2.3 동시 다중 쓰레딩
SMT를 적용해 성능이 개선되더라도 통상 20% 내외에서 개선되고 간혹 성능 개선 효과가 없거나 저하되는 경우도 있다. 인텔
CPU를 사용하는 HP 서버나 마이크로소프트원도우에서는하이퍼 스레딩(...
2.4 CPU를 많이 사용하는 쓰레드 식별하기
❖ CPU 과점 현상의 비정상 및 개선 여부를 판단
➢ CPU를 많이 사용하는프로세스식별 (5장 참조)
➢ 프로세스에서CPU를 과점하고있는 스레드 식별
➢ 스택정보와시스템 ...
2.5 프로세스의 누적 CPU 사용량 확인하기
Thread ID
CPU사용률
Thread개수
누적 CPU사용률
Thread ID
2.6 CPU를 많이 사용하는 모듈(코드) 식별하기
각 운영체제마다 현재 실행 중인 프로그램의 CPU 사용량을 프로파일링할 수 있는 도구를 제공한다. 이 같은 도구는
C/C++의gprof와 다르게 컴파일 단계에서 다버그...
공통
❖ CPU를 많이 사용하는 코드를 식별
➢ pstack같은 명령으로 스택을 반복적으로 수집해서 분석
➢ 최상위 스택에 있는 함수를 분류해 발생 빈도 비중을 분석하면 성능 영향도가 높은 함수 확인 가능
❖ 성능저하 ...
tprof
tрrof는 AIX에서 프로세스와 라이브러리, 함수별 cpu 사용량을 모니터링할 수 있는 유용한 도구다.
$ tprof [options] - x [process command]
x : tprof 에 의해 실행...
Caliper
caliper는 HP-UX나 Linux에서 수행되는 애플리케이션에 대해 범용으로 성능을 분석할수있게 지원하는 도구이다. caliper는
강력한 모니터링 도구로서 다양한 옵션을 제공하지만 PA-Risc프로세...
Caliper - cont.
명령)
caliper [measurement] [options] [pid] [pid...] ← 실행중인 프로그램 PID로 측정
caliper [measurement] [options] [pr...
perf
리눅스 커널에 포함되어 있는 도구로서 다양한 성능측정 기법을 제공한다. CPU와 함께 제공되는 PMU(Performance
Monitoring Unit)를 이용해 성능을 측정하지만 PMU가 지원되지 않더라도 이...
Perf top
Perf record / perf report
[root@n1 ~]# perf record -p 4378 -o java.perf.data [root@n1 ~]# perf report -i java.perf.data
GC...
Xperf
xperf는 원도우 비스타와 원도우 서버 2008 이상에서 사용할 수 있는 성능 모니터링 도구다.
❏ 설치
❏ 윈도우 SDK를 내려받아 Windows Performance Toolkit(WPT)를 설치하면 사...
Xperf - cont.
❏ xperf -providers : 모니터링 가능한 Provider를 확인하는 명령
❏ 시작 명령 : xperf - on base - stackwalk profile
base - 사전에 정의된...
3장 MEMORY
메모리 부족과 성능 영향
운영체제 측면의 메모리 부족여부와 성능 영향도
- 페이징 스페이스에 대한 스왑 발생 여부로 판단하며, 추가로 메모리는 각 소프트웨어 솔루션의 메모리 사용 방식을 이해하고 성능을 분석하는 작업이
...
3.1 가상 메모리
❖ 페이징 스페이스
➢ 운영체제는 상대적으로 값싼 디스크를 보조 메모리로 사용하는 방식을 사용하고 있다. 디스크의 일정공간을
할당해 보조 메모리 용도로 사용
❖ 스와핑
➢ CPU 사용 빈도가 낮은 프...
3.2 메모리관련 주요 용어
페이징스페이스
페이징스페이스는메인 메모리가 부족할 때 사용하는 디스크 공간으로, 스왑스페이스라고도한다.
시스템 성능 관점에서 보면 페이징스페이스는디스크에 프로세스 메모리를 쓰고, 읽는 스와핑...
3.2 메모리관련 주요 용어-cont.
페이징(Paging)
가상 메모리 체계에서는 운영체제가 인식하는 일정한 크기(4KB, 64KB)의 데이터 기록 단위를 페이지라고 한다. 메인 메모리로부터한 페이지의
데이터를 보조 ...
3.2 메모리관련 주요 용어-cont.
스와핑(swapping)
스와핑은 프로세스가 사용하는 메모리 일부를 페이징스페이스로옮기거나 페이징스페이스로부터메모리로 로드하는 것을 가리킨다.
페이지 부재(Page Fault)
페...
3.2 메모리관련 주요 용어-cont.
페이지아웃(Page Out)
가상 메모리에서 페이지부재가발생했을 때 메모리가 부족하면 페이지스틸러(Page stealer)는 기존 메모리를 디스크로 기록하는 페이지 아웃이라는
작업...
3.3 사용량 분석
서버메모리는 용도에 따라 파일캐시, IPC, 프로세스 메모리로 나뉜다. 따라서 메모리가 부족한 것으로 모니터링되어
사용량을 줄여야 한다면 세가지 부분으로 나뉘어 메모리 사용량을 분석해 줄일수있는 부분...
vmstat
구분 항목/설명
procs
r(run-queue) CPU 할당 대기 중인 프로세스/스레드 수
b(blocking) 입출력이나 페이징으로 대기 중인 수
memory
swpd 가상 메모리 사용 페이지 수
fre...
파일 캐시
파일 캐시는 운영체제에서 디스크 입출력 성능 개선을 위해 사용한 파일을 메모리상에 캐시해 디스크 입출력을 줄이는
것이다. 파일캐시에서 성능상 문제가 생기는 것은 캐시를 전체 운영체제 메모리 대비 너무 많이 사...
IPC(Inter-Process Communication)
IPC는 프로세스 간에 데이터를 공유하거나 통신할 때 사용하는 여러 방식을 통칭하는 용어다. 프로세스간 메시지 전송
동기화, 데이터 공유, 원격 프로시저 호출용...
프로세스
프로세스 파일 캐시와 IPC용으로 사용 중인 메모리를 제외하면 대부분은 프로세스가 직접 사용하는 메모리다. 그래서
메모리가 부족할 때는 IPC나 파일 캐시도 보지만 어떤 유저와 프로세스 유형들이 메모리 를 많이...
3.4 메모리 확인
프로세스 메모리 사용량 확인
공통 AIX HP-UX 솔라리스 리눅스 윈도우
pmap <pid>
ps aux <pid>
svmon -P <pid>
svmon -U <userid>
svmon -G
UNI...
ps
❖ AIX ps
➢ SZE : 프로세스 데이터 세션의 가상 메모리 사용 크기(v)
➢ SZ : 프로세스 코어 이미지 크기(-)
➢ SSZ : 커널 스택의 크기(s), 멀티 스레드 프로그램은 이 값이 항상 0이다.
...
3.4 메모리 확인
❖ 메인 메모리 총량 확인 명령
운영체제 명령어
IBM AIX
lsattr -El mem0
bootinfo -r
HP-UX
dmesg
machininfo
오라클 솔라리스 prtconf
리눅스
cat ...
Upcoming SlideShare
Loading in …5
×

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

4,460 views

Published on

아꿈사 스터디 내용 발표

Published in: Technology
  • Login to see the comments

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

  1. 1. 실무로 배우는 시스템 성능 최적화 서버 OS 모니터링 기본방향, CPU, 메모리
  2. 2. 1장 기본방향
  3. 3. 자원사용률 ❖ 서버 자원 사용률 확인 시 중점 점검 항목 CPU CPU자원은 부족한가? 실행 큐(Run queue)가 얼마나 쌓였는가? CPU사용 유형 중 System이나 wait의 사용률이 높은가? 프로세스별 CPU 사용률 분포는 균등한가? MEMORY 메모리가 부족한가?(스압이 발생하고 있는가? 메모리 서버 전체 또는 개별 프로세스 단위로 메모리 사용량이 지속적으로 증가하는가? 파일 캐시 영역으로 사용하는 메모리량은 얼마인가? DISK 디스크의 서비스 시간은 디스크 대기시간을 포함해서 얼마인가? 특정 디스크로 입출력이 집중됐는가? 파일시스템 중 공간이 부족한 곳은 있는가? 스토리지 채널 병목이 있는가? NETWORK 네트워크 테이터 전송량은 얼마인가? 네트워크 재전송량이 많은가? RTT(Round–Trip Time) 시간이 높은가?
  4. 4. 모니터링 도구 ❖ 운영체제별 모니터링 도구 OS IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우 통합 nmon topas top GlancePlus (명령어: glance) top top nmon top htop Permon 작업 관리자 리소스관리자 기타 filemon(파일 입출력) tprof(CPU프로파일링) fcstat Caliper(프로파일링) prstat(프로세스) mpstat(CPU) perf(프로파일링) mpstat(CPU) iotop ProcExp ProcessHacker 기타 공통 vmstat(CPU, 메모리) sar(CPU, 메모리,디스크, IPC, 캐시, 스왑 등) iostat(디스크 입출력) netstat(네트워크 입출력) nfsstat(nfs 입출력)
  5. 5. 자원 모니터링 로그를 남겨서 분석 시 ❖ 모니터링간격은5초나 10초간격으로 한다 ➢ 대부분의 모니터링도구는 자원사용률을 구할 때 측정간격동안의 평균값을 기록하는 경우가 많다. 그래서 모니터링 간격을 5분이나 1분으로 설정한다면 실제는 주기적으로 CPU가 100% 사용하는 경우가 발생하더라도 측정된 로그에서는 평균 값으로 인해 보이지 않는다. 따라서 자원 모니터링을 할 때는 5초나 10초 간격으로 수집하는 것이 적당하다. ❖ 자원 사용률 분석은 그래프를 통해 분석하는 것이 효과적이다. ➢ 수치로는 잘 보이지 않는 규칙적인 패턴이나 현상이 그래프 상에서는 잘 드러날뿐더러 개선 전후 효과를 표현하는 데도 효과적이다.
  6. 6. 2장 CPU
  7. 7. 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% 사용해 병목이 발생하고 있을 수도 있다.
  8. 8. 2.2 CPU확인 CPU 개수 및 종류 확인 커널 처리 비트 확인 IBM AIX HP-UX 오라클 솔라리스 리눅스 lsdev -Cc processor lparstat -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
  9. 9. 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
  10. 10. 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]
  11. 11. 2.5 프로세스의 누적 CPU 사용량 확인하기 Thread ID CPU사용률 Thread개수 누적 CPU사용률 Thread ID
  12. 12. 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
  13. 13. 공통 ❖ CPU를 많이 사용하는 코드를 식별 ➢ pstack같은 명령으로 스택을 반복적으로 수집해서 분석 ➢ 최상위 스택에 있는 함수를 분류해 발생 빈도 비중을 분석하면 성능 영향도가 높은 함수 확인 가능 ❖ 성능저하 원인에서 제외할 함수 ➢ CPU를 거의 사용하지 않는 함수는 제외 ➢ 네트워크 응답 대기에 해당하는 read, recv, select, poll, connect 함수 ■ 비대기 입출력이나 비동기 입출력을 사용하는 경우에는 read, recv가 많이 나타난다면 함수 내에서 입출력 대기가 없으므로 이 또한 CPU를 많이 사용하는 코드로 분류 필요 ➢ 락 대기인 wait, lock 같은 함수 ➢ 하는 일이 없는 sleep성격의 함수
  14. 14. tprof tр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”확장자를 가진 파일에서 확인한다.
  15. 15. Caliper caliper는 HP-UX나 Linux에서 수행되는 애플리케이션에 대해 범용으로 성능을 분석할수있게 지원하는 도구이다. caliper는 강력한 모니터링 도구로서 다양한 옵션을 제공하지만 PA-Risc프로세서를 사용하는 서버는 지원하지 않는다. 대표 방식 설명 cstack 샘플링 방식으로 콜 스택에 대한 프로파일링 측정 fprof 함수 호출에 대한 프로파일링 측정 scgprof PMU 샘플링을 통한 함수 호출에 대한 호출그래프 프로파일링 측정 fcount 프로그램의 함수 호출 횟수 프로파일링 측정 cpu 샘플링을 통한 CPU 이벤트에 프로세스별 메트릭 측정 Overview 한 번 실행해서 fprof, cstack, dcache 를 모두 측정
  16. 16. 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 파일로 생성
  17. 17. perf 리눅스 커널에 포함되어 있는 도구로서 다양한 성능측정 기법을 제공한다. CPU와 함께 제공되는 PMU(Performance Monitoring Unit)를 이용해 성능을 측정하지만 PMU가 지원되지 않더라도 이벤트 추적 기법을 이용해 제한적인 측정이 가능하다. 서브명령 설명 stat 단일 프로그램이나시스템 전체에 대해 일정 시간 동안 이벤트 개수를 측정한다. top 가장 성능 영향도가 큰 함수를 측정해서 보여준다. record 단일 프로그램에 샘플링 데이터를 측정하고 저장한다. report perf record로 생성된 파일을 기반으로 분석해 프로세스나 함수 단위로 이벤트 값을 보여준다 annotate 분석하기 쉽게 소스나 어셈블리에 이벤트 측정값으로 주석을 추가한다. list 사용 가능한 모든 이벤트를 보여준다.
  18. 18. Perf top
  19. 19. 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
  20. 20. Xperf xperf는 원도우 비스타와 원도우 서버 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
  21. 21. 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 이후
  22. 22. 3장 MEMORY
  23. 23. 메모리 부족과 성능 영향 운영체제 측면의 메모리 부족여부와 성능 영향도 - 페이징 스페이스에 대한 스왑 발생 여부로 판단하며, 추가로 메모리는 각 소프트웨어 솔루션의 메모리 사용 방식을 이해하고 성능을 분석하는 작업이 필요 자바 기반 솔루션의 경우 설정한 최대 힙 메모리 이상을 사용하지 않기 때문에 최대 힙 메모리가 운영체제의 메모리 부족이 발생할 가능성은 낮다. 한정된 힙 메모리 내에서 동작하기 때문에 대량의 데이터 처리와 빈번한 GC로 인한 성능 저하가 유발될 가능성이 있다. 힙 메모리를 과하게 크게 설정한 경우에는 메모리를 청소하는 GC작업으로 순간 순간 멈추는 시간이 길어져 서비스 안정성이 떨어질수 있다. 오라클 버퍼캐시처럼 데이터 베이스의 경우 메모리에 최근에 사용한 데이터 블록을 캐시해서 재사용하는 알고리즘 캐시의 메모리 크기가 너무 적게 설정된 경우캐시 적중률이 떨어져 디스크에서 데이터 블록을 읽어와야하는빈도가 늘어나 성능 저하 유발 캐시를 크게 설정해 운영체제에서스왈이 발생하게 되면 오히려 작게 설정한 것보다 성능이 더욱 악화되어 서비스가 거의 멈추는 상태 유발
  24. 24. 3.1 가상 메모리 ❖ 페이징 스페이스 ➢ 운영체제는 상대적으로 값싼 디스크를 보조 메모리로 사용하는 방식을 사용하고 있다. 디스크의 일정공간을 할당해 보조 메모리 용도로 사용 ❖ 스와핑 ➢ CPU 사용 빈도가 낮은 프로세스의 메인 메모리 사용 부분을 페이징스페이스 부분으로 옮겨 여유 메모리를 확보한 후 사용할 페이징스페이스 부분을 메인 메모리로 로드해서 사용 ❖ 활성 가상메모리(Active virtual memory) ➢ CPU가 직접 접근할 수 있는 메인 메모리 ❖ 비활성 가상메모리(Inactive virtual memory) ➢ 페이징스페이스 ❖ 가상메모리 주소 ➢ 프로세스 내에서만 유효한 주소다. 각 프로세스는 가상메모리 주소와 실제 주소 간의 매핑테이블을 가지고 있어 가상메모리 주소로 실제 주소를 찾아갈 수 있게 돼 있다. ❖ 실제 메모리 주소 ➢ 메인 메모리와 페이징 스페이스의 주소.
  25. 25. 3.2 메모리관련 주요 용어 페이징스페이스 페이징스페이스는메인 메모리가 부족할 때 사용하는 디스크 공간으로, 스왑스페이스라고도한다. 시스템 성능 관점에서 보면 페이징스페이스는디스크에 프로세스 메모리를 쓰고, 읽는 스와핑 작업으로 인해 메모리 접근만으로 처리될 때에 비해 큰 성능 저하가 발생한다. 따라서 스와핑이 발생하지 않도록 메모리 여유율을 유지하는 것이 성능에 중요하다. 페이징스페이스크기 확인 IBM AIX HP-UX 오라클 솔라리스 리눅스 윈도우 lsps -a svmon /sbin/swapinfo swap -s swap -l swapon -s cat /proc/swaps 작업관리자
  26. 26. 3.2 메모리관련 주요 용어-cont. 페이징(Paging) 가상 메모리 체계에서는 운영체제가 인식하는 일정한 크기(4KB, 64KB)의 데이터 기록 단위를 페이지라고 한다. 메인 메모리로부터한 페이지의 데이터를 보조 기억장치(디스크)로 복사하거나 보조 기억장치로부터메인 메모리로 로드하는 것을 페이징이라고한다. 메모리 페이지 크기 확인 IBM AIX HP-UX 오라클 솔라리스 리눅스 pagesize dmesg pagesize getconf PAGESIZE
  27. 27. 3.2 메모리관련 주요 용어-cont. 스와핑(swapping) 스와핑은 프로세스가 사용하는 메모리 일부를 페이징스페이스로옮기거나 페이징스페이스로부터메모리로 로드하는 것을 가리킨다. 페이지 부재(Page Fault) 페이징 방식의 가상메모리에서CPU가 사용하려는 페이지가 메인 메모리에 없는 경우다. 사용하려 는 가상 메모리 주소에 해당하는 페이지를 매핑 테이블에서 주소 변환할 때 해당 페이지가 메인 메모리에 없다고 표시되 있으면 페이지 부재가 발생한다. 페이지 인(Page In) 가상 메모리에서 페이지 부재가 일어났을 때 디스크에 있는 프로그램이나데이터를 메모리로 로드 하는 것이다.
  28. 28. 3.2 메모리관련 주요 용어-cont. 페이지아웃(Page Out) 가상 메모리에서 페이지부재가발생했을 때 메모리가 부족하면 페이지스틸러(Page stealer)는 기존 메모리를 디스크로 기록하는 페이지 아웃이라는 작업을 수행한다. 기록 대상 메모리가 프로세스의 작업세그먼트(Work segment)영역에 있는 메모리면 페이징 스페이스로 기록하고, 파일에서 읽어들인 내용(Permanent segment)인 경우 페이지의 내용이 변경됐으면 디스크의 해당 파일에 기록하고 그렇지 않으면 소멸시킨다. 페이지 스캔율(Page Scan Rate) 운영체제는 일정량의 여유 페이지(Free page)를 확보해서 필요할 경우 즉시 제공하기 위해 페이지 스캔(Page scan)이라는 검색을 통해 해제함으로써 여분으로 확보할 페이지를 찾는다. 여유 페이지 목록(Free page list) 임계치보다 여유 페이지 수가 줄어들면 메모리 관리자는 기존의 페이지 인된 것 중에서 LRU 알고리즘 검색을 통해 페이지 아웃이 가능한 것을 찾아 페이지 아웃시킨 후 여유 페이지로 변경한다. 여기서 페이지 아웃이 가능한 페이지를 탐색하는 빈도를 의미하는 페이지 스캔률 이 나오는데 반도가 높다는 것은 해제할 페이지가 넉넉하지 못하기 때문에 자주 메모리를 탐색해야 한다는 의미로 볼 수 있다.
  29. 29. 3.3 사용량 분석 서버메모리는 용도에 따라 파일캐시, IPC, 프로세스 메모리로 나뉜다. 따라서 메모리가 부족한 것으로 모니터링되어 사용량을 줄여야 한다면 세가지 부분으로 나뉘어 메모리 사용량을 분석해 줄일수있는 부분을 찾아야 한다. ❖ 안정적 운영을 위한 메모리 판단 기준 ➢ 메모리 사용률 100% 이하 ➢ 지속적으로 프로세스 스와핑이 발생하면 메모리 부족 (페이지스캔률이 지속적으로 발생하면서 페이지 이웃이 발생하는 상태) ❖ 이중화 서버 메모리 운용 용량 ➢ RAC로 구성된 오리클 서버의 경우 한 서버의 서비스가 중단됐을 때 SGA의 메모리 사용량은 큰 변 화가 없으나 DB 연결이 한 서버로 몰리면서 PGA 사용량은 크게 증가되므로 여유율 확보 필요 ➢ Tuxedo 서버의 경우에도 한 서버로 서비스가 집중되면 서비스 프로세스 수가 증가해 전체적인 메모리 사용량이 증가되므로 여유율 확보 필요
  30. 30. vmstat 구분 항목/설명 procs r(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 사용률
  31. 31. 파일 캐시 파일 캐시는 운영체제에서 디스크 입출력 성능 개선을 위해 사용한 파일을 메모리상에 캐시해 디스크 입출력을 줄이는 것이다. 파일캐시에서 성능상 문제가 생기는 것은 캐시를 전체 운영체제 메모리 대비 너무 많이 사용함으로써 프로세스가 사용할 메모리가 부족한 상황이 발생하는 것이다. DB 서버는 데이터 버퍼(Data Buffer)라는 내부 캐시가 있어 운영체제 파일 캐시를 크게 설정할 필요가 없고, 특히 Raw device를 사용한다면 파일 캐시를 사용하지 않으므로 설정해도 성능 개선이 되지 않는다. 오히려 메모리 부족 현상으로 DB 사용 메모리가 페이징스페이스로 내려가는 상황이 발생하면 급격한 성능 저하가 발생한다. WAS 서버의 경우에도 파일 카시에 의한 성능 개선 사례는 지금까지 경험한 적이 없을 정도로 성능에 큰 영향을 미치지는 않는다. 따라서 파일 캐시는 전체 메모리 대비 최대 크기를 30% 이하로 유지 하는 것을 권고한다. 파일 캐시 크기는 최솟값과 최댓값으로 설정하는데 최솟값까지는 프로세스가 사용하는 메모리가 부족한 상황이 되면 파일 캐시가 사용하는 메모리를 프로세스용으로 반납한다. IBM AIX HP-UX 오라클 솔라리스 리눅스 vmstat -v kctune | grep filecache kcusage -ht filecache_max sysdef -i | grep bufhwm echo ::memstat | mdb - k /proc/sys/vm/buffermem (?) sysctl -w vm.drop_caches=3 (운용시스템에서는inodes lock 주의) free -m
  32. 32. IPC(Inter-Process Communication) IPC는 프로세스 간에 데이터를 공유하거나 통신할 때 사용하는 여러 방식을 통칭하는 용어다. 프로세스간 메시지 전송 동기화, 데이터 공유, 원격 프로시저 호출용도로 분류해 파일 파이프, 소켓, 메시지 큐. 세마포어, 공유 메모리, 메모리 맵드 파일 등이 있다. 이 가운데 대표적으로 프로세스 메모리와 분리되어 메모리를 사용하는 대표적인 IPC가 메시지큐 세마포어, 공유 메모리다.
  33. 33. 프로세스 프로세스 파일 캐시와 IPC용으로 사용 중인 메모리를 제외하면 대부분은 프로세스가 직접 사용하는 메모리다. 그래서 메모리가 부족할 때는 IPC나 파일 캐시도 보지만 어떤 유저와 프로세스 유형들이 메모리 를 많이 사용하는지 분석한다. 오라클 DB를 예로 들면 IPC인 공유메모리를 사용하는 SGA(System Global Area)가 가장 많은 메모리를 사용하겠지만 그에 못지 않게 개별DB 처리 프로세스가 사용하는 PGA(Program Global Area) 메모리 사용량이 많다. 대형 시스템의 경우 DB 서버 한 대에 수천 개의 DB 연결이 맺어져 있는 경우도 있는데 DB 프로세 스 하나가 10MB씩만 메모리를 사용해도 수십 GB에 달하는 메모리가 사용된다. 이 상황에서 메모 리가 부족하다면 SGA의 메모리 축소 가능성도 검토하겠지만 먼저 DB 연결 수를 줄여서 메모리를 절약하는 방안을 검토할 것이다.
  34. 34. 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 -euf ps –e -orss=, S1ze=, args= 작업관리자 procexp, processhacker
  35. 35. ps ❖ AIX ps ➢ SZE : 프로세스 데이터 세션의 가상 메모리 사용 크기(v) ➢ SZ : 프로세스 코어 이미지 크기(-) ➢ SSZ : 커널 스택의 크기(s), 멀티 스레드 프로그램은 이 값이 항상 0이다. ➢ TRS : 텍스트 세션 실제 메모리 사용크기(v) ➢ RSS : 프로세스의 실제 메모리 사용 크기(v) ❖ HP-UX ps ➢ SZ : 프로세스 코어 이미지의 실제 메모리 사용 크기로 텍스트, 데이터, 스택공간을 포함한다(-) (단위 페이지) ➢ VSZ : 프로세스의 가상 메모리 사용 크기(-ovsz) 가상 메모리사용량 실제 물리 메모리 사용량
  36. 36. 3.4 메모리 확인 ❖ 메인 메모리 총량 확인 명령 운영체제 명령어 IBM AIX lsattr -El mem0 bootinfo -r HP-UX dmesg machininfo 오라클 솔라리스 prtconf 리눅스 cat /proc/meminfo free -m

×