리눅스
우분투 24.04에서 PHP 8.3의 OPcache를 활성화하는 방법
변군이글루
2025. 10. 1. 21:13
반응형
우분투 24.04에서 PHP 8.3의 OPcache를 활성화하는 방법
OPcache 개요
PHP는 요청 시 소스 코드 → 파싱 → 바이트코드 생성 → 실행 단계를 거칩니다.
OPcache는 이 중 파싱·컴파일 과정을 캐싱하여, 이후 요청은 메모리에 저장된 바이트코드를 바로 실행 → 성능이 크게 향상됩니다.
PHP 5.5부터 기본 포함된 확장이며, PHP 8.3에서도 별도 설정만으로 활성화 가능합니다.
PHP 8.3 및 OPcache 설치 확인
PHP 버전 확인
php -v
OPcache 모듈 설치 여부 확인
php -m | grep opcache
PHP와 확장이 설치되어 있지 않다면
더보기
---
PHP 설치
sudo apt update
sudo apt install -y php8.3 php8.3-opcache php8.3-fpm php8.3-cli
Laravel 환경 추가 확장 설치
sudo apt install -y php8.3-mbstring php8.3-xml php8.3-mysql php8.3-curl
---
php.ini 파일 설정
php.ini 위치 확인
php --ini
opcache.ini 파일 편집
vim /etc/php/8.3/fpm/conf.d/10-opcache.ini
OPcache 끄기(개발/테스트용)
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
; -----------------------------
; OPcache 비활성화
; -----------------------------
opcache.enable=0
opcache.enable_cli=0
; -----------------------------
; JIT 비활성화
; -----------------------------
opcache.jit=0
opcache.jit_buffer_size=0
특징
- 운영 환경에서는 권장되지 않음
- 매 요청마다 PHP 소스를 파싱/컴파일 → 실행 (느림) CPU 사용량↑, 응답 속도↓
- 개발/테스트 환경에서만 잠깐 유용할 수 있음(변경사항 즉시 반영)
728x90
OPcache 켜고 JIT 끄기(운영환경 권장)
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
; -----------------------------
; OPcache 활성화
; -----------------------------
opcache.enable=1
opcache.enable_cli=1 ; CLI에서도 OPcache 사용 (선택 사항)
; -----------------------------
; JIT 비활성화
; -----------------------------
opcache.jit=0
opcache.jit_buffer_size=0
; -----------------------------
; 프로덕션 권장 추가 설정
; -----------------------------
opcache.validate_timestamps=0 ; 파일 변경 감지 안 함 (성능↑)
opcache.memory_consumption=256 ; OPcache 메모리 크기 (MB)
opcache.interned_strings_buffer=16 ; Interned string 버퍼 (MB)
opcache.max_accelerated_files=10000 ; 캐시 가능한 파일 최대 개수
opcache.fast_shutdown=1 ; 빠른 재시작 지원
; -----------------------------
; Laravel 호환성
; -----------------------------
opcache.save_comments=1 ; 주석 기반 기능(어노테이션 등) 유지
opcache.enable_file_override=0
특징
- 운영 환경 권장 설정
- PHP 스크립트 최초 1회만 컴파일 → 이후 메모리에서 즉시 실행 (빠름)
- JIT은 끄므로 메모리 사용량을 줄이고 안정성↑
- 대부분의 웹 애플리케이션(WordPress, Laravel, Symfony 등)에서는 이 설정이 최적
서비스 재시작 및 상태 확인
PHP-FPM 및 Nginx 재시작
sudo systemctl restart nginx php8.3-fpm
서비스 상태 확인
sudo systemctl status nginx
sudo systemctl status php8.3-fpm
OPcache 동작 확인
php -r 'print_r(opcache_get_status());'
- "opcache_enabled" => true 가 보이면 정상 작동 중입니다.
Laravel과 OPcache
Artisan 캐시 최적화
php artisan cache:clear
php artisan config:cache
php artisan route:cache
코드 변경 후 OPcache 리셋
vim opcache_reset.php
<?php
if (function_exists('opcache_reset')) {
if (opcache_reset()) {
echo "OPcache reset successfully.\n";
} else {
echo "Failed to reset OPcache.\n";
}
} else {
echo "OPcache is not enabled.\n";
}
?>
CLI로 실행
php opcache_reset.php
또는 웹 브라우저로 접근
curl http://your-site/opcache_reset.php
OPcache 로그 활성화(디버깅 정보 수집)
vim /etc/php/8.3/fpm/conf.d/10-opcache.ini
opcache.log_verbosity_level=2
opcache.error_log=/var/log/php-fpm/opcache-error.log
로그 확인
tail -f /var/log/php-fpm/opcache-error.log
문제점
PHP-FPM segfault는 배포 후 OPcache 캐시 손상(symlink, 파일 변경)과 JIT 컴파일 문제(opcache.jit=tracing)가 주요 원인으로 Laravel 사이트의 복잡한 코드(쿼리, 패키지)가 이를 트리거했을 가능성이 높습니다.
php-fpm8.3[255272]: segfault at 50 ip 0000556049524466
재발 방지
PHP 웹 소스 배포 시 OPcache 캐시 불일치로 인해 segfault가 발생할 수 있습니다.
이를 방지하려면 OPcache와 JIT 설정을 최적화하는 것이 중요합니다. OPcache는 활성화하여 성능을 유지하되, JIT를 비활성화하여 안정성을 강화하면 재발 위험을 효과적으로 줄일 수 있습니다.
728x90
반응형