아파치 메모리 사용 최적화


11

Apache에서 서버 메모리를 너무 많이 사용하여 충돌이 발생했습니다. 서버에 4GB의 RAM이 있습니다.

성능을 향상시키기 위해 Apache 설정을 미세 조정하려고하지만 이것에 익숙하지 않습니다.

이 기사의 조언 을 따르려고 했지만 물건을 계산하는 방법을 잘 모르겠으며 악화시키고있는 것 같습니다.

내 상단은 다음과 같습니다.

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

따라서

MaxClients = 3000/ (322-37) = 10

맞습니까? 또한 MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild와 같은 다른 매개 변수의 값은 무엇입니까?

누군가 제발 도와주세요?

최신 정보

나는 너희들이 제안한 것을 시도했다. 작동하지만 잠시 동안 만 작동합니다. 서버가 시작된 후 일정 시간이 지나면 메모리 사용량이 계속 증가하고 결코 줄어들지 않습니다.

서버를 시작한 후 온라인에 500 명의 사용자가 있다고 가정 해 봅시다. 서버는 X RAM을 소비합니다. 그 후 2 시간이 지나면 동일한 500 명의 온라인 사용자가 서버에서 10X RAM을 소비하게됩니다.

이것을 피할 수있는 방법이 있습니까? 아니면 서버를 계속 보면서 다시 시작해야합니까?


1
질문에 업데이트를 추가 할 때는 답변을 게시하지 말고 원본을 수정하십시오. 이것은 또한 프론트 페이지 상단에 질문을 다시 부딪 치는 추가 보너스를 제공합니다.
벤 Pilbrow

답변:


14

Apache의 메모리 사용량을 조정하는 주요 매개 변수는입니다 MaxClients. 값이 너무 낮 으면 사용 가능한 슬롯이 부족하여 클라이언트 요청을 처리 할 수 ​​있습니다. 너무 많으면 모든 RAM을 사용하고 성능을 저하시키는 스왑 공간을 사용하기 시작합니다 (서버 충돌로 보일 수 있음).

튜닝의 한 가지 방법은 MaxClients시스템의 메모리 사용량을 관찰하고 필요에 따라 설정을 조정 / 조정하는 것입니다. 서버가 교체를 시작하면 아래로 편집하십시오. 서버에 여유 메모리가있는 경우 메모리를 넣으십시오.

Apache의 메모리 사용량을보고 최대 값을 추정 할 수도 있습니다. 프로세스를 메모리별로 정렬하려면 시작 top하고 누르 M십시오. 다음과 같이 보일 것입니다 :

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18698 apache    17   0  141m  59m  41m S  0.0  1.6   4:57.46 httpd
18591 apache    17   0  141m  59m  41m S  0.0  1.5   4:54.79 httpd
22917 apache    16   0  141m  57m  39m S  0.0  1.5   4:57.44 httpd
18595 apache    16   0  142m  57m  38m S  0.0  1.5   5:23.43 httpd
18697 apache    16   0  139m  56m  41m S  0.0  1.5   5:09.29 httpd
18735 apache    25   0  141m  56m  38m S  0.0  1.5   5:05.32 httpd

RES 및 SHR 열을 빼면 Apache 인스턴스 당 대략적인 메모리 사용량을 얻을 수 있습니다. 이 경우 약 16MB입니다. 4GB의 RAM이 있고 Apache에 3GB를 사용하려면 MaxClients 설정이 주위에 있습니다.

MaxClients = 3000/16 = 188

따라서이 경우 150-200의 값으로 시작할 수 있지만 메모리 사용량을보고 스왑을 사용하기 시작하면 MaxClients를 10-20 % 줄입니다. 또한 3GB의 값은 임의의 예일뿐입니다. Apache 만 실행하는 서버에서는 거의 모든 4GB를 사용할 수 있습니다. 다른 경우에는 Apache의 1GB 또는 2GB 만 다른 응용 프로그램, 시스템 또는 캐시의 나머지를 저장하고 싶을 수 있습니다.

편집 : 추가 질문에 답변

MaxClients 또는 다른 Apache 구성 매개 변수의 마법 값은 일반적으로 서버를 갑자기 두 배나 빠르게 만듭니다. MaxClients가 10 또는 1000인지에 관계없이 일부 서버는 제대로 실행되는 것처럼 보입니다. MaxClients 설정이 "나쁜"경우에는 두 가지 주요 경우가 있습니다.

  • 너무 낮음 : MaxClients가 너무 낮 으면 모든 Apache 클라이언트가 사용 중이고 다음 연결이 사용 가능할 때까지 대기중인 새 연결이 큐에 들어갑니다. Apache의 mod_status를 활성화하면 어느 시점에 얼마나 많은 클라이언트가 사용 중인지 실시간으로 볼 수 있습니다. 이 상태는 트래픽이 많은 시간 동안 사이트가 느려지고 모든 클라이언트가 사용중인 것으로 관찰 될 수 있으므로 비교적 쉽게 진단 할 수 있습니다.
  • 너무 높음 : MaxClients가 너무 높으면 모든 RAM을 고갈시키고 스왑을 사용하기 시작합니다. 이 문제가 발생하면 사이트 성능이 본질적으로 0으로 떨어집니다 (RAM과 디스크의 속도 차이를 고려하십시오). 이 상태는 트래픽이 급증 할 때까지 서버가 높은 MaxClient로 제대로 실행되므로 관찰 및 진단하기가 훨씬 어려울 수 있습니다. 예를 들어, 한 시간에 몇 번의 공격을받는 사이트에서는 MaxClients를 1000으로 설정하여 RAM에서 지원할 수있는 것보다 훨씬 많지만 Apache가 한 번에 하나 또는 두 개의 클라이언트 만 사용하면되기 때문에 문제를 보지 못했습니다. RAM이 고갈되고 스왑 공간이 필요할 때까지 트래픽이 급증 할 때만 문제를 발견하여 동시에 사용되는 클라이언트 수를 늘립니다.

서버, 응용 프로그램 또는 트래픽에 대한 세부 정보를 모르는 경우 다음 구성 값을 시작점으로 제안 할 수 있습니다. 시도해보고 서버의로드 및 사용량을 모니터링하고 필요에 따라 설정을 변경하십시오.

  • mod_status : 이것을 사용하면 Apache의 사용법을 볼 수 있습니다. 고급 통계를 보려면 Zabbix / Nagios와 같은 모니터링 응용 프로그램을 설치하여 서버 사용 및 트래픽 패턴을 추적 할 수 있습니다.
  • MaxClients : 100-200 값으로 설정하십시오. 메모리 / CPU / 아파치 사용량을 잘 모르고 모니터링하면 더 낮은 값으로 시작합니다. 이것은 조정하는 주요 매개 변수가됩니다.
  • MaxRequestsPerChild : Apache 클라이언트 / 자식을 다시 시작할시기를 지정합니다. 잘못된 값은 없으며 (매우 작은 값은 비효율적이지만) 게재하는 콘텐츠에 따라 다릅니다. 동적 콘텐츠의 경우 0이 아닌 값 (예 : 1000)이 크면 httpd 프로세스가 너무 커지는 것을 막을 수 있습니다.
  • 기타 매개 변수 : 나머지 매개 변수에 대한 철저한 벤치마킹을 수행하지는 않았지만 매우 낮거나 높은 값으로 설정하지 않으면 비교적 작은 영향을 미칩니다. 대부분의 사이트에는 기본값을 사용하는 것이 좋습니다. 매개 변수에 대한 전체 설명과 각 모듈에서 사용되는 매개 변수에 대한 자세한 내용은 Apache Prefork 또는 Worker 모듈 설명서를 참조하십시오 (사용하지 않는 매개 변수를 조정하려는 것은 없습니다).
  • 벤치마킹 : 매개 변수를 조정할 때 ab (ApacheBench) 또는 포위 공격과 같은 벤치마킹 도구를 사용하여 서버 기능에 대한 수량을 얻는 것이 좋습니다. 웹 서버의 매개 변수를 조정하는 좋은 방법은 충돌 여부를 확인하거나 충돌 여부를 확인하는 것이 좋습니다.

MaxClients는 Apache 2.4부터 MaxRequestWorkers로 이름이 변경되었습니다.
jastram
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.