Apache2 프리 포크 MaxClients ServerLimit 튜닝


22

Apache2를 웹 서버로 사용하는 128GB Ram 시스템이 있습니다 (이 시스템에는 데이터베이스 서버가 없으며 데이터베이스 시스템은 2000 최대 연결을 처리 할 수있는 64GB Ram 시스템입니다). 현재 약 44 명의 바쁜 근로자와 12 명의 유휴 근로자가있는 모니터링 툴을 통해 프리 포크 모듈에 가장 적합한 이론적 값은 무엇입니까?

때때로로드 시간이 긴 웹 사이트를로드하는 빈 페이지가 있고 아파치 오류 로그에이 오류가 발생했습니다.

【공지】 아이 pid 13595 이탈 신호 분할 이상 (11)

이 문제를 어떻게 해결할 수 있습니까?

내 Apache2 Prefork 모듈 구성 :

StartServers          3
MinSpareServers       3
MaxSpareServers       5
ServerLimit           3200
MaxClients            3100
MaxRequestsPerChild   0

www Machine에서 무료 -h :

총 : 128G 사용 가능 : 97GB (아파치 2 실행 중) 공유 0b 버퍼 1.9G 캐시 23G

Apache2 및 기타 프로그램에서 사용하는 Ram :

Private  +   Shared  =  RAM used    Program

 96.0 KiB +  61.0 KiB = 157.0 KiB   sh
176.0 KiB +  26.0 KiB = 202.0 KiB   atd
176.0 KiB +  35.5 KiB = 211.5 KiB   acpid
208.0 KiB +  19.5 KiB = 227.5 KiB   mdadm
204.0 KiB +  30.0 KiB = 234.0 KiB   init
248.0 KiB +  62.0 KiB = 310.0 KiB   sendmail
376.0 KiB +  36.0 KiB = 412.0 KiB   dbus-daemon
388.0 KiB + 285.5 KiB = 673.5 KiB   cron (2)
820.0 KiB +  42.0 KiB = 862.0 KiB   gam_server
920.0 KiB + 108.0 KiB =   1.0 MiB   ntpd
968.0 KiB + 243.0 KiB =   1.2 MiB   getty (6)
  1.3 MiB + 351.5 KiB =   1.6 MiB   udevd (3)
  1.5 MiB + 343.0 KiB =   1.8 MiB   sendmail-msp
  2.0 MiB + 910.0 KiB =   2.9 MiB   plugin-localresources2
  3.4 MiB +  50.0 KiB =   3.4 MiB   rsyslogd
  3.6 MiB +  68.5 KiB =   3.7 MiB   bash
  1.9 MiB +   2.1 MiB =   4.0 MiB   sendmail-mta (4)
  3.8 MiB + 556.0 KiB =   4.3 MiB   sshd (2)
  3.7 MiB +   1.2 MiB =   4.8 MiB   plugin-apache2
  5.1 MiB +   1.2 MiB =   6.3 MiB   agent-service
  7.0 MiB + 654.0 KiB =   7.6 MiB   fail2ban-server
  9.6 MiB +   2.6 MiB =  12.2 MiB   proftpd (8)
 59.2 MiB +  70.0 KiB =  59.3 MiB   miniserv.pl
 96.8 MiB +   3.6 MiB = 100.4 MiB   php5-cgi (2)
196.4 MiB +  35.9 MiB = 232.3 MiB   apache2 (40)
---------------------------------
                     tot 450.0 MiB

2
웹 서버 내에서 실행되는 응용 프로그램 코드는 무엇입니까? 아마도 범인 일 것입니다.
Shane Madden

apache2ctl 상태의 샘플을 보내십시오; error_log에 무엇이 있습니까?
Hrvoje Špoljar

답변:


63

Apache 성능 조정 지침에 따라 Apache 프리 포크 설정

인용문:

The single biggest hardware issue affecting webserver performance is RAM.
A webserver should never ever have to swap, as swapping increases the latency
of each request beyond a point that users consider "fast enough". 
This causes users to hit stop and reload, further increasing the load.
You can, and should, control the MaxClients setting so that your server does
not spawn so many children it starts swapping. This procedure for doing this
is simple: determine the size of your average Apache process, by looking at
your process list via a tool such as top, and divide this into your total 
available memory, leaving some room for other processes.

입력을 기반으로 다음과 같이 설정해야합니다.

  • 총 메모리 : 128GB
  • 아파치를 제외한 모든 경우에 -10 % 메모리 : 115GB
  • 이제 단일 아파치 프로세스가 얼마나 많은 양을 사용해야하는지 알아야합니다.

이것을 계산하려면 다음 스크립트를 사용할 수 있습니다.

pgrep apache2 | xargs -n1 -I{} cat /proc/{}/smaps | \
  awk '{if ($0 ~ /stack/) {pids+=1} else if ($0 ~/^Shared_/) 
    {shared+=$2} else if ($0 ~ /^Pss:/) {priv+=$2}} END {
      printf "%.2f MB\n",(priv+shared/(pids*pids))/1024}'

이것은 활성 아파치 프로세스 수당 공유 사용량을 비례 적으로 나누고 Pss 위에 추가하려고 시도하는 동안 단일 아파치 프로세스가 메모리를 사용하는 양을 추정하는 것이 가장 좋습니다 (비례 세트 크기).

마지막 으로이 수치로 115GB를 나누면 얻을 수 MaxClients/ServerLimit있습니다. 여기에서 다른 수치를 상대적으로 계산할 수 있습니다

  • StartServers MaxClients의 30 %
  • MinSpareServers MaxClient의 5 %
  • MaxSpareServers MaxClient의 10 %
  • ServerLimit == MaxClients
  • MaxConnectionsPerChild 10000 (메모리 누수 앱의 가능한 문제를 해결하기위한 보수적 인 대안으로)

2
나보다 더 많은 담당자를 가진 사람이 당신 에게이 답변에 대한 투표를 해주기를 바랍니다. 감사합니다!
User-N

2
계산 스크립트가 842.13MB를 제공합니다. 그것은 내가 할 수있는 것보다 큰 순서입니다 (CentOS 6.7의 아파치 2.2).
Quinn Comendant

1
프리 포크 모드입니다. 다음에서 출력됩니다 /server-info: i.imgur.com/SS2gIXI.png
Quinn Comendant

1
@QuinnComendant 사악한 트릭 그러나 prefork 모듈을 사용할 수 있다면 (모듈) IfModule이 true가되고 실제로 두 옵션을 모두 사용할 수 있습니다. 프리 포크가 800MB의 메모리 1 프로세스에 사용할 수있는 방법은 없습니다. 스크립트에서 프로세스 이름 apache2를 httpd로 참조하는 줄을 변경했습니다.
Hrvoje Špoljar

1
@shawn 왜 그렇게 말하겠습니까? 계산해야한다고 어떻게 생각하십니까?
Hrvoje Špoljar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.