На моем веб-сайте joomla появилась следующая ошибка
Неустранимая ошибка: допустимый размер памяти 1073741824 байт исчерпан (пытался выделить 78 байт)
Я знаю, что мы можем увеличить ограничение памяти с помощью ini_set
, но я считаю, что это не правильный способ решить эту проблему. Хотя, если я установил ограничение на неограниченную память (-1), я получу внутреннюю ошибку сервера . Я совершенно не осведомлен о недавних действиях на этом сайте, поскольку я недавно назначен на эту задачу. Я попытался отключить некоторые плагины и модули с помощью DB. Что я сделал, просто _modules
записи из _modules
и _plugins
с убывающим порядком id
и измените publish
на 0
. Но ничего не работает. Я получаю ту же ошибку (Fatal error: Allowed memory …). Я попытался открыть страницу администрирования, которая также не загружается. Просто показ пустой страницы.
Пожалуйста, помогите мне исправить это. Я новичок в joomla
Я не верю, что вы получите краткий ответ на этот вопрос, поскольку он слишком широк. Похоже, у вас утечка памяти. Видеть:
К сожалению, найти причину утечки памяти – это простая задача. Две приведенные выше ссылки содержат несколько полезных советов, а именно: вызовы memory_get_usage
а также расширение Xdebug .
Даже если вы не были новичком в Joomla и более знакомы с базой кода, вероятно, это не облегчило бы решение этой проблемы.
Давайте начнем с того, что вам сообщает это сообщение.
PHP говорит, что я успешно присвоил GIGABYTE памяти для этого кода для запуска, но теперь мне нужно выделить еще 78 байт, но я не могу, потому что я достиг своего предела.
Часть этого утверждения, которое должно выкрикивать на вас, – это уже выделенное GIGABYTE памяти для этой обработки. Это просто смешно.
Либо, как было предложено @mistermartin, какой-то код вызывает утечку памяти или у вас есть какой-то код в неудавшемся процессе, который потребляет смехотворно большие объемы памяти
Это сообщение обычно связано с трассировкой стека, в которой вы указываете, в какой части кода произошла эта ошибка, и какой фрагмент кода назывался так и т. Д. И т. Д.
Вопрос: Всегда ли это происходит в одном и том же коде? Если так, то, где вы начинаете искать.
Я бы начал, просматривая весь код в этой трассе стека, а не только конкретный сценарий, который фактически сломал верблюдов назад, так сказать. Проработайте свой путь назад через весь код, который был выполнен, ища что-то, что может выделить hugh количества памяти, массивы – это хорошее место для начала, но это не единственная возможность.
Я лично скопировал бы сайт (в комплекте с базой данных) в тестовую среду, в которой вы можете либо использовать достойный отладчик, чтобы следить за кодом через выполнение нарушившего кода. Если вы не можете настроить отладчик, то, по крайней мере, в тестовой среде вы можете добавить код отладки, чтобы сообщить вам, где и когда память начинает потребляться по этой мерзкой цене.
Если вы ищете способ устранить эту проблему, выполните следующие действия. Но не рекомендуется использовать его, поскольку он не решает проблему, связанную с вашей программой (кодом). Вы все еще должны проверить, почему память исчерпана.
ini_set('memory_limit', '-1'); // This will take unlimited memory usage of server
Вышеуказанный метод не работает для вас, как вы говорите.
Change the line in php.ini If your line shows 32M try 128M. memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)
Как отладить код
Ваша программа потребляет память, чем она нужна. Это может часто возникать в PHP, если у вас есть цикл, который закончился из-за контроля, и вы создаете объекты или добавляете массивы на каждом проходе цикла. Проверьте наличие бесконечных циклов.
Как найти, какой PHP-скрипт утечка памяти?
Я не очень хорошо знаком с Joomla, но проверял, что он перенаправляет трафик через файл index.php, похожий на многие другие фреймворки и приложения. Достойный первый шаг к поиску ГДЕ, где происходит утечка, будет добавлено следующее в файл index.php .:
function shutdown() { $aError = error_get_last(); if ($aError["type"] == E_ERROR ) { openlog("Fatal Error Shutdown Log: ", LOG_ODELAY, LOG_USER); syslog(LOG_ERR, 'Message: ' . $aError['message'] . PHP_EOL); syslog(LOG_ERR, "File: " . $aError['file'] . PHP_EOL ); syslog(LOG_ERR, "Line: " . $aError['line'] . PHP_EOL ); } } register_shutdown_function( 'shutdown' );
Проверьте свой syslog на строку «Fatal Error Shutdown Log:», и он должен указать вам конкретное место, в котором происходит утечка памяти. Если у Joomla есть более подходящее место для размещения этого кода, пойдите для него. В теории функции выключения будут выполняться независимо от того, что. все это делает log только фатальные ошибки для вашего syslog. Ошибки памяти – это фатальные ошибки. Удачи.
Я столкнулся с аналогичной проблемой со смехотворными длинными строками SQL (унаследованный код был взят массивным массивом в состояние IN). Запишите ваши SQL-запросы и проверьте, что они не превышают max_allowed_packet (1GB)
http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
У меня тоже была эта проблема – для моей / администратор / папки. Ни один из параметров конфигурации или ограничения на память в php.ini не исправил проблему, которую я отслеживал, чтобы подключиться к тому факту, что я изменил имя моей / администратор / папку, чтобы сделать ее более трудной для хакеров. Не должно было иметь значения, если код использовал относительные пути, но, по-видимому, какой-то код этого не сделал. Теперь я переименую папку обратно по умолчанию, чтобы использовать функции администратора, а затем вернуться к случайному имени, чтобы дать хакерам лучший вызов. Итак, вы изменили имена папок? Я надеюсь, что это помогает кому-то.
Вы можете начать с включения отладки Joomla. На Joomla 3 он находится в системе backend> global configuration> system> debug system
Затем на переднем конце вашего сайта ваш шаблон должен предоставить некоторую информацию об отладке.
Я бы начал с поиска подсказок в разделах «Информация о профиле и использовании памяти»
Удачи!
редактировать
По общему признанию, это немного длинный снимок, но, возможно, на сайте есть некоторые резервные копии Akeeba, которые вы могли бы использовать. Найдите некоторые файлы Akeeba .jpa, возможно, в site_root / administrator / components / com_akeeba / backup /
Если есть, я бы начал с восстановления их на другой машине, чтобы вы могли исключить любые ошибки, связанные с php сервера.
Может быть, тебе повезет.