你好,我的服务器是 2x 四核,8GB 内存,它为中型网站运行 LAMP(每天打开 120 个页面)我安装了 munin 来监控 CPU,这是图表: http://img834.imageshack.us/img834/3483/downloadv.png 为什么它只使用了 8 个核心中的 2 个?也许 munin 没有很好地计算 CPU 负载?
有没有办法强制多任务 ip php mysql apache?我已经在 apache 中使用 MPM。
谢谢西蒙
答案1
首先,请放心,似乎没有任何硬件或操作系统问题:您的图形显示系统正确确认了 8 个可用 CPU 的存在;因此,在 BIOS 或 Linux 内核中无需进行任何调整。
至于您的应用程序没有充分利用所有 CPU 能力的可能原因,基本上有以下三个:
- 您当前的工作量并不需要那么多电力。
- 您的应用程序不允许太多(如果有的话)并行化。
- 您的服务器(MySQL 和 Apache)配置为仅使用单个 CPU。
第三个选项是最令人难以置信的,因为默认情况下,如果可以的话,MySQL 和 Apache 非常乐意使用多线程;所以让我们关注另外两个。
在当前负载下,服务器的响应时间如何?感觉“慢”,还是响应迅速?要排除这种情况,您可以运行基准测试以增加服务器负载吗?如果 CPU 使用率在负载增加的情况下上升,则说明您的服务器运行良好,只是目前不需要那么多 CPU 能力。但如果没有,并且服务器开始响应不佳(或者已经出现这种情况),那么您应该看看选项 2。
关于这一点:Apache 本质上是并行的,因为它“只是”处理和提供网页;所以罪魁祸首可能是 MySQL。你对它运行了什么样的查询?你只是在做 SELECT,还是(可能大量)插入、更新或删除数据?此外,你使用哪种事务和锁?根据所有这些,查询很可能只是串行执行,因为服务器无法正确地并行化它们。此外,同样的事情可能发生,因为 MySQL 正在等待磁盘 I/O,或者因为它没有足够的可用内存。你应该对你的 MySQL 运行一些分析工具,看看它对此有什么看法。
答案2
每天打开 120 页对于这个强大的系统来说微不足道。你根本无法将一个核心发挥到极致,更不用说 8 个了。
你似乎正在寻找一个问题,你试图找出一些运行缓慢的页面吗?
页面视图通常只在一个核心上作为单个进程/任务/线程运行。您的数据库将在另一个核心上运行,但是,如果它要执行的处理很复杂,则无论有多少个核心,它都可能需要时间。
90% 的时间页面速度缓慢是由于数据库中缺少索引造成的。
答案3
Apache + PHP + MySQL 应该会自动利用所有资源,无需进一步调整。如果你只看顶部命令并检查 CPU 使用情况?
而且,你确定 CPU 使用率应该高于这个数字吗?一台 8 核机器的性能非常强大,800% 的 CPU 利用率意味着流量或计算量很大。
答案4
MySQL 查询缓存的使用可以将操作限制在单个线程中。检查是否使用它,如果不需要,请禁用它。查询缓存将降低读取操作的服务器负载,但如果您进行大量写入和/或服务器必须扩展到大量负载,它将成为负担。每天 120 次点击不算什么。