Скорее всего эта проблема связана с БД. Вероятно есть SQL запросы, которые плохо оптимизированы под эту задачу. В этом случае тогда нужно оптимизировать запросы, возможно еще нужно создать индексы, возможно еще произвести тюнинг MySQL, увеличить некоторые буферы и другие настройки.
Для оптимизации нужно:
1. Нужно включить логирование медленных запросов. Много раз использовал эту методику для выявления узких запросов.
После уже можно понять какие php файлы являются проблемными, и их исправить.
Логирование медленных запросов включается так в разделе
[mysqld]
в файле my.cnf:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
Анализ лог файла делается так:
mysqldumpslow -s c -t 20 slow.log.1 > results.log
2. Также может помочь утилита
mysqltuner.pl
. Многократно ее использовал для определения проблемных запросов, индексов, которые нужно добавить в таблицы, и других проблем с MySQL/MariaDB.
3. Можно вручную провести анализ запросов при помощи
EXPLAIN
.
4. Можно сделать замеры выполнения кода, как вручную, через логирование блоков кода, так и через
XDebug
. И выявить долго выполняющиеся блоки, после этого оптимизировать их.
5. Кроме того нужно посмотреть процессы на сервере, которые занимают много процессорного времени и памяти, это можно сделать через
atop
или другие подобные утилиты. Можно на основании этого оптимизировать программный код и службы.
6. То что MySQL и сам сервер находятся на виртуальной машине это тормозит работу сервера, виртуальные ноды в любом случае работают медленнее, чем физический сервер. Рекомендую перенести это все на физический сервер с NVMe дисками, с современным процессором и ОЗУ не менее 128 Гб.
Могу помочь настроить логирование, анализ этого и выявить узкие места.