Skip to content

조회 수 13961 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
다음은 모 웹사이트의 성능개선을 위한 커널 튜닝 사례입니다. 심심한 분들 한번
연구를 해 보세요. (실은 나도 잘 모름) 저는 그냥 자료만 옮겨왔을 뿐입니다.

참고자료
http://www.apache.org/docs/misc/perf-tuning.html
web performance tunning - 오렐리

그렇지만 명심할 점이 있습니다. 웹사이트의 성능 개선을 위해서는 커널에서만
손대주는 것이 아니라 OS, 네트웍, 프로그래밍 등 다양한 조건을 같이 고려해야
한다는 것입니다. 또한 하드웨어 성능을 고려하지 않은채 무작정 바꾸면 문제가
생긴다는 것입니다. 또한 일반적으로 정적인 html서비스는 문제가 안되지만 성능의
병목지점이 생기는 곳은 네트웍이 아니라면 cgi일 경우가 많습니다. 아파치에
들어있는 ab, 유닉스의 time, ping, netstat 등 다양한 명령어들을 이용해서 항상
시스템의 상태를 모니터링해보고 속도를 재어 보아야 합니다. 또한 아무리 튜닝을
잘해도 웹페이지에 이미지를 엄청나게 넣어둔다면 헛일하는것이지요. 저도 잘
모르면서 어설크게 오라클 튜닝을 한다고 했더니 cpu 4개, 메모리 2G인 시스템에서
오히려 일반PC보다 오라클이 더 느려지더군요. 잘 모르는 경우에는 기본값을 사용하는
것이 더 나을때도 있지요. 아래 예에서 keepalive 옵션은 대형 사이트같은 경우에는
off로 해 놓는 것이 더 나은 경우도 많이 있습니다. 빨리 처리하고 연결을 빨리빨리
끊어주는 것이 아무일도 하지 않은채 그냥 프로세스를 띄워놓고 놀리는 것보다는
낫지요. 

문태준(taejun at tunelinux.pe.kr http://tunelinux.pe.kr)


ㅇ 아파치 웹 서버 튜닝

아파치 웹 서버의 튜닝은 간략하게 두 부분으로 나눌 수 있다. 첫 번째는 소스코드에
하드코딩 되어 있는 제한 값을 조정하는 것이고, 두 번째는 환경설정 파일의 각 제한
값들을 수정하는 것이다.

1)	소스레벨
httpd.h 파일에 리눅스의 경우 HARD_SERVER_LIMIT 값이 256으로 기본 설정되어
있으며, 이 값은 서버가 수용할 수 있는 최대 접속을 의미한다. 이 값을 1280으로
설정한다.

2)	환경설정 파일
가.	 KeepAliveTimeout 
클라이언트가 서버로 접속을 했을 경우 하나의 웹 서버 프로세스가 해당 웹 페이지의
여러 개체들의 전송을 새로운 프로세스를 생성하지 않고 지속적으로 접속을 유지하며
담당하며, 이 클라이언트의 요청에 대한 타임아웃에 대한 값이다.  기본 15초에서
30초로 증가.
나.	 MaxKeepAliveRequests
웹 서버 프로세스가 지속적으로 접속을 유지하면서 처리할 수 있는 요청 개수이다.
100으로 설정되어 있으며, 10000으로 증가.
다.	 StartServer, Min/MaxSpareServer
기본 설정은 5, 5, 10정도이며, 웹 서버가 Standalone 방식일 경우 새로운 접속
요청을 받으면 기존의 Spare Child Process를 포크하여 새로운 Child Process를
만들어내므로 기본적으로 Spare Process가 많을수록 폭주에 빨리 대처할 수 있다.
StartServer 20, MinSpareServer 20, MaxSpareServer 40으로 증가.
라.	 MaxRequestsPerChild
웹 서버 프로세스가 일정 횟수의 클라이언트 요청을 처리하고 종료되는 수치이며, 
1000으로 증가. 
마.	 MaxClients
동시에 실행될 수 있는 최대 프로세스 수를 제한하는 것이며, 기본 256으로 설정되어
있다. 이를 512까지 증가.
바.	 로그파일 생성
이용자가 접속할 때마다 기록되는 access_log 파일의 경우 한번 접속당 약 85바이트가
증가하며, 접속량이 많을 경우 이 파일의 크기는 실제로 엄청나다. 이럴 경우
접속때마다 로그파일을 액세스하는데 상당한 시간과 부하가 걸리므로 로그 파일을
일정시간마다 초기화하여 항상 경량화 시켜 줄 필요가 있다. 아파치에서 제공하는
rotatelog를 이용.


ㅇ커널 소프트 레벨 튜닝

커널이 제공하는 파라메터값을 /proc 파일 시스템을 이용해서 부팅이 완료된 시점후에
변경한다. 여기서는 주로 파일시스템과 네트웍 자원에 관련된 내용에 대해서
튜닝한다.

1)	파일 시스템 관련
-	리눅스 커널이 할당할 수 있는 파일 개수의 최대값 : 4096 -> 32768
-	리눅스 커널이 할당할 수 있는 inode 개수의 최대값 : 16384 -> 65536
-	root 사용자에 대해 할당할 수 있는 파일 개수의 최대값 : 1024 -> 32768
-	하나의 프로세스가 오픈할 수 있는 파일의 개수 : 256 -> 512

2)	네트웍 자원 관련
-	TCP 가 Keep Alive 메시지를 보내는 시간 간격 : 7200 -> 1200
-	소켓이 항상 CLOSE되기 전에 마지막 FIN 을 기다리는 시간 : 180 -> 30
-	하나의 TCP 접속 요청에 대해 응답을 재전송하는 횟수 : 7 -> 2

이렇게 설정되는 값들은 시스템이 부팅되면서 스크립트를 통해 설정되어야 되기
때문에 /etc/rc.d/rc.local 파일의 마지막 부분에 정의된다.

ㅇ 커널 하드 레벨 튜닝

커널 소스를 직접 수정하여 제한값을 조정한다. 이를 위해서는 커널 컴파일이
필수적이며, 조심스런 접근이 필요하다. 

-	파일 오픈 개수
-	처리할 수 있는 프로세스 개수




**참고


1.	아파치 웹 서버 튜닝
-	apache/src/include/httpd.h:
HARD_SERVER_LIMIT 256 -> 1280
-	apache/conf/httpd.conf:
MaxKeepAliveRequests 100 -> 10000
KeepAliveTimeout 15 -> 30
MinSpareServers 5 -> 20
MaxSpareServers 10 -> 40
StartServers 5 -> 20
MaxClients 256 -> 1024

2.	커널 소프트 레벨 튜닝
-	ulimit -n 32768
-	/proc/sys/fs/file-max: 4096 -> 32768
-	/proc/sys/fs/inode-max: 16384 -> 65536
-	/proc/sys/net/ipv4/tcp_keepalive_time: 7200 -> 1200
-	/proc/sys/net/ipv4/tcp_fin_timeout: 180 -> 30
-	/proc/sys/net/ipv4/tcp_sack: 1 -> 0
-	/proc/sys/net/ipv4/tcp_timestamps: 1 -> 0
-	/proc/sys/net/ipv4/tcp_syncookies: 0 -> 1
-	/proc/sys/net/ipv4/tcp_retries1: 7 -> 2
-	/proc/sys/net/ipv4/tcp_max_syn_backlog: 128 -> 8192
-	/proc/sys/net/ipv4/tcp_window_scaling: 1-> 0

3.	커널 하드 레벨 튜닝
-	/usr/src/linux/include/linux/fs.h:
NR_FILE 4096 -> 32768
INR_OPEN 1024 -> 32767
-	/usr/src/linux/include/linux/tasks.h:
NR_TASKS 2560 -> 3192
MAX_TASKS_PER_USER 2048 -> 3192
-	/usr/src/linux/include/linux/limits.h:
NR_OPEN 1024 -> 32767
-	/usr/src/linux/include/net/tcp.h:
TCP_TIMEWAIT_LEN (60*HZ) -> (15*HZ)

List of Articles
번호 제목 글쓴이 날짜 조회 수
48 사용자 인증 ADMINPLAY 2009.11.26 14210
47 squid 로 웹서버 가속하기..---== 강추 ==--- ADMINPLAY 2009.11.26 18399
46 아파치 데몬이 안 뜰경우 ADMINPLAY 2009.11.26 15056
45 apache2 worker 방식 client 수치 설정법 ADMINPLAY 2009.11.26 16191
44 rewrite 모듈을 이욜한 서브도메인으로 홈페이지 운영하기 ADMINPLAY 2009.11.26 14360
43 apache log에 그림이미지 파일 로그 안남기기 ADMINPLAY 2009.11.26 14802
42 SSL 인증서 발급 후 SSL mode 시작시 두 개의 패스워드 입... ADMINPLAY 2009.10.15 14332
41 브라우저 접속 제한하기 ADMINPLAY 2009.09.30 14863
40 아파치 컴파일 에러(apr-util) configure: error: cannet ... ADMINPLAY 2009.08.08 19772
39 APM 기본설치후 아파치 실행에러 httpd: Could not determ... ADMINPLAY 2009.08.08 22047
38 Apache Make시 /usr/lib/libexpat.so: could not read sym... ADMINPLAY 2009.08.07 18119
37 make[2]: *** [htpasswd] 오류 1 , make[1]: *** [all-rec... ADMINPLAY 2009.08.07 27329
36 Unclean shutdown of previous Apache run? ADMINPLAY 2009.08.05 21992
35 apache 에서 euc-kr홈페이지를 포팅할때 화면이안나올경우 ADMINPLAY 2009.07.18 14371
34 매일 자정에 트래픽 초기화 하기 ADMINPLAY 2009.07.18 15782
33 Apache 웹서버 MaxClient 최대값 조정을 위한 C & CPP 플... ADMINPLAY 2009.06.21 13992
32 Tomcat 4 과 Apache 2 연동 ADMINPLAY 2009.06.06 14780
» [자료] 웹사이트 성능개선 위한 커널 튜닝 사례 ADMINPLAY 2009.05.10 13961
30 [LINUX] Apache 2.2 + mod jk 1.2 + Tomcat 5.x 연동 ADMINPLAY 2009.05.07 21216
29 Apache의 Indexes된 페이지에서 한글표시 file ADMINPLAY 2009.05.07 16429
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234