如果我有更多的 CPU,Apache2 是否会运行得更快?

如果我有更多的 CPU,Apache2 是否会运行得更快?

我有一台云服务器,具有:5120 RAM 和 4.6Ghz

我的问题是:如果我增加更多 CPU(11.5 Ghz),页面加载时间会更长吗?我的意思是,这总是渐进的吗?更多 CPU = 更快的页面加载?如果不是,它是如何工作的,我如何了解更多相关信息?

更新: Symcbean 的回答非常清楚。但仍然有一些我不明白的地方(我在 Google 上找到的答案中,大多数人不明白)我试图将其放在一个元句中:
假设我有一桶水(水桶 = PHP 进程,带有缓存等)我想将水桶倒入漏斗中。(漏斗末端 = 服务器速度,漏斗末端越大,水流过的速度越快)
如果我的漏斗末端是 0.5 英寸,水流过的速度会很慢。如果我的漏斗末端是 1 英寸,水流过的速度会更快。但如果漏斗末端是(假设)10 英寸,那么无论我是 10 英寸还是 20 英寸,水流过的速度都是一样的。
因此,对于这个元句,我的意思是:我怎么知道我使用了 100% 的容量,我怎么知道我不需要更多容量……?

附言:如果有人能解释一下最大值是多少、它实际上是如何工作的或者我如何才能找到它,我将不胜感激?

PPS:这是我运行“top”时的输出

top - 23:06:18 up 54 days,  6:08,  1 user,  load average: 0.51, 0.43, 0.47
Tasks: 107 total,   2 running, 105 sleeping,   0 stopped,   0 zombie
Cpu(s): 28.1%us,  1.5%sy,  0.0%ni, 70.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
Mem:   4966748k total,  4493968k used,   472780k free,   241436k buffers
Swap:  4194300k total,   123252k used,  4071048k free,  2836028k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                       
16432 root      20   0 1115m 283m  30m R   95  5.8   1:11.39 php                                                                                                                                            
16422 www-data  20   0  927m  45m  21m S   18  0.9   0:00.53 apache2                                                                                                                                        
20270 mysql     20   0 2327m 330m 5500 S    7  6.8 474:19.11 mysqld                                                                                                                                         
  617 n2        20   0 14268 1140  488 S    1  0.0 182:58.64 n2txd                                                                                                                                          
30212 root      20   0     0    0    0 S    1  0.0  24:50.48 flush-202:1                                                                                                                                    
26848 root      20   0 99424 1108  856 S    0  0.0   2:47.63 sendmail-mta                                                                                                                                   
    1 root      20   0 24188 1556  872 S    0  0.0   0:09.09 init                                                                                                                                           
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd                                                                                                                                       
    3 root      20   0     0    0    0 S    0  0.0   0:48.36 ksoftirqd/0                                                                                                                                    
    4 root      20   0     0    0    0 S    0  0.0   1:27.21 kworker/0:0                                                                                                                                    
    5 root      20   0     0    0    0 S    0  0.0   0:00.05 kworker/u:0                                                                                                                                    
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0                                                                                                                                    
    7 root      RT   0     0    0    0 S    0  0.0   0:26.69 watchdog/0                                                                                                                                     
    8 root      RT   0     0    0    0 S    0  0.0  21841:40 migration/1                                                                                                                                    
    9 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/1:0                                                                                                                                    
   10 root      20   0     0    0    0 S    0  0.0   0:56.84 ksoftirqd/1                                                                                                                                    
   11 root      RT   0     0    0    0 S    0  0.0   0:23.78 watchdog/1                                                                                                                                     
   12 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/2                                                                                                                                    
   13 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/2:0                                                                                                                                    
   14 root      20   0     0    0    0 S    0  0.0   0:48.05 ksoftirqd/2                                                                                                                                    
   15 root      RT   0     0    0    0 S    0  0.0   0:19.11 watchdog/2                                                                                                                                     
   16 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/3                                                                                                                                    
   17 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/3:0                                                                                                                                    
   18 root      20   0     0    0    0 S    0  0.0   0:40.08 ksoftirqd/3                                                                                                                                    
   19 root      RT   0     0    0    0 S    0  0.0   0:19.24 watchdog/3                                                                                                                                     
   20 root       0 -20     0    0    0 S    0  0.0   0:00.00 cpuset                                                                                                                                         
   21 root       0 -20     0    0    0 S    0  0.0   0:00.00 khelper                                                                                                                                        
   22 root      20   0     0    0    0 S    0  0.0   0:00.00 kdevtmpfs                                                                                                                                      
   23 root       0 -20     0    0    0 S    0  0.0   0:00.00 netns                                                                                                                                          
   24 root      20   0     0    0    0 S    0  0.0   0:00.00 kworker/u:1                                                                                                                                    
   25 root      20   0     0    0    0 S    0  0.0   0:00.00 xenwatch                                                                                                                                       
   26 root      20   0     0    0    0 S    0  0.0   0:00.00 xenbus                                                                                                                                         
   27 root      20   0     0    0    0 S    0  0.0   0:22.29 sync_supers                                                                                                                                    
   28 root      20   0     0    0    0 S    0  0.0   0:00.42 bdi-default                                                                                                                                    
   29 root       0 -20     0    0    0 S    0  0.0   0:00.00 kintegrityd                                                                                                                                    
   30 root       0 -20     0    0    0 S    0  0.0   0:00.00 kblockd                                                                                                                                        
   31 root      20   0     0    0    0 S    0  0.0   1:57.23 kworker/2:1                                                                                                                                    
   32 root       0 -20     0    0    0 S    0  0.0   0:00.00 ata_sff                                                                                                                                        
   33 root      20   0     0    0    0 S    0  0.0   0:00.00 khubd                                                                                                                                          
   34 root       0 -20     0    0    0 S    0  0.0   0:00.00 md                                                                                                                                             
   36 root      20   0     0    0    0 S    0  0.0   0:01.45 khungtaskd                                                                                                                                     
   37 root      20   0     0    0    0 S    0  0.0   0:29.28 kswapd0                                                                                                                                        
   38 root      25   5     0    0    0 S    0  0.0   0:00.00 ksmd                                                                                                                                           
   39 root      20   0     0    0    0 S    0  0.0   0:00.00 fsnotify_mark                                                                                                                                  
   40 root      20   0     0    0    0 S    0  0.0   0:00.00 ecryptfs-kthrea                                                                                                                                
   41 root       0 -20     0    0    0 S    0  0.0   0:00.00 crypto                                                                                                                                         
   49 root       0 -20     0    0    0 S    0  0.0   0:00.00 kthrotld                                                                                                                                          50 root      20   0     0    0    0 S    0  0.0   0:00.00 khvcd                                                                                                                                             51 root      20   0     0    0    0 S    0  0.0   1:19.07 kworker/3:1                                                                                                                                       70 root       0 -20     0    0    0 S    0  0.0   0:00.00 devfreq_wq                                                                                                                                        71 root      20   0     0    0    0 S    0  0.0   1:03.05 kworker/0:1                                                                                                                                      190 root      20   0     0    0    0 S    0  0.0   1:31.64 kworker/1:1                                                                                                                                      193 root      20   0     0    0    0 S    0  0.0   2:52.19 jbd2/xvda1-8        

答案1

不确定 Shane 在你的 top 输出中在哪里看到 4 个 CPU。当然不止一个。但是你的平均负载显示从未使用过超过一半的 CPU。因此添加更多 CPU 不会使其更快。

页面响应时间与 PHP 执行时间相差甚远。通常,页面加载时间约为生成 HTML 时间的 6-10 倍(假设 PHP 相对高效)——差异主要是由于网络层和浏览器层发生的事情。工具如下伊斯洛网页测试将有助于提高前端性能。我建议买一本关于这个主题的好书——比如这个。有很多关于网络性能在这里以及关于MySQL 性能

诸如 top、load average、cpu usage、free、vmstat 等指标可以很好地告诉您服务器端性能受到怎样的限制 - 但如上所述,这应该只是页面生命周期的一小部分。从您提供的快照来看,硬件负担并不重(可能存在 I/O 瓶颈,但从这些指标中很难看出)。

如果您有理由怀疑您的 PHP 代码相当慢,那么请开始记录和分析您的请求数据。您的 PHP 请求需要多长时间才能生成?您的页面加载时间是多少?

从您显示的顶部输出中,确实有一件事引人注目,那就是只有一个 PHP 实例可见,只有一个 Apache 实例。Apache 是如何配置的?哪个 MPM?它如何连接到 PHP?如果您使用的是 CGI,那么通过切换到 PHP-fpm 或 mod_php 应该会获得很大的改进。您使用的是操作码缓存

您的 mysqld 占用了相当多的 CPU 周期 - 您可能需要开始分析查询日志并进行调整。尝试运行mysqltuner反对你的例子。

我意识到我在这里问了很多问题,但“如何让我的网站运行得更快”这个问题的解决方案可以写成一本厚厚的书。我需要大约 2 天的工作来让服务器正确运行,以捕获数据并全面分析其性能 - 并且至少需要 5 天的时间进行分析 - 而这还不是在开始寻找问题的解决方案之前 - 也就是说,您不太可能在 Stack Overflow 上得到具体的答案(我只是想为您指明提出正确问题的方向)。

答案2

看起来 PHP 是你的 CPU 瓶颈,而不是 Apache。

您似乎有 4 个 CPU 核心,但 PHP 进程只在其中一个上运行;根据您的配置方式,PHP 可能不会将所有可用的 CPU 核心用于不同的请求。在负载处于该状态时,有多少请求正在处理?

如果 PHP 仅运行单个线程,则需要将其配置为在不同的核心上运行不同的请求,以利用现有容量。

如果 PHP 当时仅执行单个请求,并且该请求返回的速度仍然太慢,那么更多的核心也无济于事,您需要进行一些优化和缓存。

相关内容