我目前运营着一个网站,每天的点击量约为 15,000-20,000。我们目前运营着一个非常活跃的论坛,该论坛使用 Vbulletin 软件托管。我们有 450 万个帖子、80,000 个主题,大约有 11,000 名成员,其中近三分之一一直处于活跃状态。现在,我运行的是 Intel Xeon 四核 (2.13Ghz),4GB RAM,Centos 5.5,并在机器上运行 DirectAdmin 来管理它。我还运行当前稳定版本的 Apache、MySQL 和 php。这是唯一托管在这台机器上的站点。现在,在一天中的随机时间,有时当服务器繁忙时,服务器负载可能会达到 20,但当我们只有 200 个活跃用户时也会发生这种情况。我不明白是什么导致了这些问题。有时我得到的页面可以在 0.2 秒内生成,而其他时候则需要 5-8 秒。我已经定制了 my.cnf 文件但没有任何帮助,我不知道还能去哪里,所以如果有人有任何建议请告诉我。
答案1
您是否有日志记录:
遗憾的是,许多人经常忘记查看日志来了解他们的问题。
我将从一些基本的监控、日志记录和诊断工具集开始。
- 顶部
- 顶部 http://mtop.sourceforge.net
- 创新 http://innotop.sourceforge.net
- MySQL 进程列表/mysqladmin proc
- MySQLTunerhttp://mysqltuner.pl
- MySQLidx检查: http://hackmysql.com/scripts/mysqlidxchk-1.1 (非常适合日志解析)
- MySQLSLA——MySQL 的状态报告:http://hackmysql.com/scripts/mysqlsla
- MySQLReport - http://hackmysql.com/scripts/mysqlreport(一款实用工具,可将 MySQL 的 SHOW STATUS 值解释为有关 MySQL 运行情况的详细报告)
- IOTOP/特区
- 您确定所有流量都是有效流量吗?可能需要仔细检查日志并确保流量有效。
- 所有连接 - 是否来自同一个 IP 地址?(比平时更多)使用它来检查有多少个连接来自 1 个 IP:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
- 你也可以使用 Mod_Evasive
- 根据您的发现 - 将 MySQL 移至另一台服务器
- 考虑负载均衡器——或者 Nginx,或者从 Apache 网络托管解决方案转移到另一个解决方案,如 Cherokee、Nginx 等……
如果这篇文章对你有帮助 - 为什么不投票呢:-) 祝福
答案2
除了 Glenn 的优秀清单之外,还有一些其他事项:
- 检查“top”和“free”以确保您没有使用任何交换内存,因为这会降低您的性能。如果您发现您开始使用交换,那么请减少 Apache(主要减少 MaxClients)和 MySQL(所有各种缓存/缓冲区选项)的内存要求。
- 如果论坛是 PHP,请确保您正在运行像 eAccelerator 或 APC 这样的操作码缓存。
- 考虑使用 ab 或 siege 等工具测试网站的性能。这将为您提供服务器的当前功能,并允许您测试特定优化的效果。
- 使用 top 查看哪些应用程序在高峰时段占用了 CPU。这将让您对从哪里开始优化有一个基本的了解。
- 如果您要提供大量静态内容,请考虑使用更轻量的 Web 服务器(例如 lighttpd 或 nginx)。
- 检查 MySQL 中的查询日志统计信息,确保它已启用并运行良好。如果您收到大量“LOW MEM Prunes”,请考虑为缓存使用更多内存(如果可以)。
- 如果为 MySQL 而不是 Apache 分配更多内存,则可能会获得最佳性能。理想情况下,您希望活动记录集能够完全保存在 RAM 中,从而最大限度地减少磁盘访问。这不是数据库的总大小,只是每天通常读取的所有记录的大小。在 4GB 的机器上,我会确保 MySQL 总共至少获得 1GB。
- 请注意,流量通常会激增,您的服务器不仅需要处理平均流量率,还需要处理流量峰值。不要陷入这样的境地:您的设置只能处理平均流量,但在流量高峰/激增时开始落后。然后,您将处于服务器努力跟上但越来越过载的情况。
仅从我自己的经验来看,只要配置良好并进行一些优化调整,您的服务器“应该”足以支持每天 20k 次浏览的网站。如果您通过一些工作理论上可以获得 10 倍或更多的浏览量,我不会感到惊讶。