어떤 PHP (opcode) 캐시를 사용해야합니까? 그 이유는 무엇입니까?


44

APC, XCache, Memcache, eAccelerator 등과 같은 일부 PHP (opcode) 캐시에 대해 계속 듣습니다.

그러나 나는 하나를 선택하는 방법을 알 수 없었습니다. 캐싱 시스템이 제공해야하는 성능상의 이점 외에도 고려해야 할 다른 요소가 있습니다.

왜 X 캐시 시스템이 Y보다 낫다고 말할까요? 상대적 성능 향상에 대해 덜 걱정합니다. 두 시스템 간의 작은 차이는 덜 중요합니다.

내 질문에 대한 일반적인 대답이 불가능한 경우 몇 가지 지침이 있습니다. Mediatemple (루트 액세스 사용)과 함께 전용 VPS를 사용합니다. RAM은 512MB (물리적) + 400MB (스왑)입니다. WordPress와 그 사촌 WordPress-MU 및 BuddyPress에 대해 걱정하고 있습니다. 코드 / 사이트의 90 %가 WordPress 제품군에 속합니다.

도움을 주셔서 감사합니다.

답변:


33

나열한 제품은 다른 목적으로 사용됩니다.

OPCode 캐시

Wikipedia 목록 에는 많은 PHP Accelerator (OPCache)가 있습니다 . 오픈 소스 제품과 마찬가지로 공통적으로 비슷합니다. XCache는 lighttp PHP 가속기이며 해당 HTTPd를 실행할 때 기본 선택입니다. 아파치와도 잘 작동하지만 APC는 사회적으로 말하면 약간 더 "다른 사람들과 잘 어울립니다".

개발 속도가 느리고 PHP 릴리스가 지연되어 APC가 비슷한 성능으로 제공하는 공식 축복 상태로 인해 eAccelerator 사용을 중단했습니다.

이러한 제품은 일반적으로 사용됩니다. 코드 변경 즉시 성능 향상이 없습니다. 큰 코드베이스 (Drupal, Wordpress)를 사용하면 응답 시간과 메모리 사용량을 줄이면서 성능을 최대 3 배 향상시킬 수 있습니다 .

데이터 캐싱

Memcache 는 약간 다른 제품이므로 여러 서버확장 할 수 있는 경량 키 시스템 으로 생각할 수 있습니다 . Memcache를 지원하도록 소프트웨어를 향상시켜야하며 특정 문제를 다른 문제보다 더 잘 해결합니다. 웹 사이트에 실시간 재고 값 목록이있는 경우 Memcache를 사용하여 웹 사이트 전체에 표시되는 현재 값의 상주 목록을 유지할 수 있습니다. 단기 재사용을 위해 세션 데이터를 저장하는 데 사용할 수 있습니다. 전체 페이지 캐시와 같은 다른 용도로 사용하거나 MySQL 대신 사용할 수 없습니다.

WP-Super-Cache 와 같이 Wordpress의 성능을 대폭 향상시킬 수있는 Wordpress 애드온도 있습니다 (사실, WP-Super-Cache는 정적 HTML 기반 사이트와 경쟁 할 수있는 경우가 많습니다)

요약하자면, "설정하고 잊어 버리고 잘 지원되는 제품"을 원한다면 APC를 적극 권장합니다.


이 답변은 메타에 논의되고 : meta.stackexchange.com/questions/15474/...
브래드 길버트

[4]: http://수정하려면 " "를 입력하십시오.
브래드 길버트

톤 선생님에게 감사합니다! 귀하의 답변은 내 문제를 해결했을뿐만 아니라 캐싱 세계에 대한 통찰력을 얻는 데 도움이되었습니다. 한 가지만 더 묻고 싶습니다. 이미 wp-supercache를 사용하고 있습니다. APC와 결합하는 것이 좋습니다? APC는 성능을 더욱 향상시킬 것입니까? APC와 Wp-SuperCache가 함께 작동합니까? 둘 다 필요합니까? 아니면 APC가 Wp-SuperCache를 여분으로 만들 것입니까?
rahul286

참고 : APC는 데이터 캐싱 및 op 코드 캐싱을 모두 수행합니다.
lo_fye

2
이 답변은 현재 날짜가 매우 많습니다. APC는 v. 5.5 이후 Zend의 옵티 마이저 및 opcode 캐시 (현재 opcache)로 대체 된 이후 버전의 PHP에 대해서는 업데이트되지 않을 것입니다. 그러나 성능의 상당한 차이 ( symcbean.blogspot.co.uk/2013/09/… )를 보지 못했지만 opcache에서 데이터 지원이 부족하고 메모리 회수가 부족하면 업그레이드에 대한 생산성이 향상 될 수 있습니다.
symcbean


6

APC 는 PHP6에 내장되어 있으므로 논리적으로 선택해야합니다. 나는 그것을 사용하고 성능 향상은 놀랍습니다. opcode 이외의 것 (예 : db 쿼리 결과)을 캐시해야하는 경우 APC를 사용할 수도 있지만 여러 서버간에 APC 캐시를 공유 할 수는 없습니다. 단일 서버에서만 캐시해야하는 경우 APC가 좋습니다. 여러 서버로 확장해야하고 서버간에 캐시를 공유하려는 경우 memcached 가 사용자입니다.

그러나 내가 할 한 가지 일은 (비 코드가 아닌) 캐싱을위한 래퍼 클래스를 만드는 것입니다. 이렇게하면 코드를 변경하지 않고도 캐싱 엔진을 교체 할 수 있습니다.


와. APC의 공식 상태를 알고 있다면 장기적으로 전환했을 것입니다 ... :-) 또한 opcode / non-opcode 캐시 차이에 대해 많이 알지 못했습니다. 개인적인 선택으로 래퍼 클래스를 만들거나 캐싱 환경에 적응하도록 앱 소스를 수정하는 오버 헤드를 거치고 싶지 않습니다.
rahul286

6
PHP 5.5가 Zend Opcache를 "공식"opcode 캐시로 통합 한 이후로 PHP 6 용 APC로 전환 할 가능성은 낮습니다.
Matteo Tassinari

1
이를 수정하려면 : PHP 5.5는 실제로 Zend Opcache와 함께 제공됩니다. PHP 6은 없을 것입니다. 대신 PHP 7이있을 것입니다. APC는 거의 (?) 쓸모없는 것으로 간주됩니다.
Jisse Reitsma

6

상황이 약간 바뀌었고 APC는 PHP 6 코어에 포함되지 않는 것 같습니다.

APC는 개발 속도가 느리고 PHP 5.5와 호환되지 않는 것 같습니다. 이 때문에 PHP의 사람들이 Zend OPCache opcode 캐시 확장을 PHP CORE 확장으로 설정하는 것처럼 보입니다. http://wiki.php.net/rfc/optimizerplus에서 자세한 내용을 읽으십시오 .

중요 사항 : Zend OPCache에는 APC와 같은 사용자 데이터 캐시가 없으므로 사용자 데이터 캐시가 필요한 경우 Memcache와 함께 사용할 수 있습니다.


1
또한 메모리가 가득 차면 캐시 전체가 무효화됩니다 (유효하지 않은 항목은 제거되지 않음). 따라서 메모리보다 많은 코드가 있거나 자주 배포하는 경우 성능이 급상승 할 것으로 예상됩니다.
symcbean

3

PHP 버전이 5.50 이상인 경우 OpCache가 가장 좋은 방법입니다 (PHP / PECL 기본 라이브러리). 바이너리에서 설치하는 경우 미리 컴파일해야합니다.

http://php.net/manual/en/book.opcache.php

5.5 이전의 PHP 버전을 실행하는 경우 APC (PHP / PECL 기본 OpCode 캐시)가 유지 관리되지 않았고 죽은 것으로 간주되지만 가장 간단한 선택입니다.

http://php.net/manual/en/book.apc.php

PHP의 기본 OpCache 기능을 사용하면 타사 라이브러리를 유지 관리하는 데 따르는 어려움을 줄일 수 있습니다.


1
PHP <5.5를 실행하는 경우 가장 먼저해야 할 일은 업데이트하는 것입니다.
Michael Hampton

@ michael-hampton :: 참으로! 그러나 드문 경우이지만 OS를 업그레이드하지 않으면 PHP를 업데이트 할 수 없습니다. 이는 새로운 하드웨어 요구 사항을 의미 할 수도 있습니다. 예-IBM i 시리즈 서버 버전 6을 실행하는 회사에서 근무합니다. 우리의 PHP 버전은 5.4.3입니다. IBM은 PHP 버전 이상을 포팅하기 위해 Zend를 사용하므로, PHP 5.6에는 새로운 Power-8 서버 등이 필요한 최신 버전의 IBM-i OS-7.1 이상 (및 이후 버전의 Zend PHP 서버)이 필요합니다. meh.
재귀

0

Memcache는 opcode가 아닌 키 / 값 쌍을 캐시합니다. opcode 캐시 중 하나와 함께 사용할 수 있습니다.


SirStan의 답변 (아래)에서 memcache가 PHP 앱을 수정해야 할 수도 있습니다. 실제로 Wordpress를 사용하고 핵심 코드를 수정하는 것은 좋은 생각이 아닙니다.
rahul286 5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.