목차
OPcache 개념
PHP는 5.5 버전 이후 OPcache를 기본적으로 탑재하고 있습니다. PHP는 코드 컴파일 → 실행 → 결과값 출력의 프로세스를 거치게 되는데 opcache는 실행한 PHP의 컴파일된 코드를 바이너리로 메모리에 캐싱해 결과값을 좀더 빠르게 얻을 수 있게 하는 역할을 하고 있습니다.
워드프레스 같은 경우 OPcache 적용시 약 39%의 성능 향상이 있어 TTFB가 단축되는 것을 확인할 수 있습니다.
OPcache 설치
앞서 얘기했던 것처럼 PHP 5.5 버전 이상 설치시 기본적으로 포함되어 있으며 php.ini 파일에 직접 opcache 모듈을 불러오고 설정을 할수도 있지만 리눅스의 PHP 패키지 구성 대부분이 설정 파일인 opcache.ini
를 따로 두고 include 하는 형식입니다.
우분투
/etc/php/버전/mods-available/opcache.ini /etc/php/버전/fpm/conf.d/opcache.ini
opcache.ini
파일은 mods-available
디렉토리에 위치하며 conf.d
디렉토리에 심링크로 연결되어 있어야 모듈이 실행됩니다.
cd /etc/php/버전/fpm/conf.d ln -s /etc/php/버전/mods-available/opcache.ini /etc/php/버전/fpm/conf.d/10-opcache.ini
만일 심링크 설정이 되어 있지 않다면 위 명령어로 연결해 OPcache 모듈을 실행할 수 있습니다. 참고로 심링크로 연결한 파일명 앞의 ’10’ 은 우선순위(Priority)를 시각적으로 확인할 수 있게 하기 위함입니다.
기타 리눅스
find / -name 'opcache.ini'
위에서 설명한 경로에 파일이 없는 경우 위 명령어로 설정 파일 경로를 찾아 같은 요령으로 심링크를 연결합니다.
OPcache 적용 확인
<?php phpinfo(); ?>
웹서버 루트 디렉토리에서 vi 에디터로 위 내용을 phpinfo.php 파일로 저장합니다.
http://도메인/phpinfo.php 페이지에 접속해 보이는 PHP 정보중 Zend OPcache 항목을 찾아 적용된 것을 확인합니다.
OPcache 최적화 설정
; configuration for php opcache module ; priority=10 zend_extension=opcache.so
opcache.ini 파일을 vi 에디터로 열면 위와 같이 opcache.so 모듈을 불러오는 기본 설정이 되어 있습니다.
별다른 옵션을 지정하지 않아도 디폴트 값으로 동작하기 때문에 문제는 없지만 디폴트로 지정된 메모리 할당이나 파일 갯수등이 적기 때문에 사용자가 직접 지정해 주는 것이 좋습니다.
opcache.enable = 1 opcache.enable_cli = 1 opcache.memory_consumption = 256 // 캐시 메모리 크기 opcache.max_accelerated_files = 12000 // 파일 키 갯수 opcache.max_wasted_percentage = 10 // 만료된 캐시 저장 공간 비율 opcache.interned_strings_buffer = 16 // 문자열 버퍼 크기 (MB) opcache.validate_timestamps = 1 // 파일과 캐시 변경점 체크 여부 (0=off, 1=on) opcache.revalidate_freq = 60 // 변경점 체크 시간 (초)
주요 설정은 위와 같으며 위 값은 필자가 관리하는 서버를 토대로 사이트 4개 정도를 커버할 수 있는 설정입니다.
opcache.revalidate_freq
옵션 같은 경우 위와 같이 60초로 설정되어 있을 경우 개발 서버에서 PHP 소스를 수정했을때 60초 이후에 반영이 되므로 개발 서버 같은 경우에는 0으로 설정해 수정된 코드가 바로 적용되게 설정해야 합니다.
코드 수정이 없는 라이브 서버 같은 경우에는 60초를 설정합니다.
위 옵션을 제외한 나머지는 캐시에 대한 효율과 연관이 깊기 때문에 서버 리소스가 넘쳐나는 경우에는 값을 크게 잡아도 별 문제는 없지만 저렴한 VPS나 서버 호스팅등을 사용하는 경우 상대적으로 사양이 좋지 않기 때문에 최적화된 값을 찾는게 중요한데 각 옵션에 대한 최적화 요령은 모니터링 프로그램을 활용하는 것입니다.
wget https://gist.githubusercontent.com/ck-on/4959032/raw/ad6362bff017f3c59c96ab395e3308ed52650cab/ocp.php
간단하게 OPcache 리소스를 모니터링 할수 있는 Opcache Control Panel(이하 OCP)는 위 명령어로 적당한 위치에 ocp.php 파일을 다운로드 받아 접속해 활용할 수 있습니다.
OCP로 모니터링 하기 이전에 적당한 값으로 OPcache를 설정한 다음 하루 정도 서비스를 한 다음 캐시 히트율과 사용 메모리등을 참고해 옵션값을 바꾸면 되겠습니다.