如何提高PHP性能?

3

我已经为Facebook创建了一个PHP应用程序。它使用MySQL,Memcached,并在Centos 2,6 Ghz和2 GB RAM上运行Lighttpd。

基本上,它只是一个PHP文件,第一次运行后会被缓存,下一次每次从Memcached中直接提供,耗时仅为0.8毫秒。

有什么更多的方法可以缩短这个时间吗?


问题是,你为什么想要“让这个时间变少”? - Ree
因为上次发布此应用程序时,我有10k个并发请求。所以是10k * 0.8毫秒=8秒。这太长了。 - Tom Smykowski
如果性能非常重要,你应该考虑用另一种语言编写应用程序并使用多台服务器。 - markus
@tharkun - 网站直接从Memcached中显示,因此更改语言不会有太大帮助。 - Tom Smykowski
你尝试过用APC了吗? - Miha Hribar
@markus-tharkun 这里并不是 PHP 的问题。0.8 毫秒已经非常优化了。看起来你需要分散你的调用。增加处理器核心(如果你在云托管服务上,这很容易实现)肯定会有所帮助。 - StackOverflowed
4个回答

11

一旦达到0.8毫秒,我不确定您是否可以再降低。

但是,您可以设置多个服务器来处理许多并发请求(使用一个共同的memcached)。当您达到极限时,只需添加一个新服务器,就能轻松扩展。


同意。在必须开始查看硬件之前,您只能从软件方面做这么多。 - ryeguy

3

运行XDebug并运行分析器。在那里,您可以看到是否有任何需要异常长时间的功能。

我建议使用一个可以读取这些日志的程序,例如kcachegrind等。

顺便说一下,当您进入分析器领域时,就没有回头路了。


你好,我的代码基本上只是从Memcached获取HTML并将其显示给用户。 - Tom Smykowski
那么你应该注意,既然你将其标记为PHP并谈论一个PHP应用程序。 - Ólafur Waage
@Olafur 抱歉如果我的问题不够明确。但是正如你所写的,我再次确认了我的代码。所以谢谢 - 这可能是一个解决方案。 - Tom Smykowski
即使页面很简单,您也可能从分析器中学到一些东西。有许多黑暗的角落,您可以进行微观优化。 - troelskn

2
你可以使用http代理和负载均衡到多个服务器。大多数http代理也可以作为缓存,可减轻应用程序的负载。
此外,确保发送正确的http头,以使您的页面可以客户端缓存。这可能会减少请求次数,因为客户端将重用其缓存版本。

1
你有一个从memcached获取数据并显示它们的php脚本,或者是Web服务器直接从memcached获取数据的吗?
我不知道lighthttpd是否可以直接从memcached显示页面,但我知道nginx可以做到这一点,请搜索ngx_http_memcached_module。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接