chap4_2

31
4.2 아파치 튜닝

Upload: choi-mun-gyu

Post on 23-Jun-2015

180 views

Category:

Education


0 download

DESCRIPTION

how to config apache/mysql for ha(high availability)

TRANSCRIPT

Page 1: Chap4_2

4.2 아파치 튜닝

Page 2: Chap4_2

웹 서버가 병목현상?

- 웹 서버의 설정과는 관계없는 경우가 대부분- 4.1에서 살펴본 ps, sar, vmstat 활용- 그렇지 않으면 다음단계로

Page 3: Chap4_2

- 아파치는 내부의 각종 기능이 모듈화- 병렬처리를 수행하는 부분도 모듈화

병렬처리의 구현모델- 멀티프로세스 모델 - prefork- 멀티쓰레드 모델 - worker- 이벤트 구동 모델 - event(epoll, select)

아파치의 병렬처리&MPM

Page 4: Chap4_2

멀티프로세스 모델

Page 5: Chap4_2

prefork vs worker

Page 6: Chap4_2

multi-process vs multi-thread

Page 7: Chap4_2

multi-process <<<<<<< multi-thread??

Page 8: Chap4_2
Page 9: Chap4_2

멀티프로세스의 문제점?

- 메모리 공간 낭비? 부모와 자식 프로세스에서 갱신 되지 않은 메모리 공간은 공유된다(copy on write)

- context switching 비용? 대량의 context switching이 아니면 비용은 크지 않다

Page 10: Chap4_2

Copy on write란..?

Page 11: Chap4_2

prework --> worker

- 하나의 클라이언트에 대한 응답시간이 고속화되는것은 아님- 메모리가 충분하다면 동시에 처리할 수 있는 접속수는 변하지 않음- 대량의 컨텍스트 스위치가 없다면 효과는 크지 않다

; 핵심은 동시에 생성 할 수 있는 프로세스/스레드 수 설정

Page 12: Chap4_2

httpd.conf

- 불특정 다수의 클라이언트 요청을 받음그래서 언제 어느 정도의 트래픽이 발생할지 예상 불가

- 동시에 접속할 수 있는 클라이언트 개수의 상한값 지정(MaxClients)

-없다면, OS가 hang-up / 응답불가능

Page 13: Chap4_2

httpd.conf<IfModule mpm_prefork_module>

StartServers 5MinSpareServers 5MaxSpareServers 10MaxClients 150MaxRequestsPerChild 0

</IfModule>

ServerLimit 150

Page 14: Chap4_2

ServerLimit는 어느정도로..?

- 서버의 물리 메모리 용량 - 프로세스 하나당 평균 메모리 소비량

ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M OS가 사용하는 메모리 512M

Page 15: Chap4_2

ServerLimit는 어느정도로..?

- 서버의 물리 메모리 용량 - 프로세스 하나당 평균 메모리 소비량

ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M OS가 사용하는 메모리 512M

(8G - 512M) / 100M = 75

Page 16: Chap4_2

ServerLimit는 어느정도로..?

ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M 메모리 공유 비율 : 70% OS가 사용하는 메모리 512M

Page 17: Chap4_2

ServerLimit는 어느정도로..?

ex) 메모리량 8G httpd프로세스당 메모리 사용률 100M 메모리 공유 비율 : 70% OS가 사용하는 메모리 512M

; (8G - 512) / (100M *(100%-70%)) = 240

Page 18: Chap4_2

httpd.conf<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0</IfModule>

ServerLimit >= MaxClients / ThreadPerChild

Page 19: Chap4_2

httpd.conf<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0</IfModule>

ServerLimit >= MaxClients / ThreadPerChild; 150 / 25 = 6

Page 20: Chap4_2

DB과부화로 인한 Maxclient수 도달

Page 21: Chap4_2

Kepp-Alive

- 한번의 커넥션을 유지해서 여러 작업 수행- 병목현상이 발생할 가능성 있슴

KeepAlive OnMaxKeppAliveRequests 100KeppAliveTimeout 5

Page 22: Chap4_2

아파치 이외의 선택방안

lighttpd - SPED(Single Process Event Driven)모델 - 적응 메모리로 대량의 접속을 동시병행적으로 처리 가능 - 싱글 프로세스라서 계산량이 적어짐 - 메모리 소비량도 적음

Page 23: Chap4_2

아파치 이외의 선택방안

lighttpd - SPED(Single Process Event Driven)모델 - 적응 메모리로 대량의 접속을 동시병행적으로 처리 가능 - 싱글 프로세스라서 계산량이 적어짐 - 메모리 소비량도 적음

Page 24: Chap4_2

4.3 MySQL 튜닝의 핵심

Page 25: Chap4_2

MySQL 튜닝의 핵심

튜닝의 종류 - 서버측 - 서버 측 이외 - 주변 시스템

Page 26: Chap4_2

MySQL 튜닝의 핵심

서버측 튜닝- mysql의 메모리관련 파라미터와 디스크 I/O관련된 파라미터 튜닝- 디스크 I/O와 관련된 커널 파라미터 조정- 적절한 파일시스템 선택, 마운트 옵션 조정- 파티셔닝

Page 27: Chap4_2

MySQL 튜닝의 핵심

서버 측 이외(DB설계 & SQL튜닝)- 테이블 설계적절한 인덱스 생성의도적인 비정규화

- SQL최적화인덱스를 제대로 사용하도록테이블 결합 순서, 방법 조정

Page 28: Chap4_2

MySQL 튜닝의 핵심

주변 시스템- DB서버 주변의 시스템 튜닝

memcached캐시 서버를 운영해, 데이터를 캐싱된데이터를 참조하도록 구축

-

Page 29: Chap4_2

메모리 관련 파라미터 튜닝 - 1

버퍼의 종류- 글로벌 버퍼- 쓰레드 버퍼

; 쓰레드 버퍼에 많은 메모리를 할당하면 커넥션 수 만큼 해당 메모리를 할당하기 떄문에, 메모리 부족 야기

Page 30: Chap4_2

메모리 관련 파라미터 튜닝 - 2

- 서버가 가진 물리 메모리 이상의 크기를 할당하면, 스왑이 발생하기 때문에, 반대로 성능이 하락

- MyISAM의 데이터 파일이 OS디스크 캐시에 올라가도록설정하는 것도 한 가지 방법

Page 31: Chap4_2

메모리 관련 파라미터 튜닝 - 21MB < innodb_log_file_size < MAX_innodb_log_file_size <4GB;innodb_log_file_size는 4GB이하로 설정

MAX_innodb_log_file_size = innodb_buffer_pool_size / innodb_log_files_in_group

;

innodb_buffer_pool_size;InnoDB의 데이터나 인덱스를 캐시하기 위한 메모리 상의 영역innodb_log_file_size;InnoDB의 갱신로그를 기록하는 디스크 상의 파일