PHP 5.5가 출시되었으며 OPCache라는 새로운 코드 캐싱 모듈을 제공하지만 이에 대한 문서는 없습니다.
그렇다면 문서는 어디에 있으며 OPcache를 어떻게 사용합니까?
PHP 5.5가 출시되었으며 OPCache라는 새로운 코드 캐싱 모듈을 제공하지만 이에 대한 문서는 없습니다.
그렇다면 문서는 어디에 있으며 OPcache를 어떻게 사용합니까?
답변:
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
면책 조항 나는이 프로젝트의 저자입니다
풍모:
스크린 샷 :
URL : https://github.com/PeeHaa/OpCacheGUI
opcache- 상태
풍모:
스크린 샷 :
URL : https://github.com/rlerdorf/opcache-status
opcache-gui
풍모:
스크린 샷 :
OPcache는 APC 모듈을 대체하도록 설계되었으므로 PHP에서 병렬로 실행할 수 없습니다. 이것은 코드 작성 방법에 영향을 미치지 않기 때문에 PHP opcode 캐싱에 좋습니다.
그러나 현재 APC를 사용하여 apc_store()
기능을 통해 다른 데이터를 저장 하는 경우 OPCache를 사용하기로 결정한 경우 에는 해당 기능을 수행 할 수 없습니다.
공유 PHP 메모리에 데이터를 저장하는 APCu 또는 Yac 와 같은 다른 라이브러리를 사용 하거나 메모리에 별도의 프로세스로 데이터를 PHP에 저장하는 memcached와 같은 것을 사용하도록 전환해야합니다.
또한 OPcache에는 APC에 존재하는 업로드 진행률 표시기가 없습니다. 대신 세션 업로드 진행을 사용해야합니다 .
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)가 손상 될 수 있습니다.
나는 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
이렇게하면 서버가 땀을 흘리지 않고도 초당 처리 할 수있는 데이터 / 요청의 양이 크게 늘어납니다.
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 파일에 입력하십시오. 그러나 이것이 내가 사용한 것입니다. 대부분 기본 항목
opcache.revalidate_freq=60;
파일이 메모리에서 얼마나 오래 살 수 있는지 결정합니다. 시간이 다되면 파일을 다시 컴파일합니다.
opcache.revalidate_freq
타임 스탬프 변경 여부에 따라 스크립트에서 변경을 확인하는 빈도를 제어합니다. 따라서 스크립트의 타임 스탬프가 마지막으로 컴파일 된 시간과 동일하게 유지되면 다시 컴파일되지 않습니다. 이 모든 opcache.validate_timestamps
설정은 기본적으로 활성화되어 있는 설정을 변경하지 않았다고 가정합니다 .
무들을 설정할 때이 문제가 발생했습니다. 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
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146