레드헷리눅스 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