ServerLimit, MaxClients, MaxRequestsPerChild 지시문에 대한 최적의 값


29

트래픽이 많은 사이트에서 동적 콘텐츠가 많으며 주로 사용자가 생성합니다.

이 서버는 전용 서버이며 총 2.13GHz 프로세서에서 총 4 개의 Intel Xeon CPU X3210이 있습니다. 서버에 4GB의 RAM이 있고 MySQL 데이터베이스가 별도의 서버에서 실행된다는 것을 고려할 때 ServerLimit 및 MaxClients 아파치 지시문에 대한 최적의 값을 알아야합니다. 패널은 CentOS가 포함 된 DirectAdmin입니다.

아래는 현재 지시문이지만 5k 명 이상의 사용자가있는 피크 시간에는 중요한 지연이 눈에 띄게 나타납니다. 페이지가 빠르게 생성되는 것처럼 보이므로 (페이지 생성 시간 카운터를 구현 한) MySQL의 결함이 아닙니다. 페이지가 응답을 시작하고 브라우저로 전송 될 때까지 연결 지연.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

top 명령을 사용하여 서버를 모니터링하면 CPU 사용량은 피크 시간에 20 % ~ 30 %를 넘지 않습니다. 그 당시 MySQL 서버는 30 ~ 50 %의 사용량을 가지고 있으며 느린 쿼리를 수정하기 위해 끊임없이 노력하고 있지만 다른 문제입니다. 정적 페이지도 피크 시간에로드하는 데 시간이 오래 걸리기 때문에 DB 병목 현상이 아니라는 것을 알고 있습니다.

이러한 가치를 최적화하기위한 조언은 대단히 감사하겠습니다.

답변:


24

MaxClients가 WAY WAY WAY가 너무 높습니다. 아파치 프로세스의 현재 크기는 얼마입니까? x 900을 곱하십시오. 4GB보다 큽니까? 그렇다면 머신이 교체 될 가능성이 있습니다. 필자는 보통 박스에 MaxClients = 2x vCPU (grep -c processor / proc / cpuinfo)로 시작합니다. 이 경우 약 8입니다. 그런 다음 MaxClients x 아파치 프로세스 크기가 4GB를 넘지 않아야합니다.

클라이언트의 연결 유형에 따라 거기에서 MaxClient를 설정할 수 있습니다. (다이얼 업 사용자는 숟가락 등을 채워야합니다.) 그러나 절대로 스왑 상황에 빠지지 않도록하십시오.

그런 다음 Min, Max 및 Start 서버를 MaxClients로 설정하십시오. 전용 서버 환경에서 실제로 다른 것을 가질 필요는 없습니다.

그런 다음 거위 메모로 ab로 테스트하십시오.


어떤 이유로 프로세스 크기를 잘못 결정한 것 같습니다 ... 이제 상단 명령에서 RESIDENT SIZE 아파치 프로세스의 범위가 10 ~ 15MB임을 알 수 있습니다. 공유 라이브러리가이 숫자에 포함되어 있기 때문에 "실제"크기는 절반 크기라는 것을 읽었습니다. 이것을 고려할 때 각각 7MB 크기의 570 프로세스를 수용 할 수 있다고 계산해야합니다. 정확하다고 생각하십니까?
andreszs

계산에 15MB를 사용한 다음 메트릭을 확인하기 시작하십시오. # http 프로세스와 메모리 사용. 이것은 MaxClient의 수에 대한 더 나은 아이디어를 줄 것입니다
hdanniel

1
나는 그것을 400으로 낮추었 고 피크 시간 이전에도 결과가 원하는 것보다 반대 효과를 나타 냈습니다. 원본보다 낮은 값은 시간 초과 및 긴 지연을 만듭니다. 사실 이제는 클라이언트를 1500 개로 늘렸고 메모리 사용량은 3GB 인 반면 평균 CPU 사용량은 8 %입니다. 물론 지금은 SQL 서버에 더 많은 부하가 있으며 그 작업을해야합니다.
andreszs

여기 htop 명령, 1500 개의 아파치 프로세스 및 거의 100 개의 시스템 프로세스가 있습니다. 이것은 RAM 사용량의 75 %입니다. a.imagehost.org/0011/htop.png 공식을 재고해야합니까? ;)
andreszs

1
이것이 바로 자신의 환경에서 테스트를 수행해야하는 이유입니다. 우리는 아파치 앞에 http 액셀러레이터를 가지고 있으므로 모바일 사용자에게 숟가락을 먹이지 않습니다. 응용 프로그램도 매우 밝습니다. 부하를 DB로 옮겼다면 더 많은 아파치 프로세스가 실제로 MySQL 연결을 기다리는 것보다 데이터를 제공하고 있음을 알려줍니다. 그러면 DB에 얼마나 많은 연결을 허용합니까? 그 수가 귀하의 MaxClients를 초과합니까? 5,000 개의 동시 연결이 있습니까? 그렇다면 정면의 perlbal과 같은 것을 살펴볼 수 있습니다.
toppledwagon

5

아파치 프로세스의 평균 크기를 얻어야합니다. 이 숫자와 RAM의 전체 크기를 사용하면 MaxClients 지시문을 계산할 수 있습니다. 이것을 기억하십시오 : "웹 서버는 절대 스왑 할 필요가 없습니다"( Apache Performance Tuning )

top 또는 htop으로 모니터링해도 괜찮지 만 ganglia 또는 munin과 같은 일부 모니터링 도구를 사용하여 서버의 모든 통계 (cpu, ram, disk i / o, apache requests, mysql slow query 등)를 더 잘 볼 필요가 있습니다. 병목 현상이 발생할 수 있습니다.


현재 top 및 htop 명령 만 있으며 모든 정보를 이해할 수 없습니다. 이것은 어제 피크 시간대의 활동이며 스와핑이없는 것 같습니다. 내가 틀렸다면 알려주십시오 : 작업 : 총 1043, 실행 중, 1041 대기, 0 중지, 0 좀비 CPU : 13.8 % us, 1.8 % sy, 0.0 % ni, 82.1 % id, 0.8 % wa, 0.0 % 안녕하세요, 1.5 %의시, 0.0 % 일의 Mem : 3961276k 사용 4138360k 총, 177084k 무료, 75016k 버퍼 스왑 : 2031608k 총, 1484k 사용, 2030124k 무료, 1836600k 캐시
andreszs

예, 서버가 교환되지 않습니다. 실제 메트릭을 선호하지만 원하는 경우 ab 또는 httperf와 같은 스트레스 도구를 사용하여 서버가 처리 할 수있는 양을 확인할 수 있습니다. 테스트를 위해 MaxClients를 처리하고 15MB 가정을 기반으로 낮은 숫자로 시작하십시오.
hdanniel

4

나는 아파치의 벤치 마크 (ab) 툴을 가지고 노는 것을 추천한다. 값을 트래픽 흐름에 맞추고 평균로드 시간과 같은 응답 유형을 확인할 수 있습니다. 이 시점에서 설정을 시도하고 최적화하기 위해 설정을 가지고 놀 수 있습니다. ab를 사용하여 각 성능 조정에 대한 최적 성능을 처리 할 수 ​​있어야합니다.

실제로 설정에 대해 이야기하는 것이 현명하지는 않지만 RAM을 고려해야합니다. 설정과 함께 많은 RAM을 먹는 것처럼 들리기 때문에 RAM도 고려해야합니다. 데이터가없는 추측 일뿐입니다. htop은 리소스에 대한 시각적 인 정보를 제공합니다.

또한 부하 평균이 많이 말할 수 있습니다. 사용량이 20-30 % CPU의 총 코어 수보다 훨씬 높지만 서버가 실제로 얼마나 열심히 작동하는지 나타내는 또 다른 지표입니다.


문제는 서버 관리에 경험이 충분하지 않기 때문에 settigns를 사용하여 결과를 모니터링하고 결과를 모니터링하는 것입니다. ab 도구를 정직하게 사용하지 않았습니다. 또한 값을 변경하면 HTTDP를 다시 시작해야하므로 사용자에게 불편을 겪기 때문에이를 피하는 것이 좋습니다. 다른 사용자에게 메시지를 보내고 "보내기"를 클릭하면 서버 연결 문제가 발생한다고 상상해보십시오. CPU 사용량에 대해서는 이전 의견의 정보를 참조하십시오. 피크 시간에는 15 %를 넘지 않습니다. 어제 6000 명의 온라인 사용자가 있다는 점을 고려하면 꽤 괜찮습니다.
andreszs

글쎄, 나는 당신이 프로덕션 환경에서 이것을하기를 원하지 않을 것입니다. 다른 서버 (동일한 하드웨어가 아닌 경우 매우 유사 함)를 테스트하려면 트래픽이 가장 적은 시간에이 작업을 수행하는 것이 좋습니다. ab는 사용하기가 쉽지만 toppledwagon은 MaxClients를 계산하는 데 좋은 지침을 주었다고 생각합니다. 스왑 공간 사용을 중단하면 확실한 개선이 이루어집니다. 확인 httpd.apache.org/docs/2.0/programs/ab.htmlcyberciti.biz/tips/...을 AB에 대한
거위
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.