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 выполнил очистку этой таблицы.

После этого сервер стал запускаться.

[Ссылки]

1. Vinaora Visitors Counter How to reset counter site:forum.joomla.org.
2. Reset Joomla Hits to Zero site:ostraining.com.
3. MySQL Fatal error: Allowed memory size of bytes exhausted site:stackoverflow.com.
4Joomla: ошибка при выделении памяти скриптом PHP.
5Joomla: как восстановить отдельные таблицы SQL.