Magento 2 Allowed Memory หมดข้อผิดพลาดเมื่อรวบรวมรหัส


28

ฉันมีข้อผิดพลาดเมื่อฉันเพิ่มโมดูล ..

โปรดเรียกใช้คำสั่งรวบรวมวีโอไอพีอีกครั้ง

ดังนั้นฉันจึงรันคำสั่งด้านล่าง แต่ยังแสดงข้อผิดพลาดที่ด้านล่างเมื่อรันคำสั่งจากรูต

php magento setup: di: compile

Compilation was started.
%message% 0/7 [>---------------------------]   0% 1 sec 37.0 MiB%message% 0/7 [>
---------------------------]   0% 1 sec 37.0 MiBProxies code generation... 0/7 [
>---------------------------]   0% 1 sec 37.0 MiB
Proxies code generation... 1/7 [====>-----------------------]  14% 47 secs 43.5
MiB
Repositories code generation... 1/7 [====>-----------------------]  14% 47 secs
43.5 MiB
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate
 24 bytes) in D:\xampp\htdocs\linsenwelt\vendor\zendframework\zend-code\src\Scan
ner\FileScanner.php on line 36

จะแก้ไขอย่างไร


ฉันได้รับข้อผิดพลาดเดียวกันในเซิร์ฟเวอร์สด
— SIBHI S

คำตอบ:


72

วิธีแก้ปัญหาอย่างรวดเร็วสำหรับการ จำกัด หน่วยความจำในคำสั่ง Magento 2 คือการเพิ่มการ จำกัด หน่วยความจำภายในคำสั่งโดยตรง

สำหรับคำสั่งการรวบรวม

php -dmemory_limit=5G bin/magento setup:di:compile

สำหรับการปรับใช้

php -dmemory_limit=5G bin/magento setup:static-content:deploy

คุณสามารถเปลี่ยนได้ 5G ต่อสูงสุดหากปัญหาไม่ได้รับการแก้ไข


1
ขอบคุณ @rakesh มันช่วยประหยัดเวลาของฉันขอบคุณมากอีกครั้ง
— Nagaraju K

1
ระวังการเพิ่มขีด จำกัด หน่วยความจำอาจเป็นเพียงวิธีแก้ปัญหาชั่วคราว
— Macas

8

ดูเหมือนว่าหน่วยความจำของคุณมีหน่วยความจำเพียง 128MB เท่านั้น เพิ่มค่าเป็นอย่างน้อย 256MB หรือ 512MB หากทำได้


ฉันลองขนาดไฟล์ 512mb สำหรับไฟล์ php.ini ของฉัน แต่ยังใช้งานไม่ได้ ... จะแก้ปัญหาอย่างไร
— Khushbu Mehta

หากคุณยังคงได้รับAllowed memory size of 134217728 bytesคุณจะไม่เพิ่มขีด จำกัด หน่วยความจำสำหรับ cli
— Marius

ไฟล์ใดที่ฉันตั้งค่าขีด จำกัด หน่วยความจำ
— Khushbu Mehta



5

หากคุณใช้ PHP> = 5.3.0 และคุณใช้ Magento 2.1.x ขึ้นไปหลังจากที่คุณเรียกใช้composer installแล้วสองไฟล์จะถูกสร้างขึ้นในไดเรกทอรีรากของคุณและชื่อ pub pub ของคุณ.user.ini

แก้ไขไฟล์เหล่านั้นเพื่อแทนที่การตั้งค่า PHP.ini ของคุณในกรณีนี้คือ memory_limit

; Set PHP memory limit to 768M which already enough for compilation tasks
memory_limit = 768M
max_execution_time = 18000

หากคุณใช้ Apache คุณจะต้องดูแลไฟล์ภายในไดเรกทอรีรากเท่านั้นไม่ใช่ไฟล์/pubเดียวและในทางกลับกันหากคุณใช้ engineX (nginx)

หวังว่ามันจะช่วย


3

คุณต้องเพิ่มหน่วยความจำที่จัดสรรให้กับ php php --iniเพิ่มหน่วยความจำดำเนินการคำสั่ง Findout โหลด php.ini แล้ว มันควรจะเป็นเช่น

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/05-opcache.ini,

ไปที่โหลด php.ini ปัจจุบัน (/etc/php5/cli/php.ini) และค้นหาพารามิเตอร์ memory_limit เพิ่มค่ากับพารามิเตอร์ memory_limit เป็น 256M หรือ 512M


3

สถานการณ์นี้อาจเป็นเรื่องยากที่จะแก้ไขข้อบกพร่องเพราะถ้าคุณเพียง

php -r "echo ini_get('memory_limit').PHP_EOL;"

มันแสดงขีด จำกัด หน่วยความจำสำหรับ PHP ในเส้นทางของคุณซึ่งอาจใช้ได้ แต่สคริปต์คุณภาพเยี่ยม (bin / magento) ใช้คำนำ

#!/usr/bin/env php

ดังนั้นจึงไม่จำเป็นต้องใช้ PHP จากเส้นทางของคุณ! วิธีหนึ่งในการติดตามphp.iniไฟล์ที่ใช้อยู่คือการเขียนสคริปต์ขนาดเล็กดังนี้

#!/usr/bin/env php
<?php
phpinfo();

เรียกมันว่าgetinfo(ไม่ใช่getinfo.php!) ทำให้มันใช้งานได้จากนั้นเรียกใช้ดังนี้:

./getinfo  | grep php.ini

นี่จะแสดงไฟล์ ini ที่คุณต้องการเปลี่ยน ในไฟล์นั้นเปลี่ยนค่าการกำหนดค่าmemory_limitตามที่แนะนำในโพสต์อื่นเป็นค่าที่สูงกว่า 128M จากนั้นบันทึกไฟล์และตรวจสอบงานของคุณ:

./getinfo  | grep memory_limit

2

ฉันพบปัญหาที่คล้ายกันขีด จำกัด หน่วยความจำเพิ่มขึ้นเป็น 2Gb ภายในไฟล์ php ini ไฟล์ phpinfo () แสดงให้เห็นว่าตั้งเป็น 2Gb ดูเหมือนว่าวีโอไอพีจะตั้งค่า จำกัด หน่วยความจำด้วยตนเองที่ไหน ฉันเพิ่มขีด จำกัด หน่วยความจำภายในไฟล์ bin / magento ในบรรทัดแรกฉันใส่สิ่งนี้:

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

ซึ่งทำให้มันทำงาน


2

ฉันมีทางออกสำหรับคำถามของฉัน สำหรับข้อผิดพลาดที่หน่วยความจำหมดเราต้องเพิ่มหน่วยความจำเพื่อรวบรวมรหัส

php -dmemory_limit=4G bin/magento setup:di:compile

หวังว่ามันจะช่วยใครซักคนในอนาคต


0

ผู้ใช้บรรทัดต่อไปนี้หลังจาก php/bin magento -d memory_limit=5G s:d:c รหัสการรวบรวมของคุณ นี่เป็นเพราะขีด จำกัด ของหน่วยความจำที่อนุญาตให้ใช้กับ php แต่หลังจากอนุญาตให้ จำกัด หน่วยความจำในคำสั่งนี้จะลบข้อผิดพลาดและการรวบรวมและคำสั่งอื่น ๆ ของคุณจะทำงานโดยไม่มีข้อผิดพลาดใด ๆ เพียงเพิ่มสิ่งนี้
-d memory_limit=5G ในทุกคำสั่งตามที่คุณเห็นในตัวอย่างด้านบน โหวตขึ้นถ้าคุณคิดว่าคำตอบของฉันมีประโยชน์


0

การรวบรวมโดยใช้ "-d memory_limit = 5G" ไม่ใช่การตัดสินใจที่ชาญฉลาด มันเป็นวิธีการชั่วคราวที่อาจได้รับผลกระทบระหว่างกระบวนการสลับโหมดเช่นจากนักพัฒนาไปจนถึงการผลิต เวลานี้ระบบคอมไพล์โค้ดโดยไม่มีตรรกะนี้ "-d memory_limit = 5G" ซึ่งมีข้อผิดพลาดเกิดขึ้น

เป็นตัวเลือกที่ดีกว่าในการแก้ไขข้อผิดพลาดในขั้นตอนนี้ ในการแก้ไขปัญหานี้ให้เปิด php.ini และเพิ่ม memory_limit ที่ 1024M และเรียกใช้คำสั่งคอมไพล์การตั้งค่า php bin / magento: di: compile

ตรวจสอบสิ่งนี้: https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors

เวลานี้มันควรจะทำงาน


0

หากคุณกำลังเผชิญปัญหานี้ใน Cli โปรดถาดคำสั่งนี้

php -dmemory_limit = การตั้งค่า bin / magento 8G: อัปเกรด


0

สำหรับ M2 เพิ่มขีด จำกัด หน่วยความจำผ่าน ssh ด้วยคำสั่งด้านล่าง

สำหรับคำสั่งการคอมไพล์: php -dmemory_limit=5G bin/magento setup:di:compile สำหรับคำสั่งการปรับใช้: php -dmemory_limit=5G bin/magento setup:static-content:deploy

คุณสามารถเพิ่มมูลค่า 5G หากปัญหาไม่ได้รับการแก้ไข


0

67

วิธีแก้ปัญหาอย่างรวดเร็วสำหรับการ จำกัด หน่วยความจำในคำสั่ง Magento 2 คือการเพิ่มการ จำกัด หน่วยความจำภายในคำสั่งโดยตรง

สำหรับคำสั่งการรวบรวม

php -dmemory_limit = การตั้งค่า bin / magento 5G: di: compile For Deployment

php -dmemory_limit = การตั้งค่าถังขยะ / วีโอไอพี 5G: เนื้อหาคงที่: ปรับใช้คุณสามารถเปลี่ยนได้ 5G ต่อสูงสุดหากปัญหาไม่ได้รับการแก้ไข

มันใช้งานได้จริง :)

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