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.