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_ID를
opcache.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- 다형성(동적 또는 메서드) 호출을 인라인하려는 최대 시도 횟수입니다. 이 제한을 초과하는 호출은 메가모픽으로 처리되며 인라인되지 않습니다.