프리포크 구성에서 Apache 핸드셰이킹 속도가 느려 구성 조정이 필요함

프리포크 구성에서 Apache 핸드셰이킹 속도가 느려 구성 조정이 필요함

Ubuntu 14/Apache2.4.7을 실행하는 내 서버에는 모든 요청이 HTTPS를 사용하도록 강제하는 htaccess 리디렉션이 있습니다. 대체적으로 반응이 빠릅니다. 그러나 최근에 하트블리드, 비스트 및 기타 악용을 방지하고 최신 암호화 방법을 사용할 수 있도록 보다 현대적인 설정으로 사용되는 암호를 제한하도록 SSL 구성을 변경했습니다.

최근에 이러한 변경 사항(아래 참조)과 관련이 없는 것으로 보이는 불만 사항이 접수되었습니다. 컴퓨터가 때때로 느려질 수 있다는 것입니다. 이러한 불만 사항은 악수 또는 연결과 관련이 있을 수 있음을 시사합니다.

사용하는 브라우저에 따라 다양한 브라우저 상태 메시지와 함께 페이지 로딩이 간헐적으로 느려졌습니다. 이는 모두 보안 연결이 설정되기를 기다리는 결과입니다.

나는 cURL을 사용하여 수천 번 연결하는 PHP 스크립트를 작성했습니다. 어젯밤 늦게 실행했는데 느린 속도는 문제가 되지 않는 것 같습니다. https와 http에도 연결하고 위의 리디렉션을 따라해 보았습니다. 모든 요청은 3.5초 이내에 완료되며, 대다수(96~98%)는 1.5초 이내에 완료됩니다.

오늘 아침 캘리 시간 10시 30분에 동일한 스크립트를 실행했는데 요청의 약 10%가 1.5초보다 오래 걸렸으며 많은 경우 훨씬 더 많은 시간이 걸렸습니다. 가장 긴 시간은 약 17초였습니다.

내 연구와 직관에 따르면 https 핸드쉐이킹은 http 연결보다 더 복잡하지만 아파치 구성을 조정하면 이 문제를 해결할 수 있을 것입니다(예:MaxRequestWorker) 설정. 서버는 로드 평균 1.5 정도를 거의 초과하지 않으며 사용 가능한 메모리도 넉넉해 보입니다.

여기에서 병목 현상을 좁힐 수 있는 방법과 이를 해결하기 위해 취할 수 있는 단계를 제안할 수 있는 사람이 있습니까? 어떤 도움이라도 주시면 감사하겠습니다.

편집: #apache IRC 채널을 방문하여 주변에 물었고 친절한 사람들이 이 서버가 있다는 사실에 주목했습니다.프리포크모드와 MinSpareServers, MaxSpareServers, StartServers 및 MaxRequestWorkers는 모두 기본값이거나 조정되었지만 여전히 매우 낮습니다.

그들은 프로덕션 서버가 프리포크 모드를 사용해서는 안 된다는 점에 매우 단호했고 저에게 몇 가지 링크를 추천해주었습니다.

이러한 성능 문제에 대한 수정 솔루션은 이벤트 모드에서 실행되도록 Apache를 설치하는 것일 수 있지만 내 웹 사이트는 복잡하고 일부 프로세스 분기 등을 사용하는 것으로 이해됩니다. 임시방편으로 일부에서는 다음과 같은 수정 사항을 제안할 수 있기를 바랍니다.최소예비 서버,maxSpareServers,startServers,maxRequestWorker

curl_getinfo편집 2: PHP의 함수 에 의해 보고된 일반적인 느린 요청 분석 :

elapsed: 17.6722049713
ssl_verify_result: 0
total_time: 17.671187
namelookup_time: 0.000051
connect_time: 0.065855
pretransfer_time: 16.787012
starttransfer_time: 17.340403
redirect_time: 0.261569

답변1

결과적으로 Apache와 php7을 설치하기 위한 Ubuntu의 패키지는 prefork 외에는 아무것도 제공하지 않는 것으로 보입니다.정말 짜증나.그렇기 때문에 나는 이상적인 솔루션은 아니지만 다음 중 하나를 얻는 방법에 대한 추가 정보를 얻을 때까지 프리포크를 사용해야 했습니다.권장 구성일하는 것이 내 유일한 선택입니다.

/etc/apache2/mods-available/mpm_prefork.conf 파일을 편집했습니다.

sudo nano /etc/apache2/mods-available/mpm_prefork.conf

MaxRequestWorkers 설정을 300으로 늘렸습니다.메모이 작업을 수행하려면 ServerLimit 설정을 300으로 추가해야 합니다. 그렇지 않으면 MaxRequestWorkers가 ServerLimit의 기본값인 256으로 제한됩니다.

StartServers        5
MinSpareServers     5
MaxSpareServers     10
# changed in response to slow connect/handshaking time complaints
ServerLimit     300
# note this value is constrained by ServerLimit, which defaults to 256
MaxRequestWorkers   300
MaxConnectionsPerChild  0

이러한 설정으로 인해 속도 저하가 완화된 것으로 보입니다. 나는 하루 중 바쁜 시간에 PHP 테스트 스크립트를 사용했고 모든 요청은 3.5초 이내에 완료되었으며 대부분은 1.5초 이내에 완료되었습니다. 또한 Apache 벤치와 높은 동시성 값으로 테스트한 결과 서버가 작업자를 생성하여 응답하는 것을 볼 수 있었지만 여전히 여유 RAM이 충분했습니다.

ab -n 1000 -c 100 "https://example.com/"

다음을 사용하여 RAM을 확인했습니다.

free -h

우분투 설치 프로그램을 사용하여 fastCGI를 사용하도록 아파치를 얻을 수 없다는 점은 매우 실망스럽기는 하지만 현재로서는 작동하는 것으로 보입니다.

관련 정보