php-fpm VS hhvm && nginx 配置

来源:互联网 发布:淘宝弹弓皮筋专卖 编辑:程序博客网 时间:2024/05/20 02:21

名词解释

1、nginx:web server(还有Apache、lighthttp)的一种
2、CGI:全称是 Common Gateway Interface,CGI 是外部应用程序与 Web Server 之间的接口标准,是在 CGI 程序和 Web 服务器之间传递信息的规程。CGI 规范允许 Web Server 执行外部程序,并将它们的输出发送给Web浏览器。
3、FastCGI:是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

完整的http请求处理和应答逻辑为:

客户端(浏览器)做出请求操作(输入网址、点击链接、提交表单)或者是app上发起请求。
客户端对域名进行解析,向设定的 DNS 服务器请求 IP 地址。
客户端根据 DNS 服务器返回 IP 地址采用三次握手与服务端建立 TCP/IP 连接。
TCP/IP 连接成功后,客户端向服务端发送 HTTP 请求。
服务端的 Web Server 会判断 HTTP 请求的资源类型,进行内容分发处理;如果请求的资源为 PHP 文件,服务端软件会启动对应的 CGI 程序进行处理,并返回处理结果。
服务端将 Web Server 的处理结果响应给客户端
客户端接收服务端的响应,并渲染处理结果,如果响应内容需要请求其他静态资源,通过 CDN 加速访问所需资源。
客户端将渲染好的视图呈现出来并断开 TCP/IP 连接
2、
3、

php两种解析方式

1.配置:
nginx是web服务器,对于收到的php请求,由具体的php解析器来进行解析处理,
所以,在nginx.conf的server php配置中:

location ~ \.php$ {    root           html;    fastcgi_pass   127.0.0.1:9001;    fastcgi_index  index.php;    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;    include        fastcgi_params;}

2.处理php区别:

php-fpm:多进程
hhvm:多线程

php-fpm关于进程一些配置:

1.个数配置:

vi $php_install_dir/etc/php-fpm.conf

rlimit_files = 1024

一个处理肯定会被一个进程处理,因此设置超时时间

https://blog.linuxeye.cn/380.html

#

php-fpm进程设置多少合适,设成动态还是静态?
《lnmp一键安装包》中会根据你服务器内存调整php-fpm进程数。
下面是摘自Google讨论话题:《 PHP-FPM on highload tips 》[墙外,科学上网可参考goagent]。
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you
如果你的高负载网站使用PHP-FPM管理FastCGI,也许下面这些技巧对你有用
1. Compile PHP’s modules as less as possible, the simple the best (fast);
尽量少安装PHP模块,最简单是最好(快)的
2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);
把你的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以(建议压力测试来得出自己服务器合理的值)
3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;
socket连接FastCGI,/dev/shm是内存文件系统,socket放在内存中肯定会快些
4. Increase Linux “max open files”, using the following command (must be root):
Linux下增加文件打开数,命令如下:
cat >> /etc/security/limits.conf <

vi $php_install_dir/etc/php-fpm.conf

rlimit_files = 51200
6. Using PHP code accelerator, e.g eAccelerator, XCache. And set “cache_dir” to /dev/shm on Linux.
使用php代码加速器,例如 eAccelerator, XCache.在Linux平台上可以把cache_dir指向 /dev/shm
/usr/local/php/etc/php-fpm.conf重要优化参数详解:
pm = dynamic
pm参数指定了进程管理方式,有两种可供选择:static或dynamic,从字面意思不难理解,为静态或动态方式。如果是静态方式,那么在php-fpm启动的时候就创建了指定数目的进程,在运行过程中不会再有变化(并不是真的就永远不变);而动态的则在运行过程中动态调整,当然并不是无限制的创建新进程,受pm.max_spare_servers参数影响;动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗
pm.max_children = 24
static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量
pm.start_servers = 16

动态方式下的起始php-fpm进程数量

pm.min_spare_servers = 12

动态方式下服务器空闲时最小php-fpm进程数量

pm.max_spare_servers = 24

动态方式下服务器空闲时最大php-fpm进程数量

一般php-fpm进程占用20~30m左右的内存就按30m算。如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,由于大家一般Nginx、MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。
LNMP在一台机器上参数(仅供参考,建议压力测试得出):
Mem=free -m | awk '/Mem:/{print $2}' #我的机器内存是987M
sed -i “s@^pm.max_children.*@pm.max_children = ((Mem/2/20))@” phpinstalldir/etc/phpfpm.confsedis@pm.startservers.@pm.startservers=((Mem/2/30))@php_install_dir/etc/php-fpm.conf
sed -i “s@^pm.min_spare_servers.*@pm.min_spare_servers = ((Mem/2/40))@” phpinstalldir/etc/phpfpm.confsedis@pm.maxspareservers.@pm.maxspareservers=((Mem/2/20))@php_install_dir/etc/php-fpm.conf
987M内存:
pm = dynamic
pm.max_children = 24
pm.start_servers = 16
pm.min_spare_servers = 12
pm.max_spare_servers = 24

原创粉丝点击