PHP OPCache를 사용하는 방법?


249

PHP 5.5가 출시되었으며 OPCache라는 새로운 코드 캐싱 모듈을 제공하지만 이에 대한 문서는 없습니다.

그렇다면 문서는 어디에 있으며 OPcache를 어떻게 사용합니까?




문서에서 opcache를 올바르게 컴파일 / 비활성화하거나 PHP 5.6.24 + 소스의 autoconf를 해결하는 방법을 알려주지 않아 PHP가 컴파일되지 않습니다! :-(
— Filip OvertoneSinger Rydlo

@ Fred-ii- "조정이 필요한 설정이 많이 있습니다. PHP 5.5 릴리스 프로세스의 안정화 단계에서 작동 방식을 이해하고 문제를 식별하면 큰 도움이됩니다." ... 그 블로그 게시물은별로 도움이되지 않습니다. 작동 방법 또는 설정을 가장 잘 조정하는 방법을 이해하는 방법은 설명하지 않습니다. (
— icc97

답변:


371

설치

OpCache는 기본적으로 PHP5.5 +에서 컴파일됩니다. 그러나 기본적으로 비활성화되어 있습니다. PHP5.5 +에서 OpCache를 사용하려면 먼저 활성화해야합니다. 이렇게하려면 다음을 수행해야합니다.

에 다음 줄을 추가하십시오 php.ini.

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

경로에 공백이 있으면 따옴표로 묶어야합니다.

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

또한 실제 Zend 엔진 (예 : PHP를 실행하는 엔진)에 영향을주기 때문에 zend_extension"normal"지시문 대신 지시문 을 사용해야합니다 extension.

용법

현재 사용할 수있는 네 가지 기능이 있습니다.

opcache_get_configuration():

OpCache가 현재 사용하는 구성을 포함하는 배열을 반환합니다. 여기에는 모든 ini 설정과 버전 정보 및 블랙리스트 파일이 포함됩니다.

var_dump(opcache_get_configuration());

opcache_get_status():

캐시의 현재 상태에 대한 정보가있는 배열을 반환합니다. 이 정보에는 캐시 상태 (활성화, 재시작, 전체 등), 메모리 사용량, 적중, 누락 및 기타 유용한 정보가 포함됩니다. 캐시 된 스크립트도 포함됩니다.

var_dump(opcache_get_status());

opcache_reset():

전체 캐시를 재설정합니다. 다음에 방문 할 때 가능한 모든 캐시 된 스크립트가 다시 구문 분석됩니다.

opcache_reset();

opcache_invalidate():

캐시 된 특정 스크립트를 무효화합니다. 다음에 방문 할 때 스크립트가 다시 파싱됨을 의미합니다.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

유지 보수 및 보고서

OpCache를 유지 관리하고 유용한 보고서를 생성하는 데 도움이되는 GUI가 있습니다. 이러한 도구는 위의 기능을 활용합니다.

OpCacheGUI

면책 조항 나는이 프로젝트의 저자입니다

풍모:

  • OpCache 상태
  • OpCache 구성
  • OpCache 통계
  • OpCache 재설정
  • 캐시 된 스크립트 개요
  • 캐시 된 스크립트 무효화
  • 다국어
  • 휴대 기기 지원
  • 반짝이는 그래프

스크린 샷 :

상태

캐시 된 스크립트

그래프

모빌 러

URL : https://github.com/PeeHaa/OpCacheGUI

opcache- 상태

풍모:

  • OpCache 상태
  • OpCache 구성
  • OpCache 통계
  • 캐시 된 스크립트 개요
  • 하나의 파일

스크린 샷 :

상태

URL : https://github.com/rlerdorf/opcache-status

opcache-gui

풍모:

  • OpCache 상태
  • OpCache 구성
  • OpCache 통계
  • OpCache 재설정
  • 캐시 된 스크립트 개요
  • 캐시 된 스크립트 무효화
  • 자동 새로 고침

스크린 샷 :

opcache-gui-overview

URL : https://github.com/amnuts/opcache-gui


6
PHP-CLI에 관한 것이 있습니까? CLI는 어떻게 그것을 사용합니까? FPM이 다시 시작되면 OPCache가 재설정됩니다. CLI의 OPCache에도 영향을 미칩니 까? CLI의 OPCache는 분리되어 있습니까? 아니면 FPM과 동일한 캐시 풀을 공유합니까? 감사!
— Shahriyar Imanov

3
OpCache는 ubuntu 14.04, apache 2.4.7, php 5.5.9의 최신 설치에서 기본적으로 활성화되어 있습니다.
— jstats

안녕하세요, 세 번째 스크린 샷에서 cache_full이 false입니다. 전체 페이지 캐싱과 관련된 것으로 가정하고 있습니다. 켜는 방법을 알려주십시오.
— brucekaushik

나는 전체 페이지를 캐싱하기위한 것이 아니라 캐시가 사용하는 메모리가 가득 찬 경우 true로 표시됩니다. 어쨌든 고마워!
— brucekaushik

zend_extension = C : \ path \ to \ php_opcache.dll (win)-php.ini에이 줄을 추가하면 정상적으로 작동합니다.
— kalidasan

152

OPcache가 APC를 대체합니다

OPcache는 APC 모듈을 대체하도록 설계되었으므로 PHP에서 병렬로 실행할 수 없습니다. 이것은 코드 작성 방법에 영향을 미치지 않기 때문에 PHP opcode 캐싱에 좋습니다.

그러나 현재 APC를 사용하여 apc_store()기능을 통해 다른 데이터를 저장 하는 경우 OPCache를 사용하기로 결정한 경우 에는 해당 기능을 수행 할 수 없습니다.

공유 PHP 메모리에 데이터를 저장하는 APCu 또는 Yac 와 같은 다른 라이브러리를 사용 하거나 메모리에 별도의 프로세스로 데이터를 PHP에 저장하는 memcached와 같은 것을 사용하도록 전환해야합니다.

또한 OPcache에는 APC에 존재하는 업로드 진행률 표시기가 없습니다. 대신 세션 업로드 진행을 사용해야합니다 .

OPcache 설정

OPcache에 대한 문서를 찾을 수 있습니다 여기에 나열된 모든 설정 옵션과 함께 여기 . 권장되는 설정은 다음과 같습니다.

; Sets how much memory to use
opcache.memory_consumption=128

;Sets how much memory should be used by OPcache for storing internal strings 
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8

; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000

;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60

;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1

;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1

코드 주석을 사용하는 라이브러리 또는 코드를 사용하는 경우 주석 저장을 활성화해야합니다.

opcache.save_comments=1

비활성화하면 모든 PHPDoc 주석이 코드에서 삭제되어 최적화 된 코드의 크기가 줄어 듭니다. "Doc Comments"를 비활성화하면 기존 응용 프로그램 및 프레임 워크 (예 : Doctrine, ZF2, PHPUnit)가 손상 될 수 있습니다.


4
프로덕션 환경, 개발 또는 둘 다에 권장되는 설정입니까?
— marcvangend

1
어쩌면 정확히 opcache가 무엇이며 어떻게 사용되는지에 대한 오해가 있지만 아래 PeeHaa 상태 스크립트로 구성하고 테스트했습니다. 모두 작동합니다. 그러나 여전히 OP 질문을하고 있습니다. "사용 방법?" 뷰를 캐싱하는 것이 아니며 문제가 있습니까?
— isimmons

3
@isimmons "OPcache는 사전 컴파일 된 스크립트 바이트 코드를 공유 메모리에 저장하여 PHP가 각 요청에 대해 스크립트를로드하고 파싱 할 필요가 없도록하여 PHP 성능을 향상시킵니다."
— Danack

1
@marcvangend 좋은 지적! 캐싱은 프로덕션 환경에서만 의미가 있다고 생각하므로 이러한 구성은 프로덕션 설정일 수 있습니다.
— Sliq November

3
권장 설정 성능이 기본값보다 나쁜 이유 또는 효과를 발휘해야하는시기를 누구나 설명 할 수 있습니까?
— RP

19

나는 opcache를 사용하는 것에 대해 내 2 센트를 떨어 뜨릴 것입니다.

데이터베이스와 대화 할 수 있도록 많은 필드와 유효성 검사 방법 및 열거 형으로 광범위한 프레임 워크를 만들었습니다.

opcache없이

opcache 없이이 스크립트를 사용하고 2.8 초 동안 9000 요청을 아파치 서버에 푸시하면 모든 요청을 따라 잡을 때까지 70-80 초 동안 90-100 % CPU에서 최대 시간을 초과합니다.

Total time taken: 76085 milliseconds(76 seconds)

opcache가 활성화 된 상태

opcache를 활성화하면 약 25 초 동안 25-30 %의 CPU 시간으로 실행되며 25 %의 CPU 사용을 절대로 통과하지 않습니다.

Total time taken: 26490 milliseconds(26 seconds)

나는 정적이며 기능을 변경할 필요가없는 프레임 워크를 제외한 모든 것의 캐싱을 비활성화하기 위해 opcache 블랙리스트 파일을 만들었습니다. 캐시 파일을 다시로드하거나 유효성을 검사하지 않아도 개발할 수 있도록 프레임 워크 파일 만 명시 적으로 선택합니다. 모든 것을 캐시하면 총 요청 시간이 1 초 절약됩니다.25546 milliseconds

이렇게하면 서버가 땀을 흘리지 않고도 초당 처리 할 수있는 데이터 / 요청의 양이 크게 늘어납니다.


3
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;그냥; ini 파일에 입력하십시오. 그러나 이것이 내가 사용한 것입니다. 대부분 기본 항목
— Tschallacka 10

1
btw, memcache를 사용하여 2100 데이터베이스 요청을 초당 실행하면 150 마이크로 초 (약 1/6 초) 내에서 사용하는 스크립트가 실행됩니다.
— Tschallacka

1
Opcache는 PHP 파일을 컴파일 된 형태로 메모리에 캐시합니다. 따라서 더 이상 PHP 파서가 디스크를 읽고 파일을 컴파일 및 최적화하는 오버 헤드가 없습니다. Memcache는 세션 사이에 변수를 저장하는 데 사용할 수있는 것입니다. 예를 들어 사용자가 화면을 응시하는 동안 10 초 동안 동일한 매개 변수를 요청하는 업데이트 스크립트가 있다고 가정하십시오. mem cache를 사용하여 쿼리를 한 번 컴파일 한 다음 메모리에서 컴파일 된 쿼리를 계속 요청하는 것이 좋습니다.
— Tschallacka

2
그렇지 않습니다. opcache.revalidate_freq=60;파일이 메모리에서 얼마나 오래 살 수 있는지 결정합니다. 시간이 다되면 파일을 다시 컴파일합니다.
— Tschallacka

3
실제로, opcache.revalidate_freq타임 스탬프 변경 여부에 따라 스크립트에서 변경을 확인하는 빈도를 제어합니다. 따라서 스크립트의 타임 스탬프가 마지막으로 컴파일 된 시간과 동일하게 유지되면 다시 컴파일되지 않습니다. 이 모든 opcache.validate_timestamps설정은 기본적으로 활성화되어 있는 설정을 변경하지 않았다고 가정합니다 .
— jjlin

4

Amazon Linux에서 PHP 5.6을 사용하는 경우 (RedHat 또는 CentOS에서 동일해야 함) :

yum install php56-opcache

그런 다음 아파치를 다시 시작하십시오.


2

무들을 설정할 때이 문제가 발생했습니다. php.ini 파일에 다음 줄을 추가했습니다.

zend_extension=C:\xampp\php\ext\php_opcache.dll

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps

extension=C:\xampp\php\ext\php_intl.dll

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

국제-> http://php.net/manual/en/book.intl.php


1
이 설정은 여기에 문서화되어 있습니다. docs.moodle.org/30/en/OPcache
— sierrasdetandil

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.