如果我有更多的CPU,Apache2运行速度会更快吗?

我有一个云服务器,具有:5120内存和4.6Ghz

我的问题是:如果我添加更多的CPU,(11.5 Ghz)页面的加载时间会更高? 我的意思是,这总是渐进的? 更多的CPU =更快的页面加载? 如果不是,它是如何工作的,我怎样才能了解更多?

更新: Symcbean的答案非常清楚。 但是还有一些我不明白的地方(我在Google上发现的东西,更多的人没有)我试图把它放在一个metafore:
比方说,我有一个水桶(水桶= PHP过程,caching等)我想清空桶进入漏斗。 (漏斗的末端=服务器的速度,漏斗的末端多大,水stream越快)
如果我有一个0.5英寸的漏斗端,它通过缓慢。 如果我有一英寸,它会更快。 但是,如果漏斗端(比方说)10英寸,如果我有10英寸或20英寸,没有关系,水以相同的速度穿过它。
所以这个metafore我的意思是; 我怎么知道我正在使用100%的容量,我怎么知道我不需要更多…?

PS:如果有人能解释,最大值是多less,以及这个实际上是如何工作,或者我怎么能find这个,我真的很感激。

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 

不知道Shane在顶级输出中看到4个cpu。 当然有不止一个。 然而,你的平均负载表明,从来没有使用超过一半的CPU。 因此,增加更多的CPU不会更快。

页面响应时间从PHP执行时间非常多。 通常,页面加载时间将在生成HTML的时间长度的6-10倍的范围内(假设PHP是相对高效的) – 差异主要是由于在networking层和浏览器上发生的事情。 像yslow和webpagetest这样的工具将有助于改善前端性能。 我build议在这个主题上写一本好书。 这里有很多关于networking性能的好post,以及关于MySQL性能的信息 。

诸如top,load average,cpu使用率,free,vmstat等等都可以很好地告诉你服务器端的性能如何受到限制 – 但是如上所述,这应该只是页面生命周期故事中的一小部分。 从您提供的快照中,硬件不是过度征税(可能有I / O瓶颈,但从这些指标很难看出)。

如果您有理由怀疑您的PHP代码太慢,请开始logging并分析您的请求数据。 您的PHP请求需要多长时间才能生成? 什么是您的网页加载时间?

从顶层输出中显示出来的一件事情是,只有一个PHP实例可见,而且只有一个Apache实例。 Apache如何configuration? 哪个MPM? 它如何连接到PHP? 如果你正在使用CGI,那么你应该通过切换到PHP-fpm或mod_php来得到很大的改进。 你使用操作码caching吗?

你的mysqld占用了大量的CPU周期 – 你可能要开始分析你的查询日志并调整它。 尝试对您的实例运行mysqltuner 。

我意识到我在这里问了很多问题,但“如何让我的网站更快”的解决scheme将填补一个非常大的书。 我需要花费大约2天的时间才能find一台服务器,以便捕获数据以充分分析数据的性能,并且至less需要5天的时间才能进行分析,而在开始寻找解决scheme之前,不太可能得到一个特定的答案在这里堆栈溢出(我只是想指出你的方向问正确的问题)。

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

你似乎有4个CPU核心,但PHP进程只在其中一个运行; 取决于configuration的方式,PHP可能不会将所有可用的CPU内核用于不同的请求。 当负载在那个状态时,有多less请求被处理?

如果PHP只运行一个线程,则需要将其configuration为在不同的内核上运行不同的请求以利用您现有的容量。

如果PHP当时只执行一个请求,并且这个请求仍然返回得太慢,那么更多的内核不会帮助你,你需要做一些优化和caching。