2013-10-31 2 views
1

`ab '도구를 사용하여 Apache & PHP 설정 (Ubuntu의 기본 설정)을 테스트하고 있습니다. 2 개의 동시 연결을 사용하면 매우 만족스러운 결과를 얻을 수 있습니다.Apache와 PHP의 동시성 성능 최적화

ab -k -n 1000 -c 2 http://localserver/page.php 

Requests per second: 184.81 [#/sec] (mean) 
Time per request:  10.822 [ms] (mean) 
Time per request:  5.411 [ms] (mean, across all concurrent requests) 

메모리가 적은 가상 머신이라면 괜찮습니다. 지금은보다 현실적인 시나리오를 테스트하려면 : 100 사용자들 사이에 확산 요청 (읽기 : 연결)를 동시에 연결이 훨씬 더 나쁜

ab -k -n 1000 -c 100 http://localserver/page.php 

Requests per second: 60.22 [#/sec] (mean) 
Time per request:  1660.678 [ms] (mean) 
Time per request:  16.607 [ms] (mean, across all concurrent requests) 

. 초당 요청 수가 전체적으로 (184 ~ 60 #/초) 크게 감소하지는 않았지만 사용자 관점 에 대한 요청 시간은 평균적으로 10 밀리 초에서 1.6 초를 초과하여 급격히 증가했습니다 (). 가장 긴 요청은 8 초 이상 걸리고 웹 브라우저를 사용하여 로컬 서버에 수동으로 연결하면 테스트하는 동안 거의 10 초가 걸렸습니다.

무엇이 원인 일 수 있으며 동시성 성능을 허용 가능한 수준으로 최적화하려면 어떻게해야합니까?

(우분투 리눅스 서버와 함께 제공되는 나는 기본 구성을 사용하고 있습니다.)

+0

먼저 로컬 스크립트가 실행되는 내용에 따라 다르지 않습니까? memcache (d)를 사용할 수 있습니까? –

+0

로컬 스크립트는 많은 수의 간단한 echo 문을 실행 중입니다. 나는 의도적으로 데이터베이스 작업을 포함하지 않았다. – JohnCand

+0

메모리가 적은 VM 인 경우 nginx, lighttp 또는 다른 것을 사용하지 않으시겠습니까? – Matt

답변

3

을 시작으로, 당신은 즉 각 스크립트가 소비하는 메모리의 양 볼 필요가있다. memory_limit를 실행 한 다음 VM 메모리를이 값으로 나눕니다. 이것은 메모리가 부족한 상태에서 동시에 처리 할 수있는 연결 수이므로 스 래싱을 시작한 서버 여야합니다.

연결 수가 매우 적습니다. 그래서 당신은

  • 가 증가 메모리
  • 각 연결 마무리 빠르게

다음 단계는 데이터베이스 쿼리가 예상보다 오래 걸릴 수 있는지 확인하는 것입니다 수 있도록 memory_limit를 감소, 나는 보통 시작

필요 0.5s보다 긴 쿼리에서 mysql-slow.log를 찾는다. 가능한 경우 인덱스를 사용하지 않는 쿼리를 제거한다.

다음으로 collectd와 같은 모니터링 도구를 설치하고 충분한 CPU가 있는지 확인하십시오.

이것은 비즈니스 관점에서 볼 때 이것이 새로운 웹 사이트/시스템 또는 기존 항목인지 여부에 달려 있습니다. 새롭고 성장이 극적이라면 당분간 하드웨어에 과다 지출해야합니다. 트래픽이 발생해도 작동하지 않거나 충돌하는 시스템은 비즈니스에서의 신뢰를 매우 빠르게 침식합니다. 그것의 정상에, 호스팅 법안이 한 달에 1000 달러 미만이라면 많은 것을 최적화 할 가치가 없다. 저렴한 가격이 아니라면 비즈니스 모델로 되돌아 가야 할 수도 있습니다.