리눅스, 자료실, 성경검색, 추억의게임, 고전게임, 오락실게임, rootman, http://www.rootman.co.kr
* 54.196.42.8 *
| Home | Profile | Linux | 자료실 | zabbix | Mysql 5.6 | 갤러리 | 성경검색 | 해피니스 | 자유게시판 | 게시물검색 | L | O | R |    

 
[Doc/Faq] [자료] 웹사이트 성능개선 위한 커널 튜닝 사례
 작성자 : rootman
Date : 2002-04-03 20:52  |  Hit : 11,188  



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

참고자료
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로 해 놓는 것이 더 나은 경우도 많이 있습니다.
빨리 처리하고 연결을 빨리빨리 끊어주는 것이 아무일도 하지 않은채 그냥 프로세스를 띄워놓고 놀리는 것보다는낫지요.

문태준([email protected] 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: N
R_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)




 
 

Total. 645
번호 분류 제목 작성자 등록일 조회수
645 기초강좌 NFS server unable to open connection to tcp6/udp6 networks rootman 09-27 2080
644 php [php] mssql ms-sql 한글 변환 끄적임.. 정리 rootman 03-29 3015
643 기초강좌 java vim 에서 자바 환경 만들기 rootman 02-16 2335
642 삭제예정 [xencenter] xenserver tool 설치 rootman 08-24 3277
641 mysql [mysql] Creating a File-Per-Table Tablespace Outside the Dat… rootman 08-03 3447
640 기초강좌 Centos Xwindow 설치 rootman 06-16 4305
639 php [php] highlight 함수 rootman 04-01 4162
638 qmail [qmail] qmail-scanner에 filtering 된 이메일 처리 rootman 02-14 4602
637 Shell [날짜] awk를 이용하여 unixtime의 시간 차 구하기 rootman 01-27 5348
636 기초강좌 centos에 그놈(gnome) 설치하기 rootman 01-10 5224
635 쉘(awk) [awk] shell 변수 사용하기 rootman 12-27 5091
634 기초강좌 서버 캐시 메모리 초기화하기 (drop_caches) rootman 12-11 5943
633 windows tips 그리드 제거 배치 스크립트 rootman 11-28 5660
632 기초강좌 패스워드 lockgin control rootman 09-06 4
631 windows tips win7 자동 로그인 설정하기 rootman 08-18 5320
 1  2  3  4  5  6  7  8  9  10    
AND OR