모든 컴퓨터의 병목현상은 IO가 주원인이다.
발전속도가 가장 더디고. cpu / gpu / ram 의 속도는 나날이 높아져 가지만 IO의 성능은 거의
제자리 이다.(용량만 늘고 있다. hdd -> ssd 의 진화는 혁명적이긴 했다.)
또한 쉽게 dirty 상태에 빠지는게 IO 이기 때문에 IO 튜닝은 서버의 전반적인 속도향상에 크게 기여한다.
APM 서버에서 IO사용을 비약적으로 줄이기 위해서는 캐슁을 하면 되겠다.
xcache , APC 혹은 php 5.5 이상 포함된 opcache 가 대안이라고 볼수 있는데 일반적으로 zend 와의 충돌 때문에
xcache 를 사용하는편이 좋다. APC 역시 충분히 좋았지만.
APC의 경우 메모리 사용량이 xcache 보다 높았다.
그리고 APC 의 경우 문제시 되는 웹프로그램 좀더 많았다.(cake, moodle, kims-board 등)
공식 홈페이지 http://xcache.lighttpd.net
1. 설치방법.
1 2 3 4 5 6 7 8 |
~]# cd /usr/local ~]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz ~]# tar xfzp xcache-3.2.0.tar.gz ~]# cd /usr/local/xcache-3.2.0 ~]# phpize ~]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config ~]# make ~]# make install |
–with-php-config 는 php-config 파일의 위치를 지정한다 일반적어도 안넣어도 되는 옵션 ‘ㅅ’a 혹은 버전에 따라 위치 변경이 되어야 하겠다.
여기서 /usr/local 에 직접 설치를 한이유는 xcache 의 관리자 페이지인 Cacher 를 사용하시 위해서이다.
2. php.ini 설정추가.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[xcache] extension=xcache.so xcache.admin.auth=On xcache.admin.user="관리자아이디" xcache.admin.pass="관리자패스워드(MD5 코드를 넣는다.)" xcache.shm_scheme="mmap" xcache.size=128M xcache.count=4 xcache.slots=16K xcache.ttl=7200 xcache.gc_interval=7200 xcache.test=Off xcache.readonly_protection=On xcache.mmap_path="/dev/zero" xcache.coredump_directory="" xcache.cacher=On xcache.stat=On xcache.optimizer=Off |
추가 항목중 xcache.size, xcache.count 은 적절히 수정해 주어야 한다.
일반적으로 xcache.count 는 cpu 코어 갯수로 지정한다. xcache.size 는 캐셔 관리자에서 사용량을 체크하여 변경한다.
메모리는 일반적이면 32~64MB 정도면 충분하나 한개의 사이트를 위한 설정이 아니기 때문에 넉넉히 잡았다.
단하나의 사이트를 위해서라면 64M ~ 128M 으로 xcache.gc_interval, xcache.ttl 을 0으로 해서 쓰면 성능이 가장 좋겠다.
관리자 설정을 할때(xcache.admin.user, xcache.admin.pass) 패스워드 생성은 간단한 php 코드로 생성할 수 있다.
1 2 3 |
<?php echo md5("password"); ?> |
3. 그리고 마지막으로 웹에서 관리자 페이지 접속을 위해 httpd.conf 파일에 아래 코드를 추가 했다.
1 |
Alias /xcache-cacher "/usr/local/xcache-3.2.0/htdocs" |
4. 트러블슈팅
1) xcache 는 apache prefork 에서만 동작한다.
2) xcache 모듈 로드후 정상적으로 로드가 되지 않는다면 ( 메세지 // xcache.so: cannot open shared object file: No such file or directory )
php.ini 에서 extension_dir=”./” 부분을 주석 처리하거나 php API 에 따른 디렉토리 를 지정해주면 된다.
php API 에 따른 익스텐션 디렉토리는 make install 를 하면 어디에 복사했는지 보여준다 ‘ㅅ’a
3) php 5.2 대버전은 php 컴파일시 버그로 NTS 모드로 설치가 되지 않으며 TS 모드로만 설치가 된다.
NTS모드가 아닐경우 php 5.2 에서 에러메세지 표현이 되지 않으나 설치 후 모듈로드를 했을때 아파치가
프로세스는 떠있어 도 웹서버 기능을 제대로 수행하지 못했다.
아래 링크 글로 php 5.2 의 NTS 모드 설치를 진행후 해야 한다.
http://www.enteroa.com/2014/09/24/php-5-2-17-nts모드로-설치
4) xcache 는 기본적으로 최신버전이 하위버전의 모든 것을 대응하도록 포함 되므로 최신버전을 쓰는게 좋겠다.
다만 예외사항으로 php 4 는 1.2.2 대의 버전을 써야 하며 extension=xcache.so 가 아닌 zend_extension=xcache.so 으로 불러와야 한다.
아울러서 zend optimizer 보다 먼저 모듈로드가 되어야 하니 주의 하자.
또한 구버전의 관리자 디렉토리는 htdocs 안에 캐셔가 아닌 admin 폴더로 제공된다. httpd.conf 를 아래와 같이 수정하자.
1 |
Alias /xcache-cacher "/usr/local/xcache/admin" |
php4 용 xcache 는 파일변경 여부 체크가 존재 하지 않기 때문에 캐쉬된 데이터가 지워지는 시간 동안
웹에서 호출시 신규로 올린 부분의 갱신이 늦어질수도 있다.
(이말은 완성된 홈페이지 가속 용도로만 쓰라는 소리이다 =ㅅ=a 수정된 파일의 즉시반영이 안됨)