흰색 화면 사망 : 치명적인 오류 : 허용 된 X 바이트 메모리 크기가 소진되었습니다.


21

Drupal 설치에 문제가 있습니다. 예를 들면 다음과 같습니다.

  • 모듈을 활성화 또는 비활성화하면 빈 페이지로 리디렉션됩니다.
  • 새 콘텐츠 형식을 만들어 저장하면 빈 페이지로 리디렉션됩니다.
  • 새보기를 추가하고 저장하면 빈 페이지로 리디렉션됩니다.
  • 캐시를 지우려고하면 빈 페이지로 다시 리디렉션됩니다.
  • 또는 유사한 경우.

기본적으로 모든 확인 페이지가 나를 흰색 화면으로 리디렉션합니다. 다시 새로 고치면 페이지가 표시됩니다. PHP 메모리 값을 높이려고했지만 도움이되지 않습니다.

이것에 대한 다른 해결책이 있습니까?

내가 가진 오류 :

치명적인 오류 : 1 행의 sites / all / modules / views / plugins / views_plugin_localization_none.inc에서 100663296 바이트의 허용 된 메모리 크기 (8192 바이트 할당 시도)


2
항상 오류 로그를 확인하십시오. 필요한 모든 정보가 있습니다. 귀하의 경우에는 메모리가 부족한 것 같습니다. Drupal 7은 32MB 이상이 필요하며 많은 호스트 제공 업체가이를 기본값으로 설정합니다.
GoodSp33d

답변:


20

늦었을 수도 있지만 도움이되었습니다. 모듈이 WSOD를 일으키는 대부분의 경우 프로세스에서 데이터가 손실되었을 수 있으므로 모듈을 비활성화하여 모듈을 테스트 할 수 없었습니다. 내가 한 것은 module.inc핵심 includes디렉토리 에서 임시 로이 기능을 편집하는 것이 었습니다.

function module_invoke_all($hook) {
  $args = func_get_args();
  // Remove $hook from the arguments.
  unset($args[0]);
  $return = array();
  foreach (module_implements($hook) as $module) {

        print "Starting loading $module <br />";

        $function = $module . '_' . $hook;
        if (function_exists($function)) {
          $result = call_user_func_array($function, $args);
          if (isset($result) && is_array($result)) {
            $return = array_merge_recursive($return, $result);
          }
          elseif (isset($result)) {
            $return[] = $result;
          }
        }

        print "Finished loading $module <br />";

  }

  return $return;
}

그리고 위의 코드에 두 개의 인쇄 문을 추가 한 다음 페이지를 새로 고칩니다. "Finish loading $ module"문에 도달하지 않은 모듈은 문제가있는 모듈입니다. 제 경우에는 문제가되었습니다.

모듈을 찾은 후 시스템 테이블로 이동하여 해당 모듈을 찾고 상태 = 0 및 부트 스트랩 = 0으로 설정하거나 쿼리를 실행할 수 있습니다.

UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1

참조 : Drupal White Screen of Death (WSOD) 디버깅


1
module_invoke_all에 print 문을 추가하면 문제가되는 모듈을 빠르게 찾을 수있었습니다. 그런 다음 drush를 사용하여 비활성화했습니다. 생명의 은인!
Dan Meigs 2014 년

@DanMeigs를 환영합니다. 오늘이 방법을 사용하여 내 블로그 cleverlogic.net 을 수정 했습니다 . 어쩌면 나는 이것에 대한 기사를 써야 할 것입니다. cuz WSOD를 고치려고 노력하는 동안 많은 것을 읽었습니다.
Joshua Kissoon

11

이 코드를 index.php파일 에 붙여 넣으십시오 . 빈 페이지 대신 오류 메시지가 표시됩니다. 최소한 문제의 근본을 알 수 있습니다. PHP 태그 바로 뒤에 붙여 넣습니다.

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

그것이 당신에게 길을 보여 주길 바랍니다!.

http://drupal.org/node/158043


1
그래도 효과가 없었습니다. 어제 오류를 보려고 시도했지만 아무 것도 인쇄하지 않습니다
Jayaram

3
오류 로그를 확인 했습니까? Linux에서 Apache를 실행중인 경우 터미널에서 다음 명령을 시도하십시오 tail /var/log/apache2/error.log. 해당 파일의 가장 최근 10 줄이 표시됩니다.
Charlie Schliesser

실제로 오류가 표시되기 시작했습니다. 오류 : 치명적 오류 : *** / sites / all / modules / views / plugins / views_plugin_localization_none.inc에서 허용 된 메모리 크기 100663296 바이트 (8192 바이트 할당 시도)의 허용 된 메모리 크기 1 호선
Jayaram

1
이것을 추가 index.php하는 것은 나쁜 생각입니다 (대부분의 사람들은 나중에 작동하도록 나중에 게으 르기 때문에 일시적이지만 심지어 설정 파일에 바로 붙여 넣는 것이 좋습니다.
kenorb

10

빈 흰색 화면이 나타나는 이유는 오류보고 기능이 꺼져서 setting.php 파일에 다음 줄을 추가하여 오류를 확인한 것입니다.

error_reporting(E_ALL);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

발생한 오류 ( "XXX 바이트의 메모리 크기가 소진되었습니다")에 대해 다음을 시도 할 수 있습니다.

  1. 캐시를 수동으로 자르고 문제가 해결되는지 확인하십시오 (아마도 DB를 백업하기 전에 백업하는 것이 좋습니다).

    Access phpMyAdmin and truncate all tables starting by cache_ from the database.

  2. : 당신의 settings.php 파일에 다음 줄을 추가하여 (위의 오류의 주된 이유는 모듈의 부분 부하를 발생하고 그 문제의 원인이되는 서버에 의해 배출되는 메모리처럼) 메모리 제한을 늘 ini_set('memory_limit', '-1');
    추가 ini_set('memory_limit', '-1'); 를 겹쳐을 기본 PHP 메모리 제한.
    메모리를 제한하는 대신 -1'256M'또는 '512M'과 같은 메모리 크기를 제공 할 수 있습니다.


6

모듈 중 하나에 메모리가 부족할 수 있습니다.

Drupal이 기본 설정보다 많은 메모리로 실행될 수 있도록 index.php 파일에 한 줄의 코드를 추가 할 수 있습니다.

ini_set('memory_limit','256M');

/drupal/index.php 파일에서? php 다음 줄에 위 코드를 추가하십시오. 모든 것이 제대로 작동하기 시작하면 메모리 문제를 일으키는 원인을 식별 할 수 있습니다 (모듈 일 가능성이 높습니다).

모듈을 비활성화 한 다음 ini_set ( 'memory_limit', '256M')을 주석 처리하십시오. 지금로드되는지 확인하십시오.

ini_set ( 'memory_limit', '256M')을 남겨 두지 않는 것이 좋습니다. 솔루션으로 사용할 수 있지만 최소한 모듈 목록 페이지로 이동할 수 있습니다.

메모리를 사용하고있는 것을 확인하기 위해 debug_backtrace () 를 수행하는 것이 도움이 될 수 있습니다 .


도움이되지 못했습니다
Jayaram 님이

또한 모듈 목록 페이지를 볼 수 있습니다. 모듈을 활성화 / 비활성화 할 때만 발생합니다. 확인 페이지를 보려면 다시 새로 고쳐야합니다.
Jayaram

2
ini_set () 호출을 index.php에 넣는 대신 업데이트시 지워집니다. PHP로 코드를 작성해야하는 경우 사이트 별 설정에 맞는 올바른 위치 인 settings.php 파일에 넣어야합니다. 재정의합니다.
알프레드 암스트롱

이것을 추가 index.php하는 것은 나쁜 생각입니다 (대부분의 사람들은 나중에 작동하도록 나중에 게으 르기 때문에 일시적이지만 심지어 설정 파일에 바로 붙여 넣는 것이 좋습니다.
kenorb

6

오류:

치명적인 오류 : 허용 된 X 바이트의 메모리 크기가 소진되었습니다 (Y 바이트 할당 시도).

바이트 X를 MB로 변환하려면 1024 * 1024로 나누거나 Wolfram 에서 확인하십시오 .

PHP가 Y 바이트를 할당하려고 할 때 발생하지만 PHP memory_limit구성 설정에 의해 설정된 X 바이트에 대한 제한이 있습니다.

관리»보고서»상태 보고서»PHP 로 이동하여 현재 제한을 확인할 수 있습니다. (URL/admin/reports/status/php 하거나 ini_get('memory_limit')PHP 로 인쇄 하여 확인할 수 있습니다 (UI 및 CLI에 따라 제한이 다름).

문제를 해결하려면 다음과 같이 리소스 사용량을 줄여야합니다.

  • 현재 사용하지 않는 (권장) 개발 모듈을 비활성화

    여기에는 Devel, Devel Themer (활성화 된 경우)가 포함됩니다.

  • 사용하지 않는 모듈을 비활성화하십시오.

  • 메모리 리소스에 영향을 줄 수있는 특정 디버그 변수를 비활성화합니다 (예 drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • XDebug와 같은 특정 PHP 확장을 비활성화

  • redis / memcached 캐시 및 일부 PHP 캐시 (예 : OPCache / XCache)를 활성화하고
  • 마지막으로 위의 방법으로 PHP 구성을 향상시킬memory_limit 수 없습니다 .

메모리 제한을 늘리기로 결정 index.php했다면 PHP 메모리를 늘리기 위해 PHP 코드를 붙여서 코어를 해킹하도록 조언하는 많은 사람들이 있습니다. 절대 그렇게하지 마십시오 ! 아주 나쁜 연습입니다.

대신 settings.php(또는 settings.local.php포함 된 경우) 편집 하고 끝에 다음 코드를 붙여 넣으십시오.

ini_set('memory_limit', '512M');

또는 더 좋은 방법은 PHP 구성 파일 ( php.ini) 을 편집 하고 다음 줄을 변경하는 것입니다.

memory_limit = 512M  ; Maximum amount of memory a script may consume

의 위치가 확실하지 않은 경우 다음을 확인하십시오 php.ini.

  • drush status 명령
  • 나에 의한에 가고 /admin/reports/status/php.

메모리를 가장 많이 사용하는 페이지 / 구성 요소를 자세히 조사하려면 다음과 같은 가능성이 있습니다.

자세한 내용은 다음을 확인하십시오.


1
그 PHP는 UI를 강조하고 CLI가 다른 가질 수 +1 memory_limit. 에 drush오류가 /etc/php/7.0/cli/php.ini있었지만에 오류가 없기 때문에 정확히 보고 된 문제 가 있었 /etc/php/7.0/cli/php.ini으므로 drupal UI가 제대로 작동했습니다. 감사!
miro marchi

1

모듈을 사용하여이 메모리 제한을 제어 할 수 있습니다. PHP 런타임 구성 기 모듈은 php.ini 파일을 변경하지 않고 구성하고 Apache를 다시 시작하는 많은 옵션을 제공합니다.

다음과 같은 매개 변수를 구성 할 수 있습니다.

  • 파일 업로드 제한
  • 메모리 제한
  • 최대 실행 시간 제한
  • 최대 입력 변수 한계

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.