백엔드 · 문제 · 검증됨

Fatal error: Allowed memory size of N bytes exhausted (tried to allocate N bytes)

PHP 스크립트가 memory_limit로 정해진 허용 메모리 상한을 초과해 실행이 중단될 때 표시되는 치명적 오류입니다.

핵심 답변

"Allowed memory size exhausted" 오류는 PHP 스크립트가 memory_limit 설정으로 정해진 메모리 상한을 넘어서 실행이 중단됐다는 뜻입니다. 현재 memory_limit 값, 어떤 요청·플러그인에서 초과가 발생하는지, 상한을 올린 뒤 재현 여부를 순서대로 확인해야 합니다.

상세 설명

"Allowed memory size exhausted" 오류는 PHP 스크립트가 실행 중 할당하려던 메모리가 memory_limit 설정으로 정해진 상한을 넘어서면서 실행이 중단됐다는 뜻입니다. PHP 문서에 따르면 memory_limit하나의 스크립트가 할당할 수 있는 최대 메모리 양(바이트) 을 지정하며, 잘못 작성된 스크립트가 서버의 모든 메모리를 소진하는 것을 막기 위한 값입니다.

이 오류는 원인 자체라기보다, PHP가 상한에 도달했음을 관찰하고 실행을 멈춘 결과입니다.

memory_limit가 무엇을 결정하는가

PHP 문서 기준으로 memory_limit의 기본값은 128M이며, 값은 바이트 단위 정수 또는 K·M·G 약식 표기로 지정할 수 있습니다. WordPress 문서는 이 오류를 "WordPress 설치 환경에 원하는 작업을 수행할 만큼의 메모리가 없다" 는 상태로 설명합니다.

관찰 위치확인할 내용
PHP 설정현재 memory_limit 값과 적용 범위
오류 메시지초과가 발생한 파일·라인과 요청 경로
애플리케이션특정 플러그인·페이지·일괄 작업에서만 재현되는지

확인 순서

허용량을 올리기 전에, 먼저 어떤 요청에서 초과가 발생하는지 범위를 좁혀야 합니다. 특정 플러그인이나 대량 처리 작업에서만 재현된다면 상한 조정만으로 끝나지 않을 수 있기 때문입니다. 서버 오류를 나눠 확인하는 절차는 서버 오류 분류 체크리스트를 따릅니다.

허용 메모리 상한 올리기

WordPress 문서는 두 가지 방법을 제시합니다.

  • wp-config.php에서 메모리 상한을 올립니다.
  • php.ini를 편집해 상한을 올립니다. php.ini는 WordPress에 기본 포함되지 않는 파일이므로, 익숙하지 않다면 호스팅 업체에 메모리 상한 증가를 요청하라고 문서는 안내합니다.

++설정을 바꾸기 전 원본을 백업하고 이전 값을 기록해, 오류가 재현되지 않을 때 되돌릴 수 있게 합니다. memory_limit-1로 두면 제한이 사라져 문제 스크립트가 서버 메모리를 소진할 수 있으므로 사용하지 않습니다.++

상한을 올린 뒤에는 같은 요청을 다시 실행해 동일한 위치에서 오류가 재현되는지 확인합니다.

현재 증상

  • PHP 치명적 오류

확인 순서

  1. 관찰 대상은 현재 memory_limit 값입니다. phpinfo() 또는 php.ini에서 확인하며, 기대 결과는 스크립트가 필요로 하는 양보다 낮게 설정돼 있는지 파악하는 것입니다.
  2. 관찰 대상은 오류 메시지에 표시된 초과 시점 파일·라인과 요청 경로입니다. 기대 결과는 특정 페이지·플러그인·작업에서만 초과가 재현되는지 범위를 좁히는 것입니다.
  3. memory_limit를 올린 뒤 동일한 요청을 다시 실행해 같은 위치에서 오류가 재현되는지 확인합니다.

주의할 조치

  • memory_limit를 -1(무제한)로 설정하지 않습니다. PHP 문서상 -1은 메모리 제한을 없애는 값이며, 이렇게 하면 문제 스크립트가 서버 전체 메모리를 소진할 수 있습니다.
  • wp-config.php나 php.ini를 수정하기 전에 원본을 백업하고, 오류가 재현되지 않으면 변경을 되돌릴 수 있도록 이전 값을 기록합니다.
  • 상한을 올려도 특정 코드가 계속 메모리를 과도하게 사용한다면, 상한 증가만으로 원인이 해결됐다고 단정하지 않습니다.

서버 오류 원인 구간 확인

서버 오류가 발생하면 먼저 응답 코드와 오류 로그로 서버 측 문제임을 확인하고, 애플리케이션 코드·구성 파일·플러그인·데이터베이스·메모리를 하나씩 분리해 원인 구간을 좁혀야 합니다. 한 부분만 바꾼 뒤 재현 여부를 확인해 인과를 확정합니다.

  • 반환된 상태 코드가 5xx인지 확인합니다. 통과 기준은 500 등 서버 오류 응답이 관찰되어 클라이언트가 아닌 서버 측 문제로 좁혀지는 것입니다.
  • 서버·애플리케이션 오류 로그(예 debug.log, 서버 error log)에 해당 시각의 오류가 기록됐는지 확인합니다. 통과 기준은 요청 시각과 일치하는 오류 항목을 찾아내는 것입니다.
  • 최근 변경분(코드·구성 파일·플러그인·테마)을 되돌리거나 비활성화한 뒤 재현되는지 확인합니다. 통과 기준은 한 번에 한 요소만 바꿔 원인 요소를 특정하는 것입니다.
  • 데이터베이스 연결과 애플리케이션 실행(메모리·실행 시간)을 각각 분리해 확인합니다. 통과 기준은 DB 연결 실패와 실행 자원 부족 중 어느 구간인지 구분되는 것입니다.
  • 원인으로 지목한 구간만 수정한 뒤 동일 URL을 다시 요청해 5xx가 사라졌는지 확인합니다. 통과 기준은 반복 요청에서 오류가 재현되지 않는 것입니다.

근거와 출처

The PHP Group 공식 문서

확인 범위: definition, memory-limit-directive, resolution · 확인일: 2026-07-23

WordPress.org 공식 문서

확인 범위: definition, resolution · 확인일: 2026-07-23