아파치의 MaxClients. 내 프로세스의 크기를 아는 방법은 무엇입니까?


9

에서 http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

웹 서버 성능에 영향을 미치는 가장 큰 하드웨어 문제는 RAM입니다. 스와핑은 사용자가 "충분히 빠른"것으로 생각하는 시점을 넘어 각 요청의 대기 시간을 증가 시키므로 웹 서버는 절대 스왑 할 필요가 없습니다. 이로 인해 사용자가 중지 및 다시로드를 수행하여로드를 더 증가시킵니다. 서버가 스왑을 시작하는 많은 자식을 생성하지 않도록 MaxClients 설정을 제어 할 수 있습니다. 이 작업을 수행하는이 절차는 간단합니다. top과 같은 도구를 통해 프로세스 목록을보고 평균 Apache 프로세스의 크기를 결정하고이를 사용 가능한 총 메모리로 나누어 다른 프로세스를위한 공간을 남겨 두십시오.

가장 큰 문제는 크기를 아는 방법을 이해할 수 없다는 것입니다. 왜냐하면 3888에 더 이상 httpd의 크기가 있기 때문입니다.

그러나 MaxClient의 수를 결정해야하고 4GB의 RAM이 있으면 972를 얻습니다 .MaxClient에서 900과 같이 사용해야합니까?


4
"3888 이하의 httpd 크기를 가지고 있습니다."- "HUH"라고 말할 때 모든 사람을 대변한다고 생각합니다.
womble

답변:


9

먼저 Apache 프로세스 중 하나의 PID를 결정하십시오.

그런 다음 다음과 같이 할 수 있습니다.

cat /proc/PIDHERE/status | grep VmRSS

이렇게하면 특정 프로세스의 (현재) 상주 세트 크기가 산출됩니다.

VmRSS: 304456 kB

이 값은 들리는대로 RAM에 상주하는 프로세스의 크기입니다.

그런 다음 측정 단위 ( 4GB * 1024 * 1024 = 4,194,304 KB)를 정규화하십시오 . 나누기:

4194304 KB / 304456 KB = 13.77 processes

시스템에서 메모리를 소비하는 다른 프로세스가 있고 스왑을 최소화하려는 것이 이상적입니다. 따라서 13 개의 Apache MaxClient를 구성하지 않을 것입니다 (내 번호 사용). ).

이것은 추정치입니다. 아파치 프로세스의 크기는로드에 따라 시간이 지남에 따라 커질 수 있습니다.


1
RSS는 공유 페이지를 포함하지 않지만, 기록 중 복사로 플래그 지정된 페이지를 포함합니다. 즉, (rss의 합계) / (물리적 메모리)보다 많은 프로세스를위한 공간이 시스템에 있습니다. 다른 곳에서도 내 대답을 참조하십시오-여유 공간은 좋은 성능을 위해 필수적입니다.
symcbean

4

테스트 시나리오에서 maxClients를 예측하는 것이 시작점이지만 문제를 올바르게 해결하려면 실제 트래픽에서 애플리케이션의 동작을 측정해야합니다.

아파치가 프리 포크를 실행하고 있다고 가정합니다 ....

httpd 프로세스 수와 'free'출력을 계산하도록 cron 작업을 설정하십시오. 웹 서버가 로컬 파일의 콘텐츠를 제공하는 경우 (많은 경우에도 그렇지 않은 경우에도) 캐시 / 버퍼에 사용할 수있는 메모리 양이 성능에 큰 영향을 미칩니다. 즉, 스와핑 지점에 도달하면 웹 성능이 끔찍할 수 있습니다!

데이터를 얻은 후에는 차트에 데이터를 플로팅하고 최소 제곱 회귀 분석을 수행하십시오. httpd 메모리 사용량의 목표 한계에 도달 한 클라이언트 수를 찾기 위해 추정하십시오. 메모리 대상의 시작 지점은 실제 메모리의 80 % / 내용 크기의 80 % 미만입니다.

(MinSpareServers를 매우 높은 값으로 설정 한 경우 결과가 정확하지 않을 수 있습니다)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

이상적인 세계에서는 동일한 로그 파일에서 URL 응답 시간을 측정하지만 훨씬 더 복잡해집니다.


나를 위해 버퍼 / 캐시는 11 개의 클라이언트를 실행하거나 서버가 86 또는 151 개의 클라이언트에 도달했을 때 (그리고 서버가 충돌했을 때) 거의 변경되지 않습니다. MEM 변수에서 무엇을 기대하십니까? Ubuntu 12.04가 예상보다 다른 것을 제공하는지 궁금합니다.
PeterB

'무료'를 실행하면 내가 기대하는 것을 볼 수 있습니다 (2 숫자). 다른 수의 프로세스로 이러한 수의 변형이 적다는 것이 사실이라면, 이벤트 기반 서버를 실행 중이거나 maxspareservers 설정이 바보입니다. 출력 샘플과 httpd.conf의 관련 부분을 게시했다면 더 나은 사진을 얻을 수 있습니까?
symcbean

.... 그리고 "충돌"? 무슨 추락?
symcbean

httpd.conf 설정 및 샘플 출력에 대해서는 pastebin.com/aHZCagVn 을 참조하십시오 . '충돌'이란 너무 많은 클라이언트를 의미하며 서버의 메모리가 부족하여 잠 깁니다. 자세한 내용은 pastebin.com/fnXzBfQL 을 참조하십시오 .
PeterB

1
@PeterB MySQLd 가이 문제를 일으키는 것 같습니다. 커널의 OOM 킬러가 시작되면 / proc / PID / oom_score_adj의 값을 기준으로 최악의 범죄자를 먼저 죽입니다. 출력에서 입증 된 것처럼 mysqld가 먼저 나갔습니다. VM의 제약 조건에 맞게 my.cnf의 설정을보다 적절하게 조정해야 할 수도 있습니다. / temporary / 해결 방법으로 OOM 킬러가 킥킹되는 것을 피할 수 있는지 확인하려면 가상 메모리를 추가하기 위해 스왑 파일을 추가하십시오. 실제 문제가 확인되면 제거하십시오.
loopforever
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.