Apache 성능 최적화

Apache 성능 최적화

저는 현재 사내에서 호스팅되는 웹 서버를 최적화하는 방법을 찾고 있습니다. 많이 공급하려고 노력하고 있어요관련 있는아래 정보. 지원을 위해 추가 정보가 필요한 경우 알려주시기 바랍니다.

서버는 Zend Framework(ver1)를 기반으로 구축된 온라인 피자 주문 플랫폼인 단일 웹사이트 1개를 운영하고 있습니다. 지난 달의 트래픽 통계에 따르면 하루에 약 6,000페이지 로드가 발생했으며 주로 저녁 시간에 집중되었습니다. 해당 기간 동안 시간당 로드는 약 1,500회에 달했습니다.

우리는 최근 2/2mbit aDSL 라인에서 100/100mbit 파이버로 업그레이드했지만 저녁 시간에는 여전히 성능 문제가 있습니다. 우리는 2mbit가 문제라고 가정했습니다. 로드가 적은 기간에는 웹 사이트가 매우 빠릅니다.

하드웨어

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

서버 OS

FreeBSD 8.2-RELEASE

소프트웨어

apache-2.2.17
php5-5.3.8
mysql-server-5.5

아파치 발자국(예: # 상단에서 가져옴)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

Apache는 prefork MPM, APC(대체 PHP 캐시)를 사용하고 있습니다. SSL 모듈이 로드되었지만 활용되지 않았습니다(실제로 작동하지 않아 사용되지 않음). MPM 모듈에 대한 설정이 포함된 파일이 있지만 httpd.conf 파일에 포함되어 있지 않은 것을 보면 포함 줄이 주석 처리되어 있습니다. 따라서 나는 프리포크 MPM도 기본값으로 작동하고 있다고 추측합니다.

내가 찾은 다른 Apache conf 값은 다음과 같습니다. 이는 https.conf에 포함되어 있습니다.

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

성능 문제가 발생할 때 로드

여기에 이미지 설명을 입력하세요

참고: 백엔드에 대한 API 요청

우리의 온라인 플랫폼은 API(GET/POST)를 통해 백엔드 시스템과 통신합니다. 장바구니(새 항목이 추가될 때까지 캐시됨), 제품(캐시됨), 제품 가격(캐시됨)에 대한 가격 견적의 경우. 그리고 백엔드 서버는 웹에서 성능 문제가 나타날 때 실제로 실제 부하를 표시합니다. 그래서 나는 완료하는 데 시간이 오래 걸리고 따라서 웹 서버에서 클라이언트를 지연시키는 API 요청이라는 점에 더 힘쓰고 있습니다. 그래서 제 질문은 위에 주어진 통계(트래픽/로드)와 소프트웨어의 현재 구성입니다. 인터넷 연결 및 하드웨어 사양과 비교하면 서버가 스트레스를 받고 있다는 신호입니까? 그리고 사용 가능한 리소스와 Apache의 실제 공간을 기반으로 웹 서버의 최대 클라이언트 수를 늘릴 수 있습니까?

답변1

웹사이트 성능은 큰 주제입니다. 내가 보기에 문제는 Apache가 아닐 가능성이 높습니다.

하지만 성능을 향상하는 데 도움이 될 수 있는 몇 가지 사항이 있습니다.

  • 캐싱! PHP 코드에 얼마나 많은 캐시를 저장했는지 모르겠습니다. 하지만 SSL을 사용하지 않고 읽기 전용 데이터가 많기 때문에 다음을 시도해 보세요.광택

  • 할 수 있게 하다mod_expires

  • 다음을 사용하여 웹사이트/백엔드 API를 프로파일링하세요.JMeter

답변2

아니요, 위의 내용은 서버에 스트레스가 있다는 징후가 아닙니다.

네트워크 I/O 포화가 발생할 수 있지만(실제 데이터를 제공하지 않기 때문에) 피크 시간대에 실제 요청이 거의 발생하지 않기 때문에 이는 거의 발생하지 않습니다.

최대 용량으로 실행되고 있는지 확인하려면 HTTP 백엔드에서 몇 가지 테스트를 실행해야 합니다. 그렇다면 이를 수정해야 합니다.

나중에 참조하려면 다음을 구성하고 사용해야 합니다.서버 상태여기에 설명된 대로 Apache를 모니터링하는 핸들러:http://httpd.apache.org/docs/2.2/mod/mod_status.html

답변3

Apache 성능은 Worker MPM 및 Prefork 설정으로 조정할 수 있습니다. Keepalive 및 최대 예비 스레드를 변경하면 성능이 향상되고 메모리 사용량이 줄어드는 데 도움이 될 수 있습니다. Prefork 및 Worker에 대한 최적의 설정은 다음에서 찾을 수 있습니다.여기

답변4

프로세스가 부족할 수 있습니다( MaxSpareServers및 로 정의됨 StartServers). 기본값은 10이므로 응답 시간이 높으면 2초마다 요청 하나(1500/시간)에 충분하지 않을 수 있습니다.

모듈 을 켜서 server-status사용 중인 프로세스를 모니터링하세요.내부에서만 액세스할 수 있도록 액세스 규칙을 설정했는지 확인하세요.

관련 정보