본문 바로가기

리눅스

우분투 24.04에서 PHP 8.3의 OPcache를 활성화하는 방법

반응형

우분투 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
반응형