平均而言,我的PHP页面生成时间是10ms。 所以我应该能够一个接一个地执行100个请求(使用服务器上的一个核心,因为这个PHP不是multithreading的)。
但是,我有问题达到每秒50页。 截至目前我平均25日,中等负载。
应用程序非常轻便,它包含从SSD池读取(<5KB),一些读取查询通过索引解决。
我应该在哪里解决这个瓶颈?
平均而言,我的PHP页面生成时间是10ms。 所以我应该能够一个接一个地执行100个请求
不,这是非常错误的。 这取决于代码在做什么,如果写得不好,可能会less得多。
你是怎么测量10ms的?
一些阅读查询通过索引解决。
这意味着一个数据库 – 但你甚至没有提到一个,更不用说它实际上在做什么了。
我有问题达到每秒50页
那么是什么限制了性能? 磁盘I / O,内存I / O? 中央处理器?
没有统计。 没有代码。 没有configuration信息。 对不起,我们甚至比你更黑暗。
因为该PHP不是multithreading的
不,它是多处理的 – 或者至less应该是(除非恰好是处理消息队列而不是web服务器请求)。 如果你只允许在fastcgiconfiguration中使用一个PHP实例(同样你不会说你正在使用哪个fastcgipipe理器),那么这可能是最大的瓶颈。
我不知道这是否会帮助您解决问题,但我也看到每秒钟的请求数字与我们的一个项目(我们使用Apache Benchmark来确定我们的rps)的数据类似。
我们意识到,PHP本身就是瓶颈。 在正常forms下,PHP在每次被调用的时候都会分析所请求的PHP文件,这在计算上可能是一个漫长而昂贵的操作。 我会认为每个PHP文件的启动和parsing都包含在脚本的实际执行时间之上。
PHP-APC是PHP的caching模块,它将原始PHP脚本的操作码副本存储在内存中。 由于它被编译和存储在RAM中,比非caching的PHP要快很多倍。
在我安装PHP-APC并重新启动服务器之后,我们立即就能够每秒钟抽出超过200个请求。
正如我所说,这可能无助于你的问题,但值得一试。
更多关于PHP APC: http : //php.net/manual/en/intro.apc.php