레드헷리눅스 6.2 튜닝

다음은 모 웹사이트의 성능개선을 위한 커널 튜닝 사례입니다. 심심한 분들 한번 연구

를 해 보세요.(실은 나도 잘 모름) 저는 그냥 자료만 옮겨왔을 뿐입니다.

참고자료

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 2

0, 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

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.