PHP CLI 메모리 제한


35

PHP cron 작업에서 메모리 오류가 발생합니다.

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830

crontab의 해당 부분은 다음과 같습니다.

$ sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

데비안 스퀴즈에서 실행 중이며 완전히 업데이트되었습니다.

명백한 해결책은 cli의 메모리 제한이 64MB라는 것입니다. 그러나 /etc/php5/cli/php.ini는 무제한이라고 말합니다.

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

어딘가에서 사용자마다 다를 수 있다는 것을 읽었으며 프로세스가 www-data로 실행 중이므로 다음을 실행했습니다.

$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

apache / php.ini조차도 오류가 주장하는 것보다 더 높은 한계가 있습니다.

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

내가 무엇을 놓치고 있습니까? 이 메모리 제한은 어디에 있습니까?

답변:


60

무제한 memory_limit 인 IIRC는 CLI에서 지원하지 않습니다 (소스를 찾으려고합니다). 지금은 명령에 전달해보십시오.

php -d memory_limit=128M my_script.php

최신 정보

분명히 나는 ​​php cli에서 지원되지 않는 무제한 memory_limit를 꿈꾸고있었습니다. 어쨌든 ini의 값이 무시 된 것처럼 보입니다. 그런 다음 가장 간단한 해결책은 스크립트를 호출하는 php 명령에서 구체적으로 설정하는 것입니다.

업데이트 2

메모리 제한의 출처에 대한 질문에 답하기 위해 'ini_set'을 사용하여 스크립트 자체에서 설정되었을 가능성이 큽니다.


그 conf는 데비안 기본 설정이며, 나에게는 특별한 것이 없습니다. 이상하게도 위의 의견은 메모리를 128MB로 제한한다고 말합니다.
— Ryan H

Hrm, 값이 어디에서 오는가?
— DTest

php --ini를 실행하여 읽고있는 구성 파일 목록을 인쇄하십시오. FreeBSD 설정에서 메인 /usr/local/etc/php.ini를 읽은 후 /usr/local/etc/php/*.ini 파일을 찾습니다
— Allan Jude

스크립트가 내부적으로 메모리를이 값으로 설정하고있는 것 같습니다. 다른 모든 것을 배제하도록 도와 주셔서 감사합니다. 나는 그것이 그렇게되고 싶지 않았습니다! -d 팁 주셔서 감사합니다.
— Ryan H

1
스크립트는 내부적으로 자체 메모리 제한을 응용 프로그램에 설정합니다. 64MB로 설정되었습니다. 찾도록 도와 주셔서 감사합니다.
— Ryan H

0

CLI PHP 버전을 테스트하는 동안 5.5.9cli에서는 기본적으로 메모리 제한이 제한되지 않은 것으로 나타나며이를 지정 php -d memory_limit=4G my_script.php하면 제한이 설정됩니다.


맞지 않습니다. CLI는 php.ini 파일에 지정된 memory_limit 설정을 따릅니다
— Tim

-3

PHP를 Apache 모듈로 설치하는 경우 (에서 '서버 API'확인 phpinfo()) cron 작업에서 명령 줄 웹 브라우저 (wget, curl, lynx 등)를 통해 다음과 같이 호출해야합니다.

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1

그것은 아파치에서 더 많은 메모리를 낭비합니다. SAPI와 CLI가 모두 설치되므로이 경우 CLI를 사용하는 것이 가장 좋습니다.
— Allan Jude
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.