php cli memory limit


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

ฉันกำลังใช้งาน Debian Squeeze ได้รับการอัปเดตอย่างสมบูรณ์

วิธีแก้ไขที่ชัดเจนคือ 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

IIRC, memory_limit ไม่ จำกัด ไม่ได้รับการสนับสนุนโดย CLI (ฉันจะพยายามค้นหาแหล่งที่มาสำหรับสิ่งนี้) แต่สำหรับตอนนี้ลองส่งผ่านไปยังคำสั่ง:

php -d memory_limit=128M my_script.php

UPDATE

เห็นได้ชัดว่าฉันกำลังฝันเกี่ยวกับ memory_limit ไม่ จำกัด ที่ไม่รองรับ php cli ดูเหมือนว่าค่าจาก ini นั้นจะถูกละเว้น ทางออกที่ง่ายที่สุดนั้นควรจะตั้งค่าเฉพาะในคำสั่ง php เรียกสคริปต์

UPDATE2

เพื่อตอบคำถามว่าหน่วยความจำมาจากที่ใดมีการตั้งค่าส่วนใหญ่ในสคริปต์โดยใช้ 'ini_set'


Conf นั่นคือการกำหนดค่าเริ่มต้นของเดเบียนไม่มีอะไรพิเศษจากฉัน น่าแปลกที่ความคิดเห็นข้างต้นบอกว่ามันทำให้หน่วยความจำ จำกัด 128 MB
Ryan H

อืมคำถามของ WHERE ค่ามาจากไหน (ซึ่งเป็นคำถามจริงที่เห็นได้ชัด / ล้มเหลวในการอ่านจับใจความ) คุณมี ini_set memory_limit ในรหัสหรือไม่
DTest

เรียกใช้ php --ini เพื่อพิมพ์รายการไฟล์การกำหนดค่าที่กำลังอ่าน ในการกำหนดค่า FreeBSD มันจะค้นหาไฟล์ใน /usr/local/etc/php/*.ini หลังจากอ่าน main /usr/local/etc/php.ini หลัก
Allan Jude

ดูเหมือนว่าสคริปต์กำลังตั้งค่าหน่วยความจำภายในเป็นค่านี้ ขอบคุณที่ช่วยฉันแยกแยะทุกอย่างอื่น ฉันไม่อยากให้เป็นแบบนั้นจริงๆ! ขอบคุณสำหรับคำแนะนำ -d
Ryan H

1
สคริปต์ตั้งค่าขีด จำกัด หน่วยความจำของตนเองภายในแอปพลิเคชัน มันถูกตั้งค่าเป็น 64 MB ขอบคุณที่ช่วยฉันค้นหามัน
Ryan H

0

ในขณะที่การทดสอบรุ่น php CLI 5.5.9ปรากฏว่าใน cli มันมีขีด จำกัด หน่วยความจำ unlmited ตามค่าเริ่มต้นและการระบุphp -d memory_limit=4G my_script.phpจะตั้งข้อ จำกัด ที่


ไม่ถูกต้อง CLI จะทำตามการตั้งค่า memory_limit ที่ระบุในไฟล์ php.ini
Tim

-3

หากคุณติดตั้ง PHP เป็นโมดูล Apache (ทำเครื่องหมาย 'เซิร์ฟเวอร์ API' ในphpinfo()) คุณควรเรียกมันผ่านเว็บเบราว์เซอร์บรรทัดคำสั่ง (wget, curl, lynx, ... ) ในงาน cron สิ่งนี้:

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

นั่นเป็นเพียงการสูญเสียความทรงจำเพิ่มเติมเกี่ยวกับ Apache ทั้ง SAPI และ CLI ได้รับการติดตั้งดังนั้นจึงเป็นการดีที่สุดที่จะใช้ CLI ในกรณีนี้
อัลลันจูด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.