YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

using PHP Accelerator

페이지 정보

작성자 MintState 댓글 0건 조회 19,198회 작성일 08-11-03 10:42

본문

using PHP Accelerator

- 작성자 : san2(at)linuxchannel.net
- 작성일 : 2002.10.16 (PHPA 1.3.3r1 내용 포함)
          2002.08.06 (내용 보완)
          2002.08.02 (오타 수정)
          2002.07.31

*주1)
이 문서는 Nick Lindridge 씨가 개발한 ionCube PHP Accelerator에 관한
설치와 설정에 관한 내용입니다. 또한 한글 문서가 거의 없어서
(그리 어렵지 않기 때문에)초보자나 처음 사용하시는 분을 위해서
작성되었습니다.

*주2)
Zend optimizer와 같이 사용할 수 없습니다.
만약 Zend optimizer를 설정해 놓았다면 반드시 off해 놓아야 합니다.

*주3)
이 문서에 대한 최신 내용은 아래 URL에서 확인할 수 있습니다.

  http://www.linuxchannel.net/docs/php_accelerator.txt

*주4)
문맥상 간혹 경어를 생략했습니다. 양해해주시길 바랍니다.

[COLOR="Navy"]=============================================================

목차
0. 개요(빠른 설치)
1. PHP Accelerator?
2. PHP Accelerator 설치와 설정
  2.1 PHP Accelerator 다운로드
  2.2 PHP Accelerator 설치
  2.3 PHP Accelerator 설정
3. 작동확인
4. 간단한 속도 테스트
5. 관리자용 유틸리티 PHPACA
6. 기타 정보
7. 후기

=============================================================[/COLOR]

0. 개요(빠른 설치)

  1) 다운로드
    http://www.php-accelerator.co.uk/download.php
    파일이름 형식:
    php_accelerator-<버전>_<php버전>_<운영체제>.tgz
    php_accelerator-<버전>_<php버전>_<linux-glibc버전>.tgz(리눅스 경우)
  2) 압축해제 및 복사

  3) 설정(1.3.2부터 key 등록필요 없음)

  4) 아파치 재시작

  5) 확인
     phpinfo();




1. PHP Accelerator?

ionCube PHP Accelerator(이하 'PHPA')는 Zend Accelerator(Zend cache)와 같이
PHP 캐시 역할을 제공하는 'Zend engine extension' 중의 하나로써
Nick Lindridge(영국 분인듯) 씨가 개발했습니다.

PHPA는 PHP 스크립트를 클라이언트 요청에 의해서 서버에서 한번
읽혀지면, 일정 시간동안 캐시 메모리에 저장되고, 그 이후 요청은
실제로 메모리에 있는 정보를 해석하므로 HDD에서 읽는 것보다 훨씬
빠르게 작동합니다.

필자는 예전에 PHPA를 붙여서 쇼핑몰을 프로그램한 적이 있었는데 상당히
만족할 만한 성능을 내더군요. 예를 들어, PHPA 없이 서버가 PHP
스크립트를 해석하는 시간이 0.5초 걸렸다면 PHPA를 사용할 경우는
0.08초 정도 걸리더군요. 물론 객관적인 속도 측정(기준)은 아니지만,
PHPA를 사용할 경우 그 전보다 상당히 낫은 성능을 낸다는 것을 지레
짐작할 수 있습니다.

Zend Accelerator를 사용해 보신 분이 있다면 어느 정도 성능을 내는지
짐작할 수 있을 것입니다.

  - http://www.php-accelerator.co.uk/performance.php

앞의 URL에서 그 성능을 비교해 보면 Zend Accelerator(Zend cache)에
거의 근접한 수치를 내고 있음을 알 수 있습니다.

설치는 그리 어렵지 않은 편입니다. 즉 PHP나 아파치를 컴파일하는 과정
중에서 설치하는 것이 아니라, 아파치-PHP가 설치된 상태에서
'zend extension'을 지정해 주면 그만입니다.

즉 PHPA 홈페이지에서 제공하는 파일은 바이너리 파일로써 아직 소스는
공개되지 않았기 때문에 컴파일할 필요는 없습니다.

'PHPA is free'

좀더 자세한 내용을 알고 있다면 다음의 PHPA 홈페이지를 방문 하세요.

  - http://www.php-accelerator.co.uk/


PHPA와 같이 PHP cache 기능이 있는 다른 프로그램은 다음과 같습니다.

  - PHP Accelerator (Nick Lindridge) (freeware)
  - Alternative PHP Cache (Community Connect) (freeware)
  - AfterBurner (Bware Technologies) (freeware)
  - Zend Accelerator (Zend) (commercial)
  - 기타(...)

참고로 이 문서는 다음의 문서를 기준으로 작성되었습니다.

  - http://www.php-accelerator.co.uk/releases/x.x.x/INSTALL
  - http://www.php-accelerator.co.uk/releases/x.x.x/CONFIGURATION
  - http://www.php-accelerator.co.uk/faq.php



2. PHP Accelerator 설치와 설정

2.1 PHP Accelerator 다운로드

다음의 싸이트에서 PHPA를 다운로드 합니다. 참고로 2002.08.03(GMT+9) 현재,
리눅스 버전은 1.3.2 버전까지 나왔으며, 리눅스 이 외에 BSDi, FreeBSD,
OpenBSD(Intel), Solaris(Intel), Solaris(Sparc), Tru64 Unix(4.0G, 5.0, 5.1)
등의 운영체제에서 사용할 수 있습니다.

  - http://www.php-accelerator.co.uk/download.php

파일이름 형식:

  - php_accelerator-<버전>_<php버전>_<운영체제>.tgz
  - php_accelerator-<버전>_<php버전>_<linux-glibc버전>.tgz(리눅스 경우)

리눅스의 경우, glibc(GNU libc) 버전 별로 파일이 다르므로 반드시
설치하려는 서버의 glibc 버전을 확인해야 합니다.
레드햇 6.x(glibc-2.3.1), 레드햇 7.0(glibc-2.2), 레드햇 7.2(glibc-2.2.4)
이며, 확실하게 확인하려면 다음과 같이 명령을 내려서 확인하도록 합니다.



만약 가장 최근의 PHPA 버전이 1.3.2이고, linux glibc 버전이 2.2.4이고,
현재 서버에서 사용하는 PHP 버전이 4.2.2이면,

  'php_accelerator-1.3.2_php-4.2.2_linux-glibc2.2.4.tgz'

파일을 다운로드하면 됩니다.

<업데이트 : 2002.10.16>
1.3.3으로 버전으로 올라가면서 리눅스의 경우는 기존의 glibc-2.2, glibc-2.2.4
으로 분류되었던 PHPA 버전이 없어졌습니다. 모두 'glibc2'라는 이름으로 통합되어
있으며 실제로는 glibc-2.1.3 버전이지만, glic-2.2.x 버전에서도 잘 작동합니다.
</업데이트>


2.2 PHP Accelerator 설치

다운로드한 파일을 압축 해제하면 다음과 같은 파일을 볼 수 있습니다.



제일 중요한 파일은 'php_accelerator_1.3.2.so'이며,
CONFIGURATION 파일은 설정할 내용에 관한 내용을 담고 있으므로 반드시
읽어보아야 합니다. 그 외 INSTALL 파일은 설치에 관한 내용을 담고 있으며,
phpa_cache_admin 파일은 관리자용 유틸리티입니다.

설치 순서 :

  1. php_accelerator_1.3.2.so 파일을 적당한 위치에 복사 또는 옮겨놓는다.
  2. phpa_cache_admin 파일을 /usr/local/bin 디렉토리 정도에 복사한다.
  3. php.ini 파일을 열어서 설정한다.

설치 예(아주 간단함) :




2.3 PHP Accelerator 설정

'php_accelerator_<PHPA버전>.so' 파일을 적당한 위치에 복사했으면
php.ini 파일을 열어서 편집해야 합니다.

php.ini 파일이 '/usr/local/lib/php.ini'에 있다는 가정입니다.

일단 php.ini 파일에 zend_extension 항목을 추가해야 하는데 간단하게
다음과 같이 cat 명령을 사용해서 추가해도 상관없습니다

처음 설치할 경우 :




처음 설치할 경우에는 php.ini 파일에 추가할 사항이 많기 때문에 다음과 같이
CONFIGURATION 파일을 이용해서 필요한 설정 내용을 일단 추가해 놓고
편집하는 것이 좋습니다.

처음 설치할 경우 :

  [방법1] 설명 주석 없이 단순하게 설정 내용만 추가할 경우


  [방법2] 설명 주석을 포함할 경우


  [방법3] 좀더 세련되게(?) - (쉘로 작성)

----------------- cut ------------------------

그 외, 그냥 php.ini 파일에서 CONFIGURATION 파일을 불러와서 편집하면
그만입니다.

업그레이드하는 경우는 release_notes 파일을 읽어보고 추가된 설정 내용이나
변경된 점을 php.ini 파일에 적용해야 합니다.

참고로 1.3.2로 업그레이드 되면서,

  phpa.shm_lock_threshold0 = 10
  phpa.shm_lock_threshold1 = 10

<업데이트 : 2002.10.16>
PHPA 1.3.3에서는
phpa.enable_php_memory_bug_workaround = 0
지시자가 추가되었습니다. 이 지시자는 PHP를 컴파일할 때 --enable-memory-limit
옵션을 주어 컴파일했다면 위의 지시자에 '1'로 설정하도록 하세요.
</업데이트>

두 개의 설정 내용이 추가되었으며, 또한 'ionCube PHP Encoder'로 인코딩된
PHP 파일을 'ionCube decoder'를 이용하여 디코딩한 다음 PHPA를 사용할 수 있습니다.

  zend_extension = /usr/local/lib/php_decoder_1.0.2.so
  zend_extension = /usr/local/lib/php_accelerator_1.3.2.so

'ionCube decoder'에 관한 내용은 http://www.ioncube.com/를 방문해 보세요.
참고로 PHP Encoder는 1.4 버전부터 지원한다고 하네요..

무엇보다 1.3.2로 업그레이드 되면서 'activation keys' 설정이 없어졌습니다.
PHPA 1.2.0 이상 버전부터 1.3.1까지는 PHPA key를 설정해줘야 합니다. 이 키는
특별하게 어떤 '통제'의 의미를 갖는 것은 아니고, 개발자 Nick Lindridge 씨에
의하면 어느 어느 싸이트에서 PHPA를 사용하는지 알아보기 위해서 고안한 방법
이라고 하네요.

PHPA 1.1p1에서 1.2로 넘어오면서 key 설정 부분이 추가되어서 상당히 황당했는데,
저 외에 여러 사람들도 다 같은 생각인것 같더군요. 다행이 1.3.2부터는
사라졌지만..... 다음의 싸이트를 방문하면 1.2로 넘어오면서 이 키 때문에
개발자가 곤욕을 당하는(?) 내용을 볼 수 있습니다.

  - http://www.freelists.org/archives/phpa/01-2002/threads.html

그리고 마침내 1.3.2를 릴리즈되기전, 2002년 6월에 결정을 했군요(^.^)

  - http://www.freelists.org/archives/phpa/06-2002/msg00060.html


다음의 PHPA 설정 항목(지시자)은 다른 PHP 설정 지시자과 똑같은
형식으로 httpd.conf, .htaccess(예) 등의 설정 파일에 각각 설정할 수 있습니다.
즉 <Directory>나 <Location> 콘테이너 안에 설정할 수 있다는 의미입니다.




예를 들어,

  ------ httpd.conf(예) --------------------------------------

  ------------------------------------------------------------

  ------- DocumentRoot/nocache/.htaccess(예) -------------------------

  ------------------------------------------------------------

  ------- DocumentRoot/any/path/to/.htaccess(예) -------------

  ------------------------------------------------------------

PHPA 외에 다른 PHP 지시자 설정은 다음 URL을 참고하시길 바랍니다.

  - http://www.php.net/manual/en/function.ini-set.php

  <주의>
  httpd.conf 또는 .htaccess 파일에 적용할 경우,
  On  --> 1
  Off --> 0
  on/off로 직접 설정할 경우 잘 작동하지 않은 경우가 있으므로
  이와 같이 on/off에 관한 설정은 가능한 0(off) 또는 1(on)로 설정하도록
  하세요
  </주의>

앞에서 소개하지 않은 기타 PHPA 설정 지시자는 다름과 같이 PHP 스크립트로
프로그램하여 확인할 수 있습니다.

-- phpa-config-debug.php ------------------------------------
<?
function _var_dump($array, $name='', $constants=0)
{ 
  foreach($array AS $k=>$v) {
        if($name) $var = "${name}[\"$k\"]"; else $var = $k;
        if(!$constants) $var = '$'.$var;
        echo "$var = $v<BR>\n";
        if(is_array($v) && sizeof($v)>0) {
                echo "<UL>\n";
                _var_dump($v,$var,1);
                echo "</UL>\n";
        }
  }
}
        
$ini = ini_get_all();
_var_dump($ini,0,1);
?>
--------------------------------------------------------------

-- 출력 결과(예) ---------------------------------------------

--------------------------------------------------------------

눈여겨 볼 항목은 각 설정 지시자의 설정권한인 ["access"] 값입니다.
예를 들어 phpa는 7, phpa.cache_dir는 7 phpa.cache_file_prune_period는 1
입니다.

  - http://www.php.net/manual/en/function.ini-set.php

위의 싸이트를 방문하면 이 상수 값(비트)에 대한 설명이 있습니다. 즉,

  - 상수값 1 : user script 파일(xxx.php)에 ini_set()함수로 설정가능
  - 상수값 2 : .htaccess, httpd.conf(vhost)
  - 상수값 4 : php.ini, httpd.conf(not include vhost)
  - 상수값 7 : anywhere

입니다. 각 상수값은 이들의 조합니다.
예를들어, phpa.cache_dir 지시자는 접근권한이 7이므로 php.ini, httpd.conf,
.htaccess, xxx.php 파일 모두에 설정 가능하다는 의미입니다.


그럼 php.ini 파일을 열어서 설정 내용을 추가하거나 편집해 봅시다.
버전마다 설정 내용이 다를 수 있으므로, 반드시 다운로드한 파일에 함께
첨부된 CONFIGURATION 파일의 내용을 적용해야 합니다.

다음의 내용은 PHPA 1.3.2(1.3.3포함)버전입니다. 참고로 php.ini 파일에서 주석은
';'입니다.

------------------------------------------------------------

------------------------------------------------------------

만약 1.3.2 이하의 버전을 사용할 계획이라면(?) 앞서 얘기했듯이
'activation keys'를 설정해줘야 합니다. 이 키의 대상은 httpd.conf
파일에서 ServerName 지시자로 설정한 모든 호스트가 그 대상입니다.
ServerAlias 지시자로 설정한 호스트는 그 대상이 아닙니다.

'activation keys'를 설정하는 방법은 하나 하나의 ServerName에 대해서
아파치 가상 호스트의 각 섹션에,

  php_value phpa.registration_key xxxxxxxxxxxxxx

으로 설정하는 방법과 'phpa.keys' 파일을 생성하여 설정한 방법이 있습니다.
후자의 방법이 더 효율적이므로 이 방법을 권장합니다.



ServerAlias가 아닌 ServerName 지시자로 설정한 모든 호스트에 대해서
다음의 싸이트를 방문하여 key 파일을 생성하여 다운로드합니다.

  [Download Activation Keys] 항목
  - http://www.php-accelerator.co.uk/activate.php

앞의 호스트를 예를 들자면,

  --------- phpa.keys ------------------------------

  ---------------------------------------------------

이와 같습니다. 이 파일에서 '#'은 주석이므로 필요없는 호스트에 대해서
삭제하거나 주석(#)을 추가하면 됩니다.

생성된 phpa.keys 파일을 /usr/local/apache/conf/phpa.keys 또는
/usr/local/lib/php.keys 위치로 옮겨놓고 php.ini 파일을 다음과 같이
수정합니다.

  [수정 전]
  phpa.registration_keys_file = <file> 

  [수정 후]
  phpa.registration_keys_file = /usr/local/apache/conf/phpa.keys

이상으로 php.ini 설정은 모두 끝났습니다.
설명이 좀 길었지만 비교적 어려운 편은 절대 아닙니다.


3. 작동확인

php.ini 설정이 모두 끝났으면 아파치를 재시작합니다.



작동을 확인하는 방법은 우선 phpinfo.php 파일을 적당한 DocumentRoot에
생성하고 다음의 내용을 추가합니다.

  ------ phpinfo.php --------------------------------
  <?
  var_dump($GLOBALS['_PHPA']);
  echo "<HR>\n";
  phpinfo();
  ?>

  ---------------------------------------------------


  [웹브라우저로 확인할 경우]



  [telnet으로 확인할 경우]

 

  [lynx로 확인할 경우]


  [wget으로 확인할 경우]



이와 같이 'X-Accelerated-By: PHPA/1.3.2' 항목이 나오면 정상적으로 작동한다는
의미입니다.


4. 간단한 속도 테스트

PHPA 벤치마크에 관한 내용은 다음의 싸이트에서 볼 수 있습니다.

  - http://www.phpinsider.com/benchmarks/
  - http://www.php-accelerator.co.uk/testimonials.php

그럼 실제로 한번 간단하게 속도 테스트를 해봅시다.
주의할 점은 객관적인 절대적인 수치가 아니므로 대충 어느 정도로만 판단하시길
바랍니다.

우선 php.ini 파일을 다음과 같이 수정하고 아파치를 재시작합니다.

  ------------ php.ini -----------------------------------

  ---------------------------------------------------------

  ------------ 또는 DocumentRoot/nocache/.htaccess---------

  --------------------------------------------------------- 

  ------------ header.php ---------------------------------
  <? $_start = microtime(); ?>

  ---------------------------------------------------------

  ------------ footer.php ---------------------------------
  <?
  if(!function_exists(get_microtime)) {
    function get_microtime($_start, $_end)
    {
      $end = explode(" ", $_end);
      $start = explode(" ", $_start);

      ## (A+A')-(B+B') better than (A-B)+(A'-B')
      return sprintf("%.4f", ($end[1] + $end[0]) - ($start[1] + $start[0]));
    }
  }

  if(!$not) {
    echo "<BR>\n";
    echo get_microtime($_start,microtime());
  }
  ?>

  ---------------------------------------------------------

그리고 적당한(비교적 긴 시간이 요구되는) PHP 코드를 작성하여(예: test.php)
DocumentRoot/cache.php와 DocumentRoot/nocahe/test.php 파일로 각각 복사합니다.

웹브라우저로 요청하면 제일 하단에 실행속도가 표시되므로 서로 비교하시면 됩니다.

아래는 필자가 테스트한 수치(절대적인 수치가 아님)입니다.

  - glibc/2.2(레드햇 7.0기반)
  - Apache/1.3.24
  - PHP/4.2.1
  - PHPA/1.3.2
  - Zend optimizer/1.3.1
  - (Zend Accelerator 는 제외함)

  - 테스트 1 : for($i=0; $i<1000000; $i++) ;
  - 테스트 2 : JSBoard 1.3.7/MySQL 3.23.51(localhost)

  - 결과


테스트 1은 오히려 PHPA보다 Zend optimizer가 더 빠른 결과를 냅니다.
즉 단순한 수학적인(?)인 계산에서는 Zend optimizer가 더 빠르지만
대부분의 홈페이지가 이와 같이 단순하게 구성되어 있지 않다는 점을 간과해서는 안됩니다.
테스트 2의 결과를 보면 확실하게 알 수 있습니다.

결론적으로
아주 단순한 수학적인 계산이 많이 들어가 있고 비교적 PHP 코드가 적은 홈페이지인
경우에는 Zend optimizer가 더 유리하지만 그렇지 않은 일반적인 홈페이지나 쇼핑몰 정도의
수준에서는 역시 PHPA가 더 유리합니다.

PHPA가 Zend Accelerator에 근접한 수치를 낸다는 점을 감안했을 때 왜 Zend Accelerator가
상용으로 서비스되고 있는지 생각해 보면 쉽게 그 해답을 찾을 수 있습니다.


5. 관리자용 유틸리티 PHPACA

/usr/local/bin/phpa_cache_admin 유틸리티를 이용해서 메모리 사용을 볼 수 있습니다.

  <주의>
  phpa.shm_user = nobody
  phpa.shm_group = nobody
  이 설정을 하지 않으면, 'phpa_cache_admin -m' 실행시,
  'No shm cache available with key 0x0c0deb00. Check'
  와 같은 메시지를 내므로 가능한 이와 같이 설정하세요.
  </주의>

----------------------------------------------------

----------------------------------------------------

또한 다음의 싸이트를 방문하여 phpaca.tgz 파일을 다운로드하여 직접 웹에서
확인할 수 있습니다. Zend Accelerator에서 사용한 툴과 비슷하네요.
(기능은 많이 떨어지기는 하지만...)

  - http://www.edinger.info/phpaca.php

참고로 1.3.2 버전에는 flush-phpa-cache 유틸리티를 제공하지 않기 때문에
다운로드한 phpaca.tgz 파일을 압축 풀고, config.inc.php 파일에서

  DEFINE(CACHE_FLUSH,'');
  또는
  DEFINE(CACHE_FLUSH,'/usr/local/bin/phpa_cache_admin');

으로 설정하도록 하세요.

참고로 MSIE에서는 보이지 않은 버그가 있군요.


6. 기타 정보

나중을 위해서.......


7. 후기

이 문서 작성하겠다고 마음먹은지 벌써 반년이 지났군요.....T.T

잘못된 점이나 보강할 내용이 있으면,

  http://www.linuxchannel.net/board/?table=qna

에 올려주시면 감사하겠습니다.


EOF

댓글목록

등록된 댓글이 없습니다.

Total 165건 1 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
165 MintState 30363 11-10
164 MintState 28704 01-13
163 MintState 26090 11-03
162 MintState 24489 11-03
161 MintState 24023 10-28
160 MintState 23542 04-09
159 MintState 23333 11-03
158 MintState 22932 10-28
157 MintState 22458 04-28
156 MintState 22247 11-17
155 MintState 21900 04-18
154 MintState 21157 11-10
153 MintState 21001 10-28
152 MintState 20705 11-10
151 MintState 20551 11-03
150 MintState 20197 11-10
149 MintState 20050 07-02
148 MintState 19887 11-10
147 MintState 19854 11-03
146 MintState 19539 11-03
열람중 MintState 19199 11-03
144 MintState 18589 11-03
143 MintState 18586 04-28
142 MintState 18346 07-02
141 MintState 18199 08-25
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™