我有一台专用服务器,它有 12GB 的 RAM 和双 Nahalem 四核处理器。我的网站通常一次只有大约 50-100 个用户在线(不过,一旦我对服务器进行了优化,我计划进行广告宣传,并估计这个数字接近 250,这台服务器应该仍然很容易处理)。出于某种原因,即使这些数字很低,网站似乎也经常滞后,几乎没有服务器负载。
我一直在使用 mysqltuner.pl 尝试在 my.cnf 中更好地设置某些内容。在此用户级别下,站点每秒运行大约 200 个查询,读取/写入比例约为 50/50。至于 Apache 设置,我完全不知道该更改什么。
我主要只是在寻找一些更新方面的一般建议,以便更好地优化服务器的性能,让页面真正快速加载。值得注意的是,直到几天前,当平均在线人数增加了 3-4 倍时,页面加载速度才相当快(尽管服务器负载并没有真正增加)。
如果重要的话,这是一个 CentOS 5.4 服务器。
答案1
您所谈论的数字非常小,并且正如您所观察到的,在这段时间内负载并没有改变,所以我不认为这是直接调整 apache 或 mysql 的问题。
根据我追踪此类问题的经验,它几乎总是与 SQL 有关。我会隔离页面的哪一部分消耗了所有时间。在有问题的页面中插入计时器调用,并将数据存储在您可以查看的地方(如果没有其他内容,则将其吐出到 stderr 和 apache 的错误日志中)。除非您知道导致速度变慢的确切代码部分,否则您只能猜测。
一些可能性:
- 对一个已经变得非常大并且现在很慢的表的查询(缺少索引?需要修剪?)
- 从未修剪过且变得非常大的会话表
- 一个非常微妙的损坏(运行并优化所有 mysql 数据库来修复)
- 每次页面加载时都会进行大量计算的丑陋查询,可以通过将结果保存在缓存中来进行优化。
我也会回顾一下基础知识,看看你是否能找出“几天前”发生了什么变化。页面被修改了吗?升级了吗?
另一件需要检查的事情是 I/O(iostat),看看您是否受到 I/O 限制,尽管通常您会在负载中看到相关症状。
答案2
嗯,看起来主要问题是 MaxClients 设置得太低了(100)。我将其提高到 2000,从那时起一切都很顺利。感谢 pauska 指出这一点。