Ubuntu 14.04 서버에서 Apache를 조정하는 방법


18

현재 우분투 14.04의 Apache 2 (Apache 2.4.7)에서 다음 설정이 있습니다.

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

서버는 8GB (RAM) Amazon 서버이며 일부 Google 광고 캠페인에 대해 3 페이지 가입 양식을로드 할뿐입니다.

웹에서 apachetuneit.sh 라는 스크립트를 찾았 지만 잠시 후 Apache가이 오류를보고했습니다.

[화 4 월 21 일 16 : 45 : 42.227935 2015] [mpm_prefork : error] [pid 1134] AH00161 : 서버가 MaxRequestWorkers 설정에 도달했습니다. MaxRequestWorkers 설정 높이기를 고려하십시오.

이 설정을 어떻게 설정하는지 어떻게 판단합니까?

Apache 2.4를 조정하는 방법과 다른 것은 없습니다. 이 질문은 다른 이유입니다 이 질문 .



@JennyD이 기사는이 특정 요구에 비해 너무 광범위합니다.
ServerChecker

이러한 특정 설정을 판단하는 방법은로드 테스트를 수행하는 것입니다.
Jenny D는 Reinstate Monica가

@JennyD 그것보다 훨씬 쉽습니다. 하루에 여러 번 정기적으로로드되는 ap.sh 스크립트를 사용하고 평균 아래의 클라우드 서비스 링크 당 수학을 수행하고 MaxRequestWorkers를 해당 값으로 설정하십시오. 그런 다음 Apache 로그에서 MaxRequestWorkers에 문제가 있는지 확인하고 RAM을 늘리거나 추가하거나 CloudFlare를 추가하거나 다른 웹 노드를 추가하십시오. 극도로로드 테스트를 수행 할 필요가 없습니다.
ServerChecker

해당 스크립트에 대한 정보와 본인의 답변에 포함 된 링크의 관련 내용이 포함 된 답변을 가능한 중복으로 지적한 질문에 쓸 수 있습니다.
Jenny D는 Reinstate Monica가

답변:


45
  1. Ubuntu 14.04는 mpm_prefork 모듈을 통해 실행되는 PHP와 함께 Apache 2를 사용 하며, 편집 가능한 파일은 /etc/apache2/mods-enabled/mpm_prefork.conf에 있습니다. 또한 Apache 2.4부터 MaxClients의 이름이 MaxRequestWorkers 로 바뀌 었 으므로 MaxClient에 관한 모든 문서를 MaxRequestWorkers로 전환해야합니다.

  2. 다음 명령을 사용하여 Apache 웹 서비스를 일시적으로 중지하십시오.

    sudo 서비스 아파치 2 중지
  1. 5 초 동안 기다린 후 다음 명령을 실행하여 사용 가능한 서버에 사용 가능한 가상 메모리의 양을 찾으십시오.
    sudo free -ht

Mem : 행을 읽고 비어있는 열을보십시오. 필자는 일반적으로 더 강력한 서버 (2GB 이상) 또는 2GB를 가벼운 서버에서 공제하고 싶지만 Apache에 전용 할 수있는 RAM의 양으로 이것을 고려하십시오. 따라서 무료 열에 13GB의 여유 공간이 있다고 표시되면 Apache 11GB를 제공하는 것이 좋습니다. 이것이 기준입니다. 3 일 동안 로그에서 3 번과 같이 로그에 데이터베이스 문제가 발생하여 더 많은 메모리가 필요한 경우 11GB 대신 10GB 만 가지고 있다고 생각할 수 있습니다 (이 경우 ). Apache 로그에서 서버에 더 많은 MaxRequestWorkers가 필요하다는 것을 알게되면 아래에서 해결해야 할 별도의 문제입니다.

  1. Apache 웹 서버를 시작하십시오.
    sudo 서비스 아파치 2 시작
  1. 10 개의 브라우저 탭을 열고 웹 사이트에서 길거나 느리게로드되는 일부 페이지에 연결 한 후 각 탭에서 3-4 번 새로 고칩니다.

  2. 그렇게 한 후 이제 다음 명령을 빠르게 실행하십시오.

    sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "아파치 메모리 사용량 (MB) :"x / 1024; "평균 프로세스 크기 (MB) :"x / ((y-1) * 1024)} '인쇄

5 배 빠르게 실행하십시오.

평균 프로세스 크기 값을보고 해당 값을 실행 한 5 회 중 평균 값을 찾으십시오.

이제 다음 수학을 수행하고 모든 숫자가 MB 값이되도록 필요에 따라 GB를 MB로 변환하십시오. 따라서 필요한 방법에 따라 1024를 곱하거나 1024로 나눕니다.

MaxRequestWorkers = 기준선 없음 (버퍼 공간 사용) / 평균 프로세스 크기

예를 들어, 14GB 서버가 있지만 Apache가 중지되면 서버가 유휴 상태에서 1GB RAM을 사용하는 것으로 나타났습니다. 그런 다음 필요한 경우 OS의 추가 버퍼 공간에 다른 1GB를 제공합니다. 즉, 12GB의 Baseline Free가 필요합니다. 이제 GB에서 MB로 변환해야하므로 12 x 1024를 곱하고 12288을 얻습니다. 12288MB는 기본 무료 값입니다. 필자의 경우 평균 프로세스 크기가 21MB라는 것을 알았습니다. 따라서 12288/21을 취하고 약 585를 얻습니다. 이제 sysops가이 값을 반올림하여 580을 얻었습니다.

  1. /etc/apache2/mods-enabled/mpm_prefork.conf 파일을 편집하고 다음 기본값으로 설정하여 XXX를 MaxRequestWorkers 계산으로 바꾸십시오.


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

ServerLimit 매개 변수가 표시되지 않을 수 있습니다. 그것을 추가하십시오. 이 매개 변수는 존재하지 않는 경우 기본값은 256이지만 MaxRequestWorkers와 같은 값이어야합니다. 그렇지 않으면 오류가 발생합니다.

  1. Apache 구성의 또 다른 중요한 요소는 Timeout 변수가있는 /etc/apache2/apache2.conf 파일이며 초 단위로 측정됩니다. 시간이 초과되기 전에 서버에서 보내거나받을 수있는 시간입니다. 예를 들어 사람들이 CSV 또는 다른 큰 파일을 업로드하거나 다운로드 할 수있는 웹 사이트가있는 경우와 같이 파일 업로드 또는 파일 다운로드를 염두에 두어야합니다. 또한 사용량이 많은 데이터베이스 서버와 페이지 시간 초과 전에 시간을 제공해야하는 위치를 염두에 두어야합니다. Timeout 변수를 작게 만들수록 웹 서버는 새 연결을 더 많이 사용할 수 있습니다. 그러나이 값을 너무 낮게 설정하면 브라우저 세션 기반 쿠키가 아닌 PHP 세션 변수에 혼란을 초래할 수 있습니다. 예를 들어 300 (5 분) 값은 브라우저 세션 쿠키 대신 웹 앱 워크 플로우에 PHP 세션 변수를 사용하는 웹 서버에 적합 할 수 있습니다. 값 45는 정적 광고 랜딩 페이지 이상을 제공하는 웹 서버에는 좋지만 PHP 세션 변수를 많이 사용해야하는 서버에는 끔찍합니다. 따라서이 파일에서 Timeout 매개 변수를 필요한 양으로 편집하십시오. 값이 너무 낮은 지 확인하려면 모든 웹 페이지에서 약간의 테스트가 필요할 수 있습니다. 그러나 큰 파일 업로드 나 큰 파일 다운로드에서 문제가 발생하지 않는 한 300보다 높게 설정하지 않는 것이 좋습니다. 그러나 PHP 세션 변수를 많이 사용해야하는 서버에는 끔찍할 것입니다. 따라서이 파일에서 Timeout 매개 변수를 필요한 양으로 편집하십시오. 값이 너무 낮은 지 확인하려면 모든 웹 페이지에서 약간의 테스트가 필요할 수 있습니다. 그러나 큰 파일 업로드 나 큰 파일 다운로드에서 문제가 발생하지 않는 한 300보다 높게 설정하지 않는 것이 좋습니다. 그러나 PHP 세션 변수를 많이 사용해야하는 서버에는 끔찍할 것입니다. 따라서이 파일에서 Timeout 매개 변수를 필요한 양으로 편집하십시오. 값이 너무 낮은 지 확인하려면 모든 웹 페이지에서 약간의 테스트가 필요할 수 있습니다. 그러나 큰 파일 업로드 나 큰 파일 다운로드에서 문제가 발생하지 않는 한 300보다 높게 설정하지 않는 것이 좋습니다.

  2. 이제 Apache 웹 서비스를 다시 시작하십시오. 만약 당신이 무언가 잘못했다면, 아파치는 다시 시작할 때 그것에 대해 알려줄 것이고, 그것을 바로 잡을 수 있습니다.

    sudo 서비스 아파치 2 재시작
  1. 이제 이전에했던 10 탭 브라우저 트릭을 반복하고 Apache 웹 서버 오류 로그에서 Apache 구성 오류가 발생하는지 확인하십시오.
    sudo tail -f /var/log/apache2/error.log

... 원한다면 CTRL + C를 누르십시오.

MaxRequestWorkers가 필요하고 최근에 웹 서버를 다시 시작한 이후에 불만이 있는지 확인하십시오. 최적의 MaxRequestWorkers 설정으로도 웹 사이트 나 웹 응용 프로그램에 더 많은 화력이 필요할 것입니다. 다음 옵션을 고려하십시오.

  • 대용량 파일 다운로드, 이미지 및 스크립트에 CDN 사용
  • CloudFlare 또는 기타와 같은 캐싱 서비스 사용
  • 웹 사이트 또는 웹 응용 프로그램 전략을 다시 실행하여로드 밸런서 뒤에 하나의 "웹 응용 프로그램"역할을하는 여러 웹 서버를 사용하십시오.
  • 서버에 RAM을 추가하여이 계산을 다시 수행합니다.

  1. 이제 Apache 서버가 조정되었으므로 일종의 기준선이 조정되었습니다. 2-3 주 동안이를 확인하고 Apache 오류 로그에서 MaxRequestWorker 문제를 찾아야합니다. 이를 통해 최적화에 대한 결정을 내릴 수 있습니다 (10 단계 참조). Ubuntu에 apt로 Munin을 설치하고 시간이 지남에 따라 Apache 성능을보고 웹 서버가 처리하는 트래픽 양에 대해 무엇인가를 결정하기 전에 성장에 대한 아이디어를 그릴 수 있습니다.

“이러한 링크가 질문에 대답 할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 할 수있는 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되는 경우 링크 전용 답변이 잘못 될 수 있습니다. "
제니 D가 분석 재개 모니카 말한다

@JennyD 좋은 지적! 내가 할게.
ServerChecker

@ 중재자이 답변에 대한 형식 도움말이 필요합니다. 7 단계는 들여 쓰기가있는 conf 파일이어야합니다. 11 단계는 들여 쓰기되어서는 안됩니다. 로 시작하는 코드 명령 sudo은 일반 텍스트가 아닌 코드로 표시되어야합니다. 나는 형식화에 대한 문서를 따랐지만 여전히 여기에서 어려움을 겪고 있습니다.
ServerChecker

1
내가 할 수있는 일을했습니다. markdown은 혼합 목록과 코드를 잘 수행하지 않지만 어쨌든 조금 더 잘 처리 할 수 ​​있다고 생각합니다.
Jenny D는 Reinstate Monica가

나 같은 centos 초보자를 위해 : ps -ylC apache2 대신 ps -lyU 아파치
user1928596

3

MaxRequestWorkers를 높일 수있는 것은 각 httpd / apache 프로세스가 차지하는 RAM의 양에 달려 있습니다. 각각 50MB를 차지하는 경우 (임의의 숫자 만 선택) 한 번에 사용중인 20 명의 요청 작업자 (예 : 동시 연결)마다 1GB가 사용됩니다. 따라서이 예에서는 최대 8GB * 20 = 160 MaxRequestWorkers를 가질 수 있습니다. 그러나 아파치에 모든 RAM을 사용할 수는 없으며 거기서 실행중인 다른 것들을 위해 일부를 예약해야합니다. 또한 여분의 RAM을 남겨두면 OS가 사물을 캐시하고 성능을 향상시키는 데 사용하기 때문에 성능에 도움이 될 수 있습니다. 사용자 브라우저는 모두 사용되지 않으면 연결이 가능할 때까지 기다립니다.


이것을 프로파일 링하는 좋은 방법은 무엇입니까? 각 아파치 프로세스가로드 상태에서 사용하는 RAM의 양을 확인하기 위해 어떤 명령을 입력 할 수 있습니까? 또한 MySQL (WordPress 사이트) 및 일반 시스템 프로세스를위한 RAM 공간도 필요합니다.
ServerChecker

free메모리 기준을 얻기 위해 실행중인 프로세스 수를 확인하고 명령을 실행하십시오 . 그런 다음 MinSpareServers를 늘리고, 아파치를 다시 시작하고, 다시 실행 free하고, 수학을 수행하여 실행중인 프로세스 수를 늘리십시오 . 자세한 내용과 설명은 moreofless.co.uk/apache-memory-usage 를 확인하십시오 .
g491

나는 지금 이것을하는 아주 빠른 방법이 있다는 것을 배웠다. 아래 답변에 cloudinservice.com 링크에 설명되어 있습니다. 명령은 누군가 알아 낸 ap.sh입니다. 또한 MaxClients의 이름이 Apache 2.4 이상에서 MaxRequestWorkers로 바뀌 었습니다.
ServerChecker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.