WordPress MySQL和PHP性能

时间:2011-04-07 作者:Matthew Paulson

有一个网站(www.americanbankingnews.com),今天可以获得40000-50000页的浏览量。它目前位于一个具有8GB ram的四核Xeon专用服务器上。该站点由WordPress和MySQL(位于同一台服务器上)提供支持,我目前正在使用W3 Total Cache进行页面和MySQL查询缓存。

不幸的是,这似乎还不够。在流量高峰时期,我的服务器会收到一些HTTP 500错误,并且没有缓存的页面加载速度很慢。

我目前没有使用Xcache或任何其他PHP缓存/加速工具。

我是否应该采取其他步骤来优化MySQL和PHP性能?或者我应该换一台额外的服务器。具体来说,我想了解提高MySQL性能的其他建议,以及像xcache这样的工具在这种情况下是否有帮助

6 个回复
最合适的回答,由SO网友:Chris_O 整理而成

您好,Matthew Paulson,

我看到您使用的是W3 Total缓存,但您的数据库和对象缓存已设置为磁盘。将对象和数据库缓存到磁盘实际上可能会对性能产生负面影响,尤其是当您的流量太大时。

在我写的一篇关于如何将数据库和对象缓存到磁盘的文章中,您可以阅读更多有关将数据库和对象缓存到磁盘的影响的信息set up W3 Total Cache 插件作者同意我设置中的说明。

要真正看到数据库和对象缓存的好处,需要使用像APC这样的PHP操作码缓存。您可以按照插件FAQ中的复制和粘贴说明编译和设置APC。如果您使用的是Ubuntu或Debian,只需运行以下命令:apt get apc-php5 to install。

就像其他人也提到的那样,通过使用Nginx设置反向代理,您将获得巨大的性能提升,并使您的站点能够扩展得更大。

我在我的 WordPress Performance Stack. 文章

您还应该阅读此处的其他一些问题和答案。已经给出了许多良好的性能和扩展建议。

祝你好运。管理自己的服务器有时会非常有压力。

Edit

为了展示将Nginx安装为反向代理可以获得的性能,我发布了一个刚刚在服务器上运行的Apache基准测试:

x-wing ~: ab -n 1000 -c 80 http://wp-performance.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking wp-performance.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/0.8.54
Server Hostname:        wp-performance.com
Server Port:            80

Document Path:          /
Document Length:        3132 bytes

Concurrency Level:      80
Time taken for tests:   0.066 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      3605000 bytes
HTML transferred:       3132000 bytes
Requests per second:    15164.15 [#/sec] (mean)
Time per request:       5.276 [ms] (mean)
Time per request:       0.066 [ms] (mean, across all concurrent requests)
Transfer rate:          53385.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   0.6      1       3
Processing:     1    4   0.8      4       5
Waiting:        1    3   0.8      3       5
Total:          3    5   0.6      5       7

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      5
  75%      6
  80%      6
  90%      6
  95%      6
  98%      6
  99%      6
 100%      7 (longest request)
理论上,它每秒可以处理15000多个请求。(同一网络)

SO网友:markratledge

许多类似的问题和答案:https://wordpress.stackexchange.com/search?q=mysql+optimize

归根结底,要使用诸如mysqltuner之类的工具来调查瓶颈,检查日志中的错误和内存使用情况,php操作码缓存,清除日志/页面修订以使数据库缩小到合适的大小,等等。

SO网友:MikeSchinkel

你好@Matthew Paulson:

你可能问错了问题。

对于您的流量,您可能希望使用nginx. 以下是Q&;至于网站上的nginx,谷歌搜索中有很多相关文章,还有可以在WordPress上连接WordPress和nginx的插件。org,最后是一篇关于安装和配置的文章:

如果这没有帮助,或者如果您出于其他原因不想这样做,请告诉我们what plugins you are using. 大多数情况下,WordPress的性能问题并不是显而易见的,而是一些写得不好的插件造成的。

SO网友:Rarst

您是否了解在高负载下究竟是什么成为瓶颈?它可能是不同类型的资源(CPU负载、维持网络连接、内存不足等)。

一般事项:

  • opcode cache (将编译好的PHP代码保存在内存中)是必须的memory-based object cache (W3TC支持它,请仔细研究)。它将使许多内容更加持久,并将负载从MySQL中移出alternative web server (如nginx)或reverse proxy (再说一遍,你的记忆力太差了,我听说了清漆的优点)

SO网友:anu

您拥有的硬件应该能够轻松应对规定的流量(作为一个基准,我运行的网站在2GB Slicehost VPS上的每日页面浏览量达到了约40k的峰值),因此这表明存在严重错误。

因此,正如其他人所说,您需要做的第一件事是了解问题所在。

top在您负载时会给您提供哪些信息?当您按内存和cpu%排序时,您是否使用交换内存,负载是否达到峰值?最重要的进程是什么?

你能安装像这样的东西吗munin 让您深入了解服务器?

假设您正在运行Apache,它是如何配置的-需要了解的重要事项是:

超时(假设您在prefork模式下运行Apache)—Apache conf文件的prefork部分中的所有配置行ps -ylC httpd --sort:rss 将指示Apache进程正在使用的内存量。

  • 安装mtopmysqltuner - 据我所知,这两个都可以通过apt get获得。你也应该turn on MySQL slow logging - 您通常只需要在my中取消注释一行即可。cnf文件。

    mtop可以实时查看正在运行的SQL查询(缓慢)。mysqltuner会让您了解需要对MySQL配置进行哪些更改,正如其他人所建议的那样,如果您在繁忙时间关闭插件会发生什么?站点是否加快了速度?您安装了哪些插件?

    你知道你在繁忙的时间里有多少流量吗?比如10分钟内浏览4000次页面。

  • 有了这些来源的信息,您将对出现的问题有一个更好的了解。

    SO网友:Ünsal Korkmaz

    我不知道您安装了什么程序,但可能是APC-Zend问题:

    http://www.ivankristianto.com/web-development/server/alternative-php-cache-apc-not-compatible-with-zend-optimizer/1726/

    在我安装替代PHP缓存(APC)后,这个问题在我的VPS中发生。而且我已经在相同的VPS上安装了Zend optimizer。安装APC后,我的WordPress博客显示出奇怪的行为。有时我会遇到错误500内部服务器错误,有时我会遇到PHP致命错误。

    结束

    相关推荐

    是否可以使用类别来破解具有单个MySQL数据库的类似多站点的设置?

    我有一个项目,它将有效地创建多个博客,这些博客将提供现有内容(别担心,这不是来自其他博客或类似内容的受版权保护的内容)。从DB管理和版主的角度来看,为了限制托管成本,我希望避免内置的多站点功能,因为每个博客都需要一个单独的DB。我想知道,通过一些智能的管道胶带黑客攻击,在一个WordPress博客中运行多个博客是否可行,同时显示多个独立的博客。我认为类别可能会被劫持以实现这一目标。基本上,每个单独的“博客”都是一个单独的类别。有没有人这样做过,或者有其他的单DB多博客方法(使用WordPress)?关于我