2015-10-05 6 views
2

Я загружаю файл в свой проект Yii2. Файл он сам составляет ~ 100 кБ, содержит ~ 45 000 коротких строк, которые обрабатываются контроллером и добавляются по очереди в базу данных.Yii2 Допустимый размер памяти

yii-error

Как я мог проследить, когда именно происходит ошибка или то, что она является то, что это съедает память? Предел, установленный в php.ini, в настоящее время составляет 512 МБ. И что же LogTarget имеет к этому отношение? Afaik Я не регистрирую ничего во время этого процесса загрузки и обновления.

Возможно ли это, если что-то еще использует память сервера? A'la другие фоновые скрипты?

+0

Это определенно ваш скрипт, который использует 500 МБ памяти. Вероятно, это не имеет ничего общего с этой конкретной линией. Вероятно, вам придется отлаживать скрипт, который анализирует загруженный файл и обнаруживает утечку памяти. –

+0

Показать код вашего контроллера – soju

ответ

0

Ошибка в этой строке. У меня была такая же ошибка, когда я импортировал данные из файла excel и регистрировал некоторые «модели» данные с помощью print_r или var_dump, где вся «модель» добавляется в журнал (включая отношения и т. Д.).

Вы можете это исправить, ограничивая глубину отвала с помощью Vardumper вместо print_r или var_dump и установки глубины (например, 3)

yii\helpers\VarDumper::dumpAsString($var, $depth, $highlight) 

Тогда только код возвращается на эту глубину и журнал будет получать меньше.

Также, если у вас много вложений/обновлений в вашу базу данных, журнал будет довольно длинным.

Проблема btw происходит из панели инструментов отладки. Вы не получите ошибку, если модуль отладки отключен.

, но другие, а затем увеличение памяти там не является реальным решением

+0

Это правда. Я отключил панель инструментов отладки, и теперь я больше не сталкиваюсь с этой проблемой. Это на самом деле не имело большого отношения к Yii, сценарий был сложным по своей природе, но отключение панели инструментов сократило использование памяти с ~ 370MB до ~ 40MB, что огромно! Спасибо за совет! – jeesus

0

У меня уже был опыт таких ситуаций. Вы можете действовать двумя способами

1) - повышение параметра memory_limit в php.ini

; Maximum amount of memory a script may consume (128MB) 
; http://php.net/memory-limit 
; memory_limit = 128M 
memory_limit = 256M 

2) - путем разделения файла вы итерация на более мелкие части и управлять ими с отдельными сценариями (или отдельный пост)