아파치 메모리 사용 최적화


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.