С чего начать, чтобы попытаться отладить скачок и время ожидания ЦП при входе на сайт Moodle?

Извините за новичок в этом вопросе. Я веб-разработчик, хотя у меня нет большого опыта в обслуживании серверов, отладке и устранении проблем с производительностью.

У меня есть сайт Moodle (Moodle 2.2.3), работающий на сервере Apache (стек LAMP), который использует базу данных MySQL.

Недавно, когда некоторые пользователи пытаются войти в систему, они сообщают об истечении времени ожидания - они просто видят пустую страницу по истечении заданного времени. Некоторые пользователи могут войти в систему в порядке. Похоже, это определяется тем, в какие курсы записан пользователь. Например, пользователь с правами администратора, не имеющий курсов, может войти в систему.

Мне удалось увеличить значение тайм-аута в php.ini с 60 до 120 секунд и увидеть то же поведение. Используя $top, я могу видеть, что процессор, используемый www-данными, всплывает на 99% до истечения времени ожидания.

Я предполагаю, что есть длительный вызов к создаваемой базе данных или подобному.

Как я могу видеть сообщения об ошибках, зарегистрированные mysql? Как я могу увидеть сообщения об ошибках, зарегистрированных PHP? Ошибка по умолчанию (/var/log/php.log), которая определена в моем php.ini, кажется, там не существует? Как я могу заставить PHP регистрировать ошибки в этом файле, чтобы я мог видеть, что происходит?

Moodle также регистрирует ошибки в logs/error.log, но это не проливает свет на вещи.

Все и любые хорошие предложения приветствуются - спасибо!

1 ответ

Мы сделали много оптимизаций производительности Moodle, где я работал и использовал профилирование PHP Xdebug, чтобы помочь с этим. Включив профилирование, он создаст файл *.cachegrind, который затем будет читаться многими читателями - я использую QCacheGrind в Windows или KCacheGrind в Linux. После этого вы сможете точно определить функцию, которая требует времени.

Из памяти, вероятно, это объем данных курса, который он пытается загрузить, когда пользователь входит в систему. Если данных слишком много и он захватывает все данные с сервера SQL, а не только то, что необходимо, это может замедлить работу вниз совсем немного. Это также можно определить с помощью медленного журнала, как упомянуто в комментарии выше, при условии, что это SQL-запрос, который вызывает проблему производительности.

Я также определенно рекомендовал бы обновить ваш экземпляр Moodle до чего-то более нового, поскольку я знаю, что с момента выпуска Moodle 2.2.3 было перенесено множество исправлений производительности. Мы передавали их Moodle в качестве официального партнера Moodle.

Другие вопросы по тегам