Joomla: Fatal error Allowed memory size of ... bytes exhausted
Добавил(а) microsin
В этой статье описано несколько случаев решения проблемы с этой ошибкой, с которыми мне пришлось столкнуться.
[131007]
Joomla: ошибка при выделении памяти скриптом PHP. Проблема была решена настройкой опций PHP, подробнее см. [4].
[170914]
Проблема при входе на главную страницу сайта, выдается сообщение об ошибке:
Fatal error: Allowed memory size of 209715200 bytes exhausted
(tried to allocate 32 bytes) in /var/www/имя_пользователя/data/
www/домен.com/libraries/joomla/database/database/mysql.php on line 462
Проблема возникала, когда заходил на сайт как пользователь, которому разрешен просмотр статистики модуля Vinaora Visitors Counter (на главной странице в должна показываться статистика посещений). Если же в админке запретить модуль Vinaora Visitors Counter (Расширения -> Модули -> Vinaora Visitors Counter -> убрать зеленую галочку в столбце "Включен"), то ошибка исчезает.
Перезагрузка сервера не помогла, и начал искать решение проблемы в Интернете [1, 2, 3]. Сначала попробовал сбросить статистику Vinaora Visitors Counter:
• Совет [1], который предлагал установить начальное значение счетчика (Расширения -> Модули -> Vinaora Visitors Counter -> Параметры модуля -> Counter Initial Value) не помог. Пробовал -1, 1 (изначально стояло 0), не помогло.
• Совет [1], который предлагал сбросить таблицу -- vvisitcounter, не помог, потому что я не нашел такой таблицы в базе данных.
• Совет [2], который предлагал сбросить статистику выполнением SQL-запроса update -- content set hits = 0, не помог. Запрос успешно выполнился в phpMyAdmin, но ошибка осталась.
На других ссылках [3] предлагалось увеличить лимит памяти для запросов mySQL (изменение параметра memory_limit). Но я не стал так делать, потому что это временное решение, не устраняющее проблему надолго.
Решение проблемы. В базе данных нашел таблицу -- vvcounter_logs - по имени можно было догадаться, что она возможно относится к Vinaora Visitors Counter. По содержимому таблицы понял, что там действительно накапливается статистика. С помощью phpMyAdmin очистил содержимое таблицы -- vvcounter_logs (удалил оттуда все записи).
Проблема устранилась, но к сожалению потерлась вся статистика посещений статей, и сбросились счетчики Vinaora Visitors Counter. В итоге после повторного возникновения ошибки, когда снова счетчики переполнились, мне это надоело, и этот плагин я запретил.
[220630]
Из-за атаки на сервер и его перегрузки возникла проблема с не закрытой таблицей -- session. В результате сервер не работал и при любой попытке доступа к нему выдавал ошибку:
jtablesession::Store Failed
DB function failed with error number 144
Table './имяБазыДанных/jos_session' is marked as crashed and last (automatic?) repair failed
SQL=INSERT INTO -- session` ( `session_id`,`time`,`username`,`gid`,`guest`,`client_id` )
VALUES ( 'c94010ecf4ded867ca4b0a2ebdd4566d','1656552081','','0','1','0' )
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
in /var/тут_полный_путь_до_корня_файлов_сервера/libraries/joomla/error/exception.php on line 117
Пепрезапуск сервера, ограничение к нему доступа ошибку не устраняли. После диагностики оказалось, что таблица -- session не закрыта и фактически испорчена. Решить проблему удалось обнулением (очисткой) содержимого этой таблицы. Ниже во врезке описывается, как я решал эту проблему.
1. Зашел под админом, остановил Apache, затем остановил mysql.
/etc/init.d/apache2 stop
/etc/init.d/mysql stop
2. Чтобы никто не мешал работать, запретил через iptables доступ к сайту, за исключением моего IP-адреса (a.b.c.d). Добавлять правила нужно именно в таком порядке:
iptables -I INPUT -s a.b.c.d -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
3. Запустил mysql, увидел ошибку при его запуске:
/etc/init.d/mysql start
Checking for corrupt, not cleanly closed and upgrade needing tables..
Поискал в Интернете рецепты, что надо делать в таких случаях. Нашел, что нужно проверить базы данных командами mysqlcheck и mysql_upgrade. Однако эти команды никаких ошибок не показали, и устранить проблему не удалось.
mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
mysql.columns_priv OK
mysql.db OK
...
имябазы --.xmap_sitemap OK
mysql_upgrade --force -u root -p
Looking for 'mysql' in: /usr/bin/mysql
Looking for 'mysqlcheck' in: /usr/bin/mysqlcheck
Running 'mysqlcheck'...
mysql.columns_priv OK
...
имябазы --.xmap_sitemap OK
Running 'mysql_fix_privilege_tables'...
OK
4. Запустил Apache (mysql уже работает).
/etc/init.d/apache2 start
5. Попробовал подключиться к сайту, но ошибка осталась. Запустил phpmyadmin. Просмотром таблиц увидел, что таблица jos_session в ненормальном состоянии - стиатус "используется", и информация по ней не отображается. Средствами phpmyadmin выполнил очистку этой таблицы.