개요
간헐적으로 내 블로그가 설정했던 PHP 의 허용 메모리보다 더 높은 수치(4GB)의 요청이 wp-includes/theme.php에서 호출이 간헐적으로 올라가서 php fpm 이 뻗는 문제가 있었다. 이 경우에는 무조건 systemctl restart php8.4-fpm을 진행해야만 서비스가 정상화 되었는데 항상 그러는것이 아니라 간헐적으로 발생하던 문제여서 이 문제를 찾아보기 위해 인터넷을 뒤져보고 결론을 내린 글을 공유해보고자 한다.
오류내용
- 오류 메시지는 보안을 위해 일부 로그를 변형작업 하였으나 핵심 오류 문구는 변동없음
오류는 위 메시지 처럼 서버에 할당했던 PHP 메모리인 1GB 를 웃도는 4GB 할당을 wp-includes/theme.php에서 시도했다는 오류가 발생하며 PHP 를 사용하는 서비스가 정상적으로 동작하지 않는 문제가 있었다.
해당 오류는 325번 라인에서 발생하는데 get_template함수(테마의 이름을 가져오는 함수)를 실행시키고 리턴받을 때 발생하는 것으로 확인되고 있다.
원인
원인은 JIT 이 wp-includes/theme.php를 JIT 처리 하기 위해 Tracing 할 때 잘못된 HOT 경로(빈번하게 실행되는 영역)를 생성한다.
이 잘못된 HOT 경로 할당이 지속발생하면 -1 값을 생성하는데 이는 unsigned 32bit integer 값으로 4,295,229,440 byte 나 되는 메모리 할당을 요청하여 PHP 를 뻗게 만들어버린다.
이는 근본적인 원인 개념은 아니긴하나 실제로 디버깅 모드로 Trace 해보면 Machine Code 까지 접근하는 깊은 수준의 내용에서의 문제라 이 사항에 대해서는 특별하게 언급하지 않으려고 한다.
해결법
해결법은 크게 다음과 같다.
JIT 끄기
opcache JIT 을 끄면 당장의 문제는 안생긴다. 하지만 PHP 의 퍼포먼스적인 성능이 떨어짐은 염두해야 된다.
opcache.enable값, opcache.jit_buffer_size값을 0 으로 설정하면 JIT 처리는 하지 않으므로 추후에 JIT으로 인해 발생하는 문제는 해결된다.
JIT 을 살리되 경로 제한두기
opcache JIT 은 결국 서비스 측면에서 속도 개선을 위해서 인데 버그 하나잡자고 기능을 끄는것은 결국 다시 속도 지연을 일으키게 만드는 또다른 문제를 야기한다.
이 경우에는 별도의 블랙리스트 파일을 생성해서 opcache 가 특정한 경로를 JIT 처리하지 말라고 목록을 만들면 가능하다.
해당 리스트를 사용할 별개의 경로에 파일을 만들고 다음과 같은 경로를 할당시키자.
1 2 3 4 5 6 7 8 9 10 11 12 | /var/www/html/wp-content/object-cache.php /var/www/html/wp-content/wpo/cache /var/www/html/wp-content/cache/* /var/www/html/wp-content/advanced-cache.php /var/www/html/wp-content/backups-dup-pro/* /var/www/html/wp-content/plugins/nasa-core/* /var/www/html/wp-content/plugins/duplicator-pro/* /var/www/html/wp-content/plugins/redis-cache/* /var/www/html/wp-content/db.php /var/www/html/wp-content/docket-cache-data/* /var/www/html/wp-content/plugins/* /var/www/html/wp-includes/theme.php |
- 위 경로는 타사 Cache 플러그인에 대한 경로도 있으므로 각 서비스 되는 WordPress 의 Cache 플러그인 경로만 포함해서 설정하는것을 권장
그 다음, opcache 에 다음과 같은 옵션을 할당하고 위에 생성했던 파일의 절대경로를 집어넣자.
opcache.blacklist_filename=/etc/php/blacklist_filename.txt
그 다음 서비스를 재기동 하자.
참고한 사이트
Verified Fix PHP 8.5.x JIT Tracing Corruption Causing 4295229440 Byte Allocation – WordPress
![You are currently viewing [WordPress] opcache(JIT) 와 WordPress 간 메모리 할당 문제](https://i0.wp.com/blog.supersu.kr/wp-content/uploads/2026/04/Gemini_Generated_Image_tsw3c4tsw3c4tsw3.png?fit=1408%2C768&ssl=1)