Apache에서 동시 연결을 늘리는 방법

오늘 저는 세계에서 가장 많이 사용되는 웹 서비스 중 하나 인 웹 서버에 대해 다시 한 번 말씀 드리겠습니다. Apache2.

여러 번 언급 된 주제이지만 이제는이 서비스에서 고려해야 할 또 다른 기능에 대해 알려 드리겠습니다. 동시 연결 제한. i7 프로세서와 32GB의 램을 갖춘 매우 기본적인 우주선이든 우주선이든 상관 없습니다.

동시 연결 제한은 적절한 조치를 취하지 않는 한 항상 동일합니다. 즉, 동시에 많은 사람을 연결하려면 좋은 하드웨어뿐만 아니라 좋은 구성도 필요합니다.

이 경우 아무것도 설치할 필요가 없으며 모든 것은 아파치를 구성하기 위해 고려해야하는 간단한 개념을 기반으로합니다. 변경하기 전에 매우 명확해야하는 개념입니다.

아파치2_로고

가장 먼저 고려해야 할 사항은 다음과 같습니다. 우리 팀의 역량은 얼마입니까? 가능한 한 강제로 사용하면 내 장비가 몇 개의 동시 연결을 지원할 수 있습니까? 이 모든 것은 단일 요인에 달려 있습니다. RAM (랜덤 액세스 메모리).

RAM이 클수록 연결 수가 많아 지지만 고정 된 값 (즉, 각 X RAM에 대한 X 클라이언트)이 없기 때문에 먼저 웹 서버에서 몇 가지 작은 계산을 수행하는 것이 중요합니다. 우리의 한계를 알기 위해.

가장 먼저 알아야 할 것은 Apache에 대한 각 연결이 평균적으로 얼마나 많은 RAM을 소비하는지입니다. 각 연결이 시스템에서 특정 RAM을 소비한다고 가정하기 때문입니다 ... 분명히 모든 연결이 동일한 RAM을 소비하는 것은 아닙니다. 미디어 ...이 모든 것은 다음 명령으로 얻을 수 있습니다.

ps -ylC apache2-정렬 : rss | awk '{SUM + = $ 8; I + = 1} END {print SUM / I / 1024} '

얻은 결과는 메가 바이트로 표시되며 활성 연결 수, 액세스 된 페이지 유형 등에 따라 달라질 수 있습니다. 따라서 다른 탭을 열어 테스트를 수행하는 것이 좋습니다. 가능한 경우 각각 다른 내용을 보여줍니다. 예를 들어, 제 경우에는 결과가 9.5458이었는데,이를 맨 위로 반올림하면 10 MB 연결 당 평균 소비 된 RAM.

웹 서비스가 운영 체제에서 실행되는 유일한 서비스가 아니기 때문에 시스템에서 활성 상태 인 나머지 프로세스가 얼마나 많은 RAM을 소비하는지 아는 것도 중요합니다. 나머지 작업을 실행할 수 있습니다. 이것은 아래에 표시된 명령으로 얻을 수 있습니다.

ps -N -ylC apache2-정렬 : rss | awk '{SUM + = $ 8} END {print SUM / 1024}'

얻은 결과는 메가 바이트 단위로도 표시되며 나머지 프로세스에서 소비하는 RAM의 양을 매우 정확하게 보여줍니다. 나의 경우에는 800 MB. 이 정보를 사용하여 우리가 가질 수있는 동시 연결 수를 일반 계산할 수 있습니다. 나는 우리가 아주 간단한 조작으로 얻을 것이라고 계산한다.

(RAMTOTAL-RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

이 공식을 사용하여 4GB RAM, 즉 4096MB의 컴퓨터가 있고 컴퓨터가 앞서 언급 한 결과를 보여 주었다고 가정 해 봅시다. 계산은 다음과 같습니다.

(4096-800) / 10 = 329 동시 연결

이 계산의 문제는 하나가 모든 RAM을 소비하고 (서버가 스왑을 소비하게 함) 너무 극단적이라는 것입니다. 또한 MySQL이나 다른 데이터베이스가있는 경우 연결도 소비하게됩니다. 그래서 얻은 숫자는 유토피아 숫자로 한정 될 수 있습니다. 따라서 가능한 추가 프로세스를 위해 메모리를 확보하고 데이터베이스에 대한 연결이 실행될 가능성도 고려하기 위해 연결 수를 줄입니다. 250.

이제 최대 동시 연결 수를 얻었으므로이 호출의 구성 파일에서 수행되는이 수를 수신 할 수 있도록 Apache를 준비해야합니다. apache2.conf에서 호스팅됩니다. / etc / apache2.

문제의 파일은 다음을 기반으로 한 구조를 따릅니다. 모듈, 각각 해당 이름이 있지만 이름이 다음 중 하나에 만 관심이 있습니다.  mpm_prefork_module. 문제의 모듈에는 기본적으로 다음 데이터가 있습니다.

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

이 모듈에는 매우 중요한 일련의 매개 변수가 있지만 특히 관심을 가질만한 매개 변수 중 하나가 있습니다. MaxClients 지시어. 이 매개 변수는 최대 동시 연결 수를 지정하며 다음과 같이 수정해야합니다. 250.

고려해야 할 한 가지 세부 사항은 해당 매개 변수에 기본값 이외의 값이 지정 될 때이 매개 변수 바로 앞에 다른 값을 추가해야한다는 것입니다. 이 매개 변수는 ServerLimit 한계를 벗어난 경우에도 서버가 "유지"할 수있는 연결 한계를 설정합니다.

ServerLimit 매개 변수는 항상 MaxClients보다 약간 높아야합니다. 여기에서는 조작 할 여지가 거의 없기 때문에 270. 그러면 모듈이 다음과 같이 표시됩니다.

StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0

이제 다음 명령을 사용하여 Apache 서비스를 다시 시작하기 만하면됩니다. 

/etc/init.d/apache2 다시 시작

이것으로 우리는 이미 최적화 된 웹 서버를 즐길 수있었습니다.

인사말.