С чего начать, чтобы попытаться отладить скачок и время ожидания ЦП при входе на сайт 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.