BOARD

문제 해결

PHP 메모리 부족 오류(Allowed memory size exhausted) 원인과 환경별 해결 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 8회 작성일 26-10-11 17:44

본문

PHP 메모리 부족 오류(Allowed memory size exhausted) 원인과 환경별 해결 방법

그누보드 기능을 적용하거나 대용량 데이터를 처리하는 과정에서 발생하는 PHP 메모리 부족 오류의 원인을 파악하고, 서버 권한과 웹호스팅 환경에 맞게 해결하는 방법을 알아봅니다.

PHP 메모리 부족 오류 원인

PHP 메모리 부족 오류(Allowed memory size exhausted)는 PHP 스크립트가 실행될 때 할당된 메모리 제한을 초과하여 사용할 때 발생합니다.

주요 원인 및 배경

  • 메모리 제한 기본값: PHP는 악성코드로 인한 메모리 소모 공격을 방지하기 위해 스크립트 실행 시 기본값(예: 128MB) 이상의 메모리를 사용하지 못하도록 제한하고 있습니다.
  • 대용량 데이터 처리: 큰 파일이나 많은 데이터를 한 번에 메모리에 로드하거나, 용량이 큰 파일을 처리 및 업로드하는 경우 제한된 메모리 용량을 초과하게 됩니다.
  • 무한 루프 및 잘못된 코드: 잘못된 반복문 등으로 인해 메모리 누수가 발생하거나 과도한 메모리가 소모될 때 해당 오류 메시지가 출력됩니다.

서버 root 권한이 있는 환경에서 전체 PHP 스크립트의 메모리 제한(memory_limit)을 늘리려면 php.ini 설정 파일을 수정하고 웹서버를 재시작해야 합니다.

1. php.ini 파일 수정

서버의 터미널에서 편집기를 사용하여 php.ini 파일을 엽니다. (일반적으로 /etc/php.ini 경로에 위치합니다.)

vi /etc/php.ini

파일 내용 중 memory_limit 항목을 찾아 원하는 값(예: 512M)으로 수정합니다.

2. 웹서버 재시작

설정을 시스템에 반영하기 위해 아파치(httpd) 서비스를 재시작합니다.

systemctl restart httpd

이 과정을 거치면 서버 전체의 모든 PHP 파일에 변경된 메모리 제한 설정이 적용됩니다.

웹호스팅 환경에서 PHP 메모리 부족 오류 해결 방법

서버 root 권한이 없는 웹호스팅 환경에서 Fatal error: Allowed memory size exhausted 오류가 발생할 때는 호스팅 최상단 폴더에 .htaccess 파일을 생성하거나 수정하여 메모리 제한 설정을 변경할 수 있습니다.

###.htaccess 설정 방법

  1. 웹호스팅 계정의 최상단 폴더로 접속합니다.
  2. .htaccess 파일을 생성하거나 기존 파일을 엽니다.
  3. 파일 안에 아래의 설정 내용을 추가합니다.
php_value memory_limit 512M
php_value max_execution_time 38000
  • 적용 범위: 해당 설정은 웹호스팅 환경에서 Apache 서버를 사용할 때 .htaccess를 통해 메모리 할당량을 늘리는 방식입니다.

PHP 소스에서 일시적으로 메모리 제한 늘리기

특정 PHP 소스 파일에서만 일시적으로 메모리 제한을 변경하려면 PHP 소스 내에 ini_set 함수를 추가합니다. 이 설정을 적용하면 해당 PHP 페이지를 실행하는 동안에만 메모리 제한이 변경됩니다.

적용 방법

PHP 소스 상단에 아래의 명령어를 추가합니다.

<?php
ini_set('memory_limit', '512M');
?>

메모리 제한을 무제한으로 해제하려면 아래와 같이 설정할 수 있습니다.

<?php
ini_set('memory_limit', '-1');
?>

상황별 판단 및 행동 가이드

내 상황우선할 판단다음 행동
서버 root 권한이 있는 환경전체 PHP 스크립트에 적용할 전역 메모리 제한 상향/etc/php.ini 파일의 memory_limit 값을 원하는 크기(예: 512M)로 수정 후 systemctl restart httpd 실행
웹호스팅 환경 (root 권한 없음)Apache 웹서버 설정 파일을 통한 메모리 할당량 조정호스팅 최상단 폴더에 .htaccess 파일을 생성하거나 열어 php_value memory_limit 512M 추가
특정 파일이나 페이지에서만 오류 발생단일 스크립트 실행에 한정한 임시 메모리 제한 변경문제의 PHP 소스 상단에 ini_set('memory_limit', '512M'); 코드 추가
대용량 파일 처리 또는 코드 오류 의심근본적인 메모리 사용량 최적화 및 누수 방지unset()으로 불필요한 변수 해제 및 스트리밍·페이징 처리 검토

실전 FAQ

Q. 메모리 제한을 -1로 설정해 무제한으로 풀면 안전한가요?

  • 답변: 메모리 제한을 -1로 설정하면 제한 없이 메모리를 사용할 수 있지만, 무한 루프나 심각한 메모리 누수가 발생할 경우 서버 전체의 자원이 고갈되어 다운될 수 있으므로 권장하지 않습니다. 오류가 발생하지 않는 최소한의 값(예: 512M)으로 설정하는 것이 안전합니다.

Q. .htaccess에 설정을 추가했는데도 계속 오류가 발생합니다.

  • 답변: 사용 중인 웹호스팅 서버가 Apache가 아니거나, 서버 설정에서 .htaccess를 통한 php_value 오버라이딩을 허용하지 않는 경우에 발생할 수 있습니다. 이 경우 호스팅 업체에 문의하거나, 문제가 되는 특정 PHP 소스 파일 상단에 ini_set('memory_limit', '512M');을 직접 추가하는 방식을 적용해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.