我工作的一个网站出现了一个相当烦人的问题,我很难说清这个问题出在 PHP、Apache 还是 MySQL。
系统设置:云托管解决方案(去年从专用服务器迁移而来),包含两个虚拟机:Apache VM 和 MySQL VM。Apache VM 有 1 个核心(2GHz)、4GB RAM,MySQL VM 有两个相同的核心、8GB RAM。由于其性质,该网站的流量并不大。
问题:查看帐户报告时,有时页面会超时并无法加载。该页面运行大量查询,并返回大量数据(大部分为文本,但仍然小于 1MB),因此我首先想到的是 MySQL 存在问题。我在这些超时期间监控了服务器,没有发现任何异常。我还单独运行了查询(直接运行到数据库并通过测试页面运行),它们运行得相当快。
Apache 也没有出现任何异常,我从未遇到过 PHP 超时或内存错误。我也在本地系统上运行过它,没有遇到同样的问题(尽管这些系统显然没有竞争对手,不像实时系统)。
最奇怪的是,当我在一个浏览器(例如 Firefox)上遇到此问题时,我无法通过 Firefox 加载网站上的任何其他页面,但我可以通过另一个浏览器(例如 Chrome)加载。这是否意味着服务器和该会话存在某种连接或队列问题?
有人能告诉我是什么原因导致这种情况吗?或者我可以提供更多信息来帮助你吗?
谢谢
答案1
有两件事值得尝试。
首先,打开并监控 mysql 慢查询日志。此示例将慢查询时间设置为 5 秒,您可以尝试此操作,直到获得有用的信息。这通常是 /etc/my.cnf,[mysqld] 下有以下几行:
log_slow_queries = /var/log/mysql-slow.log
long_query_time = 5
log-queries-not-using-indexes
接下来,当您在 Firefox 中遇到问题时,请清除缓存。如果您使用的是 Chrome,请尝试使用隐身窗口进行测试,看看是否有区别。
答案2
这里有多个地方出了问题 - 并且可能有多个原因,其中最主要的是性能问题。
责怪 PHP、MySQL 和 Apache 并不是解决问题的建设性方法。
Apache 也没有出现任何异常,我从未遇到过 PHP 超时或内存错误
什么做Apache 会显示这些请求吗?您是否确认 PHP 正在记录错误?您的应用程序日志记录如何?
当我在一个浏览器(例如 Firefox)上遇到此问题时,我无法通过 Firefox 加载网站上的任何其他页面,但我可以通过另一个浏览器(例如 Chrome)加载。
您没有提供任何有关浏览器/网络上发生的情况的详细信息。您是否仅演示了 Firefox 失败而 Chrome 成功?如果是这样,您是否尝试过在 Firefox 中启用 SPDY?您是否尝试过使用数据包监视器跟踪请求以查看哪一端正在关闭连接/连接是如何关闭的?
答案3
看看 New Relicnewrelic.com。它就是为此而专门制作的。注册后,您可以免费试用 Pro(每台服务器 150 美元)。它允许您监控 mysql、php、apache 和整个系统。它向您显示可用于调试系统的图表和其他有用功能。它可以显示应用程序中的瓶颈所在。
我在我的几台服务器上使用它,它在监控每台服务器的性能方面效果很好。