OPcache 설치 런타임 구성

이 함수의 동작은 php.ini의 설정에 영향을 받습니다.

OPCache 구성 옵션

Name Default Changeable Changelog
opcache.enable "1" PHP_INI_ALL  
opcache.enable_cli "0" PHP_INI_SYSTEM Between PHP 7.1.2 and 7.1.6 inclusive, the default was "1"
opcache.memory_consumption "128" PHP_INI_SYSTEM  
opcache.interned_strings_buffer "8" PHP_INI_SYSTEM  
opcache.max_accelerated_files "10000" PHP_INI_SYSTEM  
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM  
opcache.validate_timestamps "1" PHP_INI_ALL  
opcache.revalidate_freq "2" PHP_INI_ALL  
opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM  
opcache.fast_shutdown "0" PHP_INI_SYSTEM Removed in PHP 7.2.0
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0x7FFEBFFF" PHP_INI_SYSTEM Changed from 0x7FFFBFFF in PHP 7.3.0
opcache.inherited_hack "1" PHP_INI_SYSTEM Removed in PHP 7.3.0
opcache.dups_fix "0" PHP_INI_ALL  
opcache.blacklist_filename "" PHP_INI_SYSTEM  
opcache.max_file_size "0" PHP_INI_SYSTEM  
opcache.consistency_checks "0" PHP_INI_ALL  
opcache.force_restart_timeout "180" PHP_INI_SYSTEM  
opcache.error_log "" PHP_INI_SYSTEM  
opcache.log_verbosity_level "1" PHP_INI_SYSTEM  
opcache.preferred_memory_model "" PHP_INI_SYSTEM  
opcache.protect_memory "0" PHP_INI_SYSTEM  
opcache.mmap_base null PHP_INI_SYSTEM  
opcache.restrict_api "" PHP_INI_SYSTEM  
opcache.file_update_protection "2" PHP_INI_ALL  
opcache.huge_code_pages "0" PHP_INI_SYSTEM  
opcache.lockfile_path "/tmp" PHP_INI_SYSTEM  
opcache.opt_debug_level "0" PHP_INI_SYSTEM Available as of PHP 7.1.0
opcache.file_cache NULL PHP_INI_SYSTEM  
opcache.file_cache_only "0" PHP_INI_SYSTEM  
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM  
opcache.file_cache_fallback "1" PHP_INI_SYSTEM Windows only.
opcache.validate_permission "0" PHP_INI_SYSTEM Available as of PHP 7.0.14
opcache.validate_root "0" PHP_INI_SYSTEM Available as of PHP 7.0.14
opcache.preload "" PHP_INI_SYSTEM Available as of PHP 7.4.0
opcache.preload_user "" PHP_INI_SYSTEM Available as of PHP 7.4.0
opcache.cache_id "" PHP_INI_SYSTEM Windows only. Available as of PHP 7.4.0
opcache.jit "tracing" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_buffer_size "0" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_debug "0" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_bisect_limit "0" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_prof_threshold "0.005" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_max_root_traces "1024" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_max_side_traces "128" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_max_exit_counters "8192" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_hot_loop "64" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_hot_func "127" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_hot_return "8" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_hot_side_exit "8" PHP_INI_SYSTEM Available as of PHP 8.0.0
opcache.jit_blacklist_root_trace "16" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_blacklist_side_trace "8" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_max_loop_unrolls "8" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_max_recursive_calls "2" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_max_recursive_returns "2" PHP_INI_ALL Available as of PHP 8.0.0
opcache.jit_max_polymorphic_calls "2" PHP_INI_ALL Available as of PHP 8.0.0

PHP_INI_* 모드에 대한 자세한 내용과 정의는 구성 설정을 설정할 수 있는 위치를 참조하세요. 다음은 구성 지시문에 대한 간단한 설명입니다.

opcache.enable bool
opcode 캐시를 활성화합니다. 비활성화되면 코드가 최적화되거나 캐시되지 않습니다. opcache.enable 설정은 ini_set()을 통해 런타임에 활성화할 수 없으며 비활성화만 가능합니다. 스크립트에서 활성화하려고 하면 경고가 생성됩니다.
opcache.enable_cli bool
PHP의 CLI 버전에 대한 opcode 캐시를 활성화합니다.
opcache.memory_consumption int
OPcache에서 사용하는 공유 메모리 저장소의 크기(MB)입니다. 최소 허용 값은 "8"이며 더 작은 값이 설정되는 경우 적용됩니다.
opcache.interned_strings_buffer int
억류된 문자열을 저장하는 데 사용되는 메모리 양(MB)입니다.
opcache.max_accelerated_files int
OPcache 해시 테이블의 최대 키(및 이에 따른 스크립트) 수. 사용된 실제 값은 소수 집합의 첫 번째 숫자가 됩니다. { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 10 구성된 값. 최소값은 200입니다. 최대값은 1000000입니다. 이 범위를 벗어나는 값은 허용 범위로 고정됩니다.
opcache.max_wasted_percentage int
여유 메모리가 부족한 경우 다시 시작이 예약되기 전에 허용되는 낭비된 메모리의 최대 백분율입니다. 최대 허용 값은 "50"이며 더 큰 값이 설정되면 적용됩니다.
opcache.use_cwd bool
활성화된 경우 OPcache는 현재 작업 디렉토리를 스크립트 키에 추가하여 동일한 기본 이름을 가진 파일 간의 충돌 가능성을 제거합니다. 이 지시문을 비활성화하면 성능이 향상되지만 기존 응용 프로그램이 중단될 수 있습니다.
opcache.validate_timestamps bool
활성화된 경우 OPcache는 opcache.revalidate_freq 초마다 업데이트된 스크립트를 확인합니다. 이 지시문이 비활성화되면 opcache_reset(), opcache_invalidate()를 통해 또는 파일 시스템 변경 사항을 적용하려면 웹 서버를 다시 시작하여 OPcache를 수동으로 재설정해야 합니다.
opcache.revalidate_freq int
업데이트에 대한 스크립트 타임스탬프를 확인하는 빈도(초)입니다. 0은 OPcache가 모든 요청에 ​​대한 업데이트를 확인하도록 합니다.

이 구성 지시문은 opcache.validate_timestamps가 비활성화된 경우 무시됩니다.

opcache.revalidate_path bool
비활성화하면 동일한 include_path를 사용하는 기존 캐시 파일이 재사용됩니다. 따라서 동일한 이름을 가진 파일이 include_path의 다른 곳에 있으면 찾을 수 없습니다.
opcache.save_comments bool
비활성화하면 최적화된 코드의 크기를 줄이기 위해 모든 문서 주석이 opcode 캐시에서 삭제됩니다. 이 구성 지시문을 비활성화하면 Doctrine, Zend Framework 2 및 PHPUnit을 포함하여 주석에 대한 주석 구문 분석에 의존하는 애플리케이션 및 프레임워크가 중단될 수 있습니다.
opcache.fast_shutdown bool
활성화하면 할당된 각 블록을 해제하지 않지만 Zend Engine 메모리 관리자에 의존하여 전체 요청 변수 세트를 일괄적으로 할당 해제하는 빠른 종료 시퀀스가 ​​사용됩니다.

이 지시문은 PHP 7.2.0에서 제거되었습니다. 빠른 종료 시퀀스의 변형이 PHP에 통합되었으며 가능한 경우 자동으로 사용됩니다.

opcache.enable_file_override bool
활성화되면 opcode 캐시는 file_exists(), is_file()is_readable()이 호출될 때 파일이 이미 캐시되었는지 여부를 확인합니다. 이렇게 하면 PHP 스크립트의 존재와 가독성을 확인하는 응용 프로그램의 성능이 향상될 수 있지만 opcache.validate_timestamps가 비활성화된 경우 오래된 데이터를 반환할 위험이 있습니다.
opcache.optimization_level int
실행되는 최적화 패스를 제어하는 ​​비트 마스크입니다.
opcache.inherited_hack bool
이 구성 지시문은 무시됩니다.
opcache.dups_fix bool
이 해킹은 "클래스를 다시 선언할 수 없음" 오류를 해결하기 위해서만 활성화해야 합니다.
opcache.blacklist_filename string
OPcache 블랙리스트 파일의 위치입니다. 블랙리스트 파일은 한 줄에 하나씩 가속해서는 안 되는 파일 이름을 포함하는 텍스트 파일입니다. 와일드카드가 허용되며 접두사도 제공할 수 있습니다. 세미콜론으로 시작하는 줄은 주석으로 무시됩니다.

간단한 블랙리스트 파일은 다음과 같습니다.

; Matches a specific file.
/var/www/broken.php
; A prefix that matches all files starting with x.
/var/www/x
; A wildcard match.
/var/www/*-broken.php
                    
opcache.max_file_size int
캐시될 최대 파일 크기(바이트)입니다. 0이면 모든 파일이 캐시됩니다.
opcache.consistency_checks int
0이 아닌 경우 OPcache는 N 요청마다 캐시 체크섬을 확인합니다. 여기서 N은 이 구성 지시문의 값입니다. 성능이 저하될 수 있으므로 디버깅할 때만 활성화해야 합니다.
opcache.force_restart_timeout int
캐시가 활성 상태가 아닌 경우 예약된 다시 시작이 시작될 때까지 기다리는 시간(초)입니다. 시간 초과에 도달하면 OPcache는 문제가 있다고 가정하고 다시 시작할 수 있도록 캐시에 잠금을 유지하는 프로세스를 종료합니다.

opcache.log_verbosity_level이 2 이상으로 설정되어 있으면 오류가 발생할 때 경고가 오류 로그에 기록됩니다.

이 지시문은 Windows에서 지원되지 않습니다.

opcache.error_log string
OPcache 오류에 대한 오류 로그입니다. 빈 문자열은 stderr과 동일하게 처리되며 로그가 표준 오류(대부분의 경우 웹 서버 오류 로그가 됨)로 전송됩니다.
opcache.log_verbosity_level int
로그 상세 수준입니다. 기본적으로 치명적인 오류(수준 0) 및 오류(수준 1)만 기록됩니다. 사용 가능한 다른 수준은 경고(수준 2), 정보 메시지(수준 3) 및 디버그 메시지(수준 4)입니다.
opcache.preferred_memory_model string
OPcache가 사용할 기본 메모리 모델입니다. 비어 있는 경우 OPcache는 가장 적절한 모델을 선택하며 이는 거의 모든 경우에 올바른 동작입니다.

가능한 값에는 mmap, shm, posix 및 win32가 포함됩니다.

opcache.protect_memory bool
스크립트를 실행하는 동안 예기치 않은 쓰기로부터 공유 메모리를 보호합니다. 이것은 내부 디버깅에만 유용합니다.
opcache.mmap_base string
Windows에서 공유 메모리 세그먼트에 사용되는 기반입니다. 모든 PHP 프로세스는 공유 메모리를 동일한 주소 공간에 매핑해야 합니다. 이 지시문을 사용하면 "기본 주소에 다시 연결할 수 없음" 오류를 수정할 수 있습니다.
opcache.restrict_api string
경로가 지정된 문자열에서 시작되는 PHP 스크립트에서만 OPcache API 함수를 호출할 수 있습니다. 기본값 ""은 제한이 없음을 의미합니다.
opcache.file_update_protection string
이 시간(초) 미만인 파일 캐싱을 방지합니다. 불완전하게 업데이트된 파일의 캐싱을 방지합니다. 사이트의 모든 파일 업데이트가 원자성인 경우 "0"으로 설정하여 성능을 향상시킬 수 있습니다.
opcache.huge_code_pages bool
PHP 코드(텍스트 세그먼트)를 HUGE PAGES로 복사하는 것을 활성화 또는 비활성화합니다. 이렇게 하면 성능이 향상되지만 적절한 OS 구성이 필요합니다. Linux에서는 PHP 7.0.0부터, FreeBSD에서는 PHP 7.4.0부터 사용할 수 있습니다.
opcache.lockfile_path string
공유 잠금 파일을 저장하는 데 사용되는 절대 경로(*nix 전용)
opcache.opt_debug_level string
다양한 최적화 단계를 디버깅하기 위한 opcode 덤프를 생성합니다. 0x10000은 최적화가 발생하기 전에 컴파일러가 생성한 opcode를 출력하고 0x20000은 최적화된 코드를 출력합니다.
opcache.file_cache string
두 번째 수준 캐시 디렉터리를 활성화하고 설정합니다. SHM 메모리가 가득 차거나 서버를 다시 시작하거나 SHM을 재설정할 때 성능이 향상되어야 합니다. 기본 ""은 파일 기반 캐싱을 비활성화합니다.
opcache.file_cache_only bool
공유 메모리에서 opcode 캐싱을 활성화하거나 비활성화합니다.

메모: PHP 8.1.0 이전에는 파일 캐시를 수동으로 지우려면 이미 채워진 파일 캐시로 이 지시문을 비활성화해야 했습니다.

opcache.file_cache_consistency_checks bool
스크립트가 파일 캐시에서 로드될 때 체크섬 유효성 검사를 활성화하거나 비활성화합니다.
opcache.file_cache_fallback bool
공유 메모리에 다시 연결하지 못한 특정 프로세스에 대해 opcache.file_cache_only=1을 의미합니다(Windows 전용). 명시적으로 활성화된 파일 캐시가 필요합니다.

주의 이 구성 옵션을 비활성화하면 프로세스가 시작되지 않을 수 있으므로 권장하지 않습니다.

opcache.validate_permission bool
현재 사용자에 대해 캐시된 파일 권한을 확인합니다.
opcache.validate_root bool
chroot 환경에서 이름 충돌을 방지합니다. 이것은 chroot 외부의 파일에 대한 액세스를 방지하기 위해 모든 chroot 환경에서 활성화되어야 합니다.
opcache.preload string
서버 시작 시 컴파일 및 실행되고 다른 파일을 포함하거나 opcache_compile_file() 함수를 사용하여 미리 로드할 수 있는 PHP 스크립트를 지정합니다. 이러한 파일에 정의된 모든 엔터티(예: 함수 및 클래스)는 서버가 종료될 때까지 즉시 요청에 사용할 수 있습니다.

메모: Windows에서는 사전 로드가 지원되지 않습니다.

opcache.preload_user string
보안상의 이유로 루트로 코드를 미리 로드하는 것은 허용되지 않습니다. 이 지시문을 사용하면 미리 로드를 다른 사용자로 실행할 수 있습니다.
opcache.cache_id string
Windows에서 동일한 캐시 ID를 가진 동일한 사용자 계정에서 동일한 PHP SAPI를 실행하는 모든 프로세스는 단일 OPcache 인스턴스를 공유합니다. 캐시 ID의 값은 자유롭게 선택할 수 있습니다.

IIS의 경우 환경 변수 APP_POOL_IDopcache.cache_id로 사용하여 다른 응용 프로그램 풀이 자체 OPcache 인스턴스를 가질 수 있습니다.

opcache.jit string|int
일반적인 사용의 경우 이 옵션은 다음 네 가지 문자열 값 중 하나를 허용합니다.
  • disable: 완전히 비활성화되어 런타임에 활성화할 수 없습니다.
  • off: 비활성화되지만 런타임에 활성화될 수 있습니다.
  • tracing/on: 추적 JIT를 사용합니다. 기본적으로 활성화되어 있으며 대부분의 사용자에게 권장됩니다.
  • function: Use function JIT.

고급 사용을 위해 이 옵션은 4자리 정수 CRTO를 허용합니다. 여기서 숫자는 다음을 의미합니다.

C (CPU-specific optimization flags)

  • 0: CPU별 최적화를 비활성화합니다.
  • 1: CPU가 지원하는 경우 AVX 사용을 활성화합니다.

R (register allocation)

  • 0: 레지스터 할당을 하지 않습니다.
  • 1: 블록 로컬 레지스터 할당을 수행합니다.
  • 2: 전역 레지스터 할당을 수행합니다.

T (trigger)

  • 0: 스크립트 로드 시 모든 함수를 컴파일합니다.
  • 1: 처음 실행할 때 함수를 컴파일합니다.
  • 2: 첫 번째 요청 시 함수를 프로파일링하고 나중에 가장 인기 있는 함수를 컴파일합니다.
  • 3: 즉석에서 프로파일링하고 핫 함수를 컴파일합니다.
  • 4: 현재 사용되지 않습니다.
  • 5: 추적 JIT를 사용합니다. 즉석에서 프로파일링하고 핫 코드 세그먼트에 대한 추적을 컴파일합니다.

O (optimization level)

  • 0: No JIT.
  • 1: Minimal JIT (call standard VM handlers).
  • 2: Inline VM handlers.
  • 3: Use type inference.
  • 4: Use call graph.
  • 5: Optimize whole script.

"tracing" 모드는 CRTO = 1254에 해당하고 "function" 모드는 CRTO = 1205에 해당합니다.

opcache.jit_buffer_size int
컴파일된 JIT 코드를 위해 예약할 공유 메모리의 양입니다. 0 값은 JIT를 비활성화합니다.

int를 사용하는 경우 값은 바이트 단위로 측정됩니다. 이 FAQ에 설명된 대로 약식 표기법을 사용할 수도 있습니다.

opcache.jit_debug int
활성화할 JIT 디버그 출력을 지정하는 비트 마스크입니다. 가능한 값은 zend_jit.h를 참조하십시오.
opcache.jit_bisect_limit int
특정 수의 함수를 컴파일한 후 JIT 컴파일을 비활성화하는 디버깅 옵션입니다. 이것은 JIT 컴파일 오류의 소스를 이등분하는 데 도움이 될 수 있습니다.
opcache.jit_prof_threshold float
"첫 요청 시 프로필" 트리거 모드를 사용할 때 이 임계값은 함수가 핫으로 간주되는지 여부를 결정합니다. 함수 호출 횟수를 모든 함수 호출 횟수로 나눈 값은 임계값 이상이어야 합니다. 예를 들어 임계값 0.005는 모든 호출의 0.5% 이상을 구성하는 함수가 JIT 컴파일됨을 의미합니다.
opcache.jit_max_root_traces int
최대 루트 추적 수입니다.
opcache.jit_max_side_traces int
루트 추적이 가질 수 있는 최대 측면 추적 수입니다.
opcache.jit_max_exit_counters int
측면 추적 종료 카운터의 최대 수입니다. 이는 모든 루트 트레이스에 걸쳐 있을 수 있는 총 사이드 트레이스 수를 제한합니다.
opcache.jit_hot_loop int
얼마나 많은 반복 후에 루프가 핫으로 간주됩니다.
opcache.jit_hot_func int
얼마나 많은 호출 후에 함수가 핫으로 간주됩니다.
opcache.jit_hot_return int
얼마나 많은 반환 후 반환은 뜨거운 것으로 간주됩니다.
opcache.jit_hot_side_exit int
얼마나 많은 출구가 나온 후 측면 출구는 뜨거운 것으로 간주됩니다.
opcache.jit_blacklist_root_trace int
블랙리스트에 올리기 전에 루트 추적의 컴파일이 시도되는 최대 횟수입니다.
opcache.jit_blacklist_side_trace int
블랙리스트에 올리기 전에 사이드 트레이스 컴파일을 시도하는 최대 횟수입니다.
opcache.jit_max_loop_unrolls int
루트 추적에 도달하고 외부 루프를 닫으려는 측면 추적에서 루프를 풀기 위한 최대 시도 횟수입니다.
opcache.jit_max_recursive_calls int
펼쳐진 재귀 호출 루프의 최대 수입니다.
opcache.jit_max_recursive_returns int
펼친 재귀 반환 루프의 최대 수입니다.
opcache.jit_max_polymorphic_calls int
다형성(동적 또는 메서드) 호출을 인라인하려는 최대 시도 횟수입니다. 이 제한을 초과하는 호출은 메가모픽으로 처리되며 인라인되지 않습니다.