我有一个网站,每天的流量相对较高,大约有 250,000 次页面浏览量。PHP 代码通常在 0.02 秒内执行,但实际响应时间在高峰时段可能会增加到几秒钟(有时超过 10 秒)。Apache 运行多达 700-800 个进程,但内存使用量仍然很低(甚至不到 8 GB 的一半),服务器负载通常也很低。
我已经将图片和资产文件移至 Amazon S3,这有很大帮助。同样重要的是,网站几乎不断上传新图片(因为人们发布新照片)。
根据这些线索,我认为这可能是磁盘或网络问题,但我该如何以及用什么工具来诊断这个问题?
答案1
可能有很多种情况,但首先从 Apache/PHP 服务器最有可能的情况开始:
- 记忆-- 如果 Apache 配置错误,它将耗尽所有 RAM 并开始使用交换空间,从而降低性能。请检查以确保交换空间未被使用(或未被大量使用)。如果是,请减少 Apache
MaxClients
或服务器上正在运行的其他程序(MySQL 等)的内存消耗。由于您说它只使用了一半,因此这可能不是问题,尽管 4GB 中的 800 个 Apache 进程只有 5MB/进程似乎非常低。 - 中央处理器-- PHP 可能非常耗费 CPU,尤其是与其他应用程序/数据库结合使用时。检查您的服务器负载和 CPU 使用率,
top
以了解您使用了多少。使用简单的监控程序(如)sar
,或更复杂的程序(如 Nagios 或 Zabbix),可以为您提供有关 CPU 负载随时间变化的更多详细信息。您可以在这里做的一件主要事情是安装和使用 PHP 操作码缓存(如 APC 或 eAccelerator)。之后,除了优化数据库/应用程序之外,您通常没有太多其他事情可做。 - 输入输出
top
-- 检查和的输出iostat
,看看你正在执行多少 IO。top 中 wa% 较高(无论是间歇性还是持续性)通常表示存在 IO 问题。如果是 IO 问题,则找出问题发生的位置(Apache、PHP、数据库、其他东西等...),因为解决方案最终取决于导致问题的原因。
我还会检查各种日志文件,查找任何明显的错误消息(系统、Apache、数据库等)。我知道我的网站出现性能问题只是因为诸如文件句柄数量对于高流量网站而言设置得太低之类的原因。