PHP 程序加速探索

简介

  服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的Apache服务器为例。
  Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。ApacheBench
可以针对某个特定的 URL
仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用
ApacheBench
可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。
  在命令行下输出:

本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。

./ab -n number_of_total_requests
-c number_of_simultaneous_requests

  例如:

澳门新浦京app下载,是否需要加速?

./ab -n 1000 -c 50
  AB将同时向
  测试结果将可能是这样的:

这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。

Server Software: Apache/2.0.16
Server Hostname: localhost
Server Port: 80
Document Path: /myapp.php
Document Length: 1311 bytes
Concurrency Level: 50
Time taken for tests: 8.794 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1754000 bytes
HTML transferred: 1311000 bytes
Requests per second: 113.71
Transfer rate: 199.45 kb/s received
Connection Times (ms)
min avg max
Connect: 0 0 5
Processing: 111 427 550
Total: 111 427 555
  myapp.php每秒钟可以处理的请求数为113.71个。将请求数增加,看看服务器能否处理更大的压力。你也需要调节Apache的MaxClients,ThreadsPerChild,MaxThreadsPerChild等参数,基于你的httpd.conf中的MPM模块选择。
  如果你想得到更详细的信息,请到www.apache.org上查阅一些更深入的文档,包括模块和第三方的提高效率的工具。修改httpd.conf后,要重启Apache服务器,然后再用AB测试。你会看到每秒请求数增加或减少。
  记下每次的参数,最后选择最佳效率的那种配置。
  要指出的是,除了AB,还有许多优秀的服务器性能测试软件。另外,如果你的服务器不是Apache,请自行寻找测试方法。

我想对于大部份人来说,很多WEB项目都是在很紧张的时间里完成的,通常没有经过缜密的思考和严格的测试。当开始一个新的WEB项目。很多人都在构建那种快而乱的应用,缺乏必要的时间来调整和改良代码,这时优化和加速就是我们必须采取的措施。

然而需要特别指出的是,并不是所有程序都需要加速。

优化已完成的代码是很浪费时间的,最好的方法是在写代码的时候就注意到效率,然后完成项目后只优化确实需要优化的那部份。一般一个程序只会有少数几个影响速度的瓶颈,将它们找出来并解决掉,程序就可以很好地运行。另外,当遇到执行效率低下的情况,首先要用大局的眼光来找出影响效率的主要因素,而不要拘泥于细节例如数据量过大,服务器带宽不够,或硬件配置过低,在这样的情况下,优化代码于事无补。

另外,在没有发现程序有明显的执行缓慢的迹象时,就不要太吹毛求疵,为了改进一些非常细节的代码而浪费时间。用这些时间,你可以完成另一个项目或为原来的项目完成一个扩展功能。当然你可以笑话我不够负责,没有把工作做得尽善尽好,我也可以说你是完美主义者:-)

综上,在你决定为你的PHP程序提速之前,问问自己是否有必要。

如何加速?

要回答如何加速这个问题前,需要先回答以下两个小问题:

你的程序慢在哪一部份? PHP可以从哪几个方面考虑加速?

第一个小问题显然我无法给你答案,但我建议你用测试脚本执行速度的方法来解决。只有找出限制速度的瓶颈,才能考虑如何去解决。

第二个小问题我大概的答案是:代码优化,压缩输出,内容缓存输出,函数缓存输出,加速/缓存工具软件。如果你知道更多请告诉我:-)

下面我们来详细地研究一下这几个方面的相关技术。当然实际上每个方面都有无数的细节可以讨论,下面的内容难免会有片面的地方,欢迎补充。

1 测试

◆服务器负载测试

服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的Apache服务器为例。

Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。ApacheBench
可以针对某个特定的 URL
仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用
ApacheBench
可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。

在命令行下输出:

./ab -n number_of_total_requests /-c number_of_simultaneous_requests /_web_server/your_php_app.php

例如:

./ab -n 1000 -c 50

AB将同时向发出50个并发请求,共发出1000次。

测试结果将可能是这样的:

Server Software: Apache/2.0.16Server Hostname: localhostServer Port: 80Document Path: /myapp.phpDocument Length: 1311 bytesConcurrency Level: 50Time taken for tests: 8.794 secondsComplete requests: 1000Failed requests: 0Total transferred: 1754000 bytesHTML transferred: 1311000 bytesRequests per second: 113.71Transfer rate: 199.45 kb/s receivedConnection Times (ms)min avg maxConnect: 0 0 5Processing: 111 427 550Total: 111 427 555

myapp.php每秒钟可以处理的请求数为113.71个。将请求数增加,看看服务器能否处理更大的压力。你也需要调节Apache的MaxClients,
ThreadsPerChild, MaxThreadsPerChild 等参数,基于你的 中的 MPM 模块选择。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图