예전에 eaccelerator 를 적용했을때는 간혹 문제가 발생이 되었는데
이번에 한번 서버에 적용시켜보기로 했다
실제 내 개인 사이트가 아닌 웹호스팅서버에 적용하려고 먼저 테스트
도입효과
eAccelerator는 PHP가속, 최적화, 동적 컨텐츠 캐시임(PHP Op-Code Caching)
– 코드 변경 필요없음
– 컴파일된 상태의 PHP 스크립트를 캐시하여 실행속도 성능향상됨
– 페이지 Rendering time이 빨라짐 (2-10배)
– CPU/메모리 사용량이 감소하여 서버 load를 감소
공식 홈페이지 : http://www.eaccelerator.net/
현재 0.9.5.3에서 PHP4, PHP 5.2 까지 지원하고 있으며 PHP5.3는 0.9.6-rc1에서 지원함
사용환경은 아래와 같다
Centos 5.x (64bit)
PHP : 5.2.5
Zend : 3.3
1. 다운로드 및 설치
[root@ns1 ~]# wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
[root@ns1 ~]# tar xvfj eaccelerator-0.9.6.tar.bz2
[root@ns1 ~]# cd eaccelerator-0.9.6
[root@ns1 eaccelerator-0.9.6]# /usr/local/php/bin/phpiz
[root@ns1 eaccelerator-0.9.6]# ./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
[root@ns1 eaccelerator-0.9.6]# make && make install
2. 모듈 확인
[root@ns1 eaccelerator-0.9.6]# ll /usr/local/php/lib/php/extensions/no-debug-zts-20060613/
-rwxr-xr-x 1 root root 396084 4월 28 16:01 eaccelerator.so
-rwxr-xr-x 1 root root 396084 4월 28 16:01 eaccelerator.so
3. 캐쉬가 저장될 디렉토리 생성 및 권한 설정
[root@ns1 eaccelerator-0.9.6]# mkdir /var/tmp/eaccelerator
[root@ns1 eaccelerator-0.9.6]# chmod 700 /var/tmp/eaccelerator/
[root@ns1 eaccelerator-0.9.6]# chown nobody /var/tmp/eaccelerator/
[root@ns1 eaccelerator-0.9.6]# chmod 700 /var/tmp/eaccelerator/
[root@ns1 eaccelerator-0.9.6]# chown nobody /var/tmp/eaccelerator/
4. 이제 환경설정 내용을 php.ini에 추가해 준다
[root@ns1 eaccelerator-0.9.6]# vi /usr/local/apache/conf/php.ini
추가 (zend 위에 추가한다)
[eaccelerator]
zend_extension_ts=/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so
eaccelerator.shm_size=32
eaccelerator.cache_dir=/var/tmp/eaccelerator/
eaccelerator.enable=1
eaccelerator.optimizer=1
eaccelerator.debug=0
eaccelerator.log_file=/var/log/eaccelerator_log
eaccelerator.name_space=””
eaccelerator.check_mtime=1
eaccelerator.filter=””
eaccelerator.shm_max=0
eaccelerator.shm_ttl=3600
eaccelerator.shm_prune_period=0
eaccelerator.shm_only=0
eaccelerator.compress=1
eaccelerator.compress_level=9
;eaccelerator.keys=”shm_and_disk”
;eaccelerator.sessions=”shm_and_disk”
;eaccelerator.content=”shm_and_disk”
;eaccelerator.allowed_admin_path=””
zend_extension_ts=/usr/local/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so
eaccelerator.shm_size=32
eaccelerator.cache_dir=/var/tmp/eaccelerator/
eaccelerator.enable=1
eaccelerator.optimizer=1
eaccelerator.debug=0
eaccelerator.log_file=/var/log/eaccelerator_log
eaccelerator.name_space=””
eaccelerator.check_mtime=1
eaccelerator.filter=””
eaccelerator.shm_max=0
eaccelerator.shm_ttl=3600
eaccelerator.shm_prune_period=0
eaccelerator.shm_only=0
eaccelerator.compress=1
eaccelerator.compress_level=9
;eaccelerator.keys=”shm_and_disk”
;eaccelerator.sessions=”shm_and_disk”
;eaccelerator.content=”shm_and_disk”
;eaccelerator.allowed_admin_path=””
5. 이제 적용이 잘되었는지 콘솔 상태에서 확인해 보자 eaccelerator 추가가 된것이 확인된다
[root@ns1 eaccelerator]# php -v
PHP 5.2.5 (cli) (built: Mar 26 2010 17:39:11)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
PHP 5.2.5 (cli) (built: Mar 26 2010 17:39:11)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
6. 이제 아파치를 재 시작하고 /var/tmp/eaccelerator 캐싱 디렉토리에 파일이 생성이 될 것이다
[root@ns1 eaccelerator]# ll /var/tmp/eaccelerator/0/0
합계 7828
-rw——- 1 nobody nobody 26696 4월 28 16:11 eaccelerator-1802.0068174
-rw——- 1 nobody nobody 4584 4월 28 16:11 eaccelerator-1802.01541571
-rw——- 1 nobody nobody 1272 4월 28 16:17 eaccelerator-1802.01853713
-rw——- 1 nobody nobody 7096 4월 28 16:29 eaccelerator-1802.01932353
합계 7828
-rw——- 1 nobody nobody 26696 4월 28 16:11 eaccelerator-1802.0068174
-rw——- 1 nobody nobody 4584 4월 28 16:11 eaccelerator-1802.01541571
-rw——- 1 nobody nobody 1272 4월 28 16:17 eaccelerator-1802.01853713
-rw——- 1 nobody nobody 7096 4월 28 16:29 eaccelerator-1802.01932353
이제 실제 웹 사이트에서 테스트를 해보자
우선 다른 곳에서 이 서버의 ab 벤치테스트를 진행해보자
1. Zend 만 사용시
우선 다른 곳에서 이 서버의 ab 벤치테스트를 진행해보자
1. Zend 만 사용시
Concurrency Level: 1
Time taken for tests: 83.842703 seconds
Requests per second: 2.39 [#/sec] (mean)
Time per request: 419.214 [ms] (mean)
Time per request: 419.214 [ms] (mean, across all concurrent requests)
Transfer rate: 475.87 [Kbytes/sec] received
Time taken for tests: 83.842703 seconds
Requests per second: 2.39 [#/sec] (mean)
Time per request: 419.214 [ms] (mean)
Time per request: 419.214 [ms] (mean, across all concurrent requests)
Transfer rate: 475.87 [Kbytes/sec] received
Connection Times (ms)
min avg max
Connect: 0 0 0
Processing: 402 418 579
Total: 402 418 579
min avg max
Connect: 0 0 0
Processing: 402 418 579
Total: 402 418 579
2. eaccelerator + Zend 사용시
[root@ns1 bin]# ./ab -n200 -c1 -dS “http://xinet.kr/tc/index.php“
Concurrency Level: 1
Time taken for tests: 54.254420 seconds
Requests per second: 3.69 [#/sec] (mean)
Time per request: 271.272 [ms] (mean)
Time per request: 271.272 [ms] (mean, across all concurrent requests)
Transfer rate: 735.37 [Kbytes/sec] received
Time taken for tests: 54.254420 seconds
Requests per second: 3.69 [#/sec] (mean)
Time per request: 271.272 [ms] (mean)
Time per request: 271.272 [ms] (mean, across all concurrent requests)
Transfer rate: 735.37 [Kbytes/sec] received
Connection Times (ms)
min avg max
Connect: 0 0 0
Processing: 264 270 438
Total: 264 270 438
min avg max
Connect: 0 0 0
Processing: 264 270 438
Total: 264 270 438
결과 :
역시 빨라졌다
Requests per second는 많은 양을 처리했고
Time per request 는 약 1.5배 정도 빨라졌고
이제 실제 웹호스팅서버에 적용하고 아파치에서 사용하는 cpu의 로드부분만 체크하면 된다
추후 모니터링 결과 기재…
eaccelerator 환결설정 옵션 설명
– eaccelerator.shm_size = eAccelerator가 사용할 공유 메모리량. 단위 MBytes.
0을 지정하면 OS 기본값. default = 0
– eaccelerator.cache_dir = 캐싱 디렉토리를 지정. precompiled code, session data, content
등이 저장된다.
– eaccelerator.enable = eAccelerator 사용 여부. 당연히 1
– eaccelerator.optimizer = 최적화 여부. 1= enable, 0 = disable
– eaccelerator.check_mtime= php 파일 변경시간을 체크하여 반영할 것인지 여부
– eaccelerator.debug = debug 로깅 여부
– eaccelerator.filter = 캐싱할 php 파일을 지정한다. *.php *.html *.php3 처럼 지정할 수
있으며 “” 로 비워두면 모든 php 파일이 캐싱된다.
– eaccelerator.shm_max = eaccelerator_put() 함수 사용할 때 최대 할당할 수 있는 공유
메모리 크기를 bytes단위로 표시한다. (예. 10240, 10K, 1M). 0은 제한 없음
eaccelerator_put() 함수는 공유메모리에 특정 데이터를 지정한 시간동안 넣어두는
eAccelerator 자체함수이다.
– eaccelerator.shm_ttl = 새 스크립트 파일을 캐싱할만한 공유 메모리가 없다면,
ssh_ttl 초동안 액세스가 없는 모든 스크립트를 삭제한다. default = 0. 0은 삭제안함을 의미
– eaccelerator.shm_prune_period= 이 설정은 위의 shm_ttl 설정과 비슷하다.
지정한 초보다 오래전에 만들어진 스크립트를 제거한다.
즉, shm_ttl은 액세스시간에, shm_prune_period는 생성시간에 따라 삭제한다.
default = 0. 0은 삭제안함을 의미
– eaccelerator.shm_only = 컴파일된 스크립트를 디스크에 캐싱할 것인지 여부.
session data와 content 캐싱은 이설정과 무관. default = 0.
0이면 캐싱을 위해 디스크와 메모리를 모두 사용한다.
메모리 크기를 bytes단위로 표시한다. (예. 10240, 10K, 1M). 0은 제한 없음
eaccelerator_put() 함수는 공유메모리에 특정 데이터를 지정한 시간동안 넣어두는
eAccelerator 자체함수이다.
– eaccelerator.shm_ttl = 새 스크립트 파일을 캐싱할만한 공유 메모리가 없다면,
ssh_ttl 초동안 액세스가 없는 모든 스크립트를 삭제한다. default = 0. 0은 삭제안함을 의미
– eaccelerator.shm_prune_period= 이 설정은 위의 shm_ttl 설정과 비슷하다.
지정한 초보다 오래전에 만들어진 스크립트를 제거한다.
즉, shm_ttl은 액세스시간에, shm_prune_period는 생성시간에 따라 삭제한다.
default = 0. 0은 삭제안함을 의미
– eaccelerator.shm_only = 컴파일된 스크립트를 디스크에 캐싱할 것인지 여부.
session data와 content 캐싱은 이설정과 무관. default = 0.
0이면 캐싱을 위해 디스크와 메모리를 모두 사용한다.
– eaccelerator.compress = 캐시된 내용 압축 여부
– eaccelerator.compress_level= 압축 레벨 지정. 9는 최대 압축 레벨
– eaccelerator.compress_level= 압축 레벨 지정. 9는 최대 압축 레벨