php做为排名top2 互联网研发工具,非常流行,能够参考:中国最大的25个网站采用技术选型方法
php这个名叫作实质上有两层含义 广义的php 指的是用后缀名为.php的脚本,便是程序员编写的php代码:狭义的php 指的是php安排程序,例如说 lnmp,这个php 便是 php-fpm
php-fpm是什么
直接定义:
php-fpm是一个内置php解析器,采用prefork+异步IO 模型的高性能服务器程序
php-fpm从php5.3.3起始已然进入到php源代码包,之前是做为patch存在的
很少人会去读php本身源代码,我6年前处理php内存泄密问题的时候做了些科研,近期再查看了一番,发掘php的研发者特别有诚意,这是一款非常出色的服务器软件,支持如下 php-fpm 采用 prefork的方式 (listen同一个位置,而后fork出若干子进程)在子进程里面,采用异步IO处理客户端请求event模型能够在php-fpm.conf中配置; Specify the event mechanism FPM will use. The following
is available:
; - select (any POSIX os)
; - poll (any POSIX os)
; - epoll (linux >= 2.5.44)
; - kqueue (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
; - /dev/poll (Solaris >= 7)
; - port (Solaris >= 10)
; Default Value: not set (auto detection)
;events.mechanism = epoll
在linux服务器上,倘若不设置events.mechanism,那样默认便是采用epoll,因此
php-fpm的IO模型&并发处理能力和nginx是完全一致
nginx以性能卓越闻名,大部分程序员都认为php效率低下,看了源代码,才晓得这是传奇啊
在高性能安排的时候,大众常常会针对性的优化nginx 。我自己之前安排php程序亦犯了错误,8G内存的server,php-fpm的max children都会设置128+,此刻看来太多了,参考nginx的安排:
nginx的worker_process通常设置为 2 * cpu-core
php-fpm配置为 3倍 cpu core number就能够了
php-fpm稳定性比nginx稍差这是由于php-fpm内置了一个php解析器,php-fpm进程就和php程序绑缚了,倘若php脚本写得欠好,有死循环或阻塞在某个远端资源上,会拖累加载它的php-fpm进程
而nginx和后端应用服务器之间经过网络连接,能够设置timeout,不易堵死的
php-fpm的fastcgi是短连接 我原以为是长连接的,看了代码才晓得亦是短连接,处理一个request就关闭掉
php-fpm接口采用fastcgi 非常遗憾,php-fpm和fastcgi完全绑定了,没法独立运用 。只能安排在支持http-fcgi协议转换程序背面(nginx)。其实能够思虑在php-fpm代码包里面引入http协议支持,这般php-fpm能够独立运行,让nodejs无话可说
php-fpm等同于OpenResty OpenResty是一个国人研发的nginx模块,便是在nginx引入lua解释器. 实质上,它和php-fpm的独一差别便是一个采用php语法,一个用lua,因此OpenResty要做为nginx加强包运用还能够,要选取它做为一个重点编程工具,无任何必要
从架构上来讲,php-fpm已然做到最好,超过大都数 python安排工具,我再亦不黑它了
|