当登录 Moodle 网站时,我应该从哪里开始尝试调试 CPU 峰值和超时?

当登录 Moodle 网站时,我应该从哪里开始尝试调试 CPU 峰值和超时?

对于这个问题的新手性质,我深表歉意。我是一名 Web 开发人员,但在维护服务器或调试和修复性能问题方面没有太多经验。

我有一个 Moodle 网站(Moodle 2.2.3),它在使用 MySQL 数据库的 Apache 服务器(LAMP 堆栈)上运行。

最近,某些用户尝试登录时报告超时 - 他们在给定时间后只会看到空白页。有些用户可以正常登录。这似乎取决于用户所报名的课程。例如,没有课程的管理员用户可以正常登录。

我已经能够将 php.ini 中的超时值从 60 秒延长到 120 秒,并看到相同的行为。使用 $top 我可以看到 www-data 使用的 CPU 峰值达到 99% 左右,直到超时开始。

我假设对数据库进行了一次长时间调​​用,或类似操作。

如何查看 mysql 记录的错误消息?如何查看 PHP 记录的错误消息?php.ini 中定义的默认 error_log (/var/log/php.log) 似乎不存在?如何让 PHP 将错误记录到此文件,以便查看发生了什么?

Moodle 还将错误记录到 logs/error.log 中,但这并不能说明任何问题。

欢迎所有好的建议 - 谢谢!

答案1

在我以前工作的地方,我们做了很多 Moodle 性能优化,并使用 PHP Xdebug 分析来帮助完成许多优化。通过启用分析,它将生成一个 *.cachegrind 文件,然后许多读者都可以读取该文件 - 我在 Windows 上使用 QCacheGrind,或在 Linux 上使用 KCacheGrind。然后您应该能够精确地找出耗时较长的函数。

从记忆中看,这可能是用户登录时尝试加载的课程数据量。如果数据太多,并且它从 SQL 服务器抓取所有数据而不是仅抓取必要的数据,这可能会使速度变慢很多。也可以使用上面评论中提到的慢日志来识别这一点,前提是 SQL 查询导致了性能问题。

我还强烈建议您将 Moodle 实例升级到较新的版本,因为我知道自 Moodle 2.2.3 以来,已有大量性能修复推送到上游存储库。我们过去曾作为官方 Moodle 合作伙伴将这些修复推送到 Moodle。

相关内容