php-fpm:PHP fastcgi进程管理器

php-fpm的工作模式:1个master进程、多个worker进程(在PHP中worker进程就是php-cgi进程),php-cgi是PHP的解释器

master进程和worker进程的工作:

master进程负责初始化环境变量、加载PHP配置文件。

worker进程负责解析PHP脚本,把PHP的脚本执行结果php-fpm的master进程,

php-fpm的master进程把结果给nginx的结果。

php-fpm.conf配置文件配置项

listen =unix:/tmp/php-cgi.sock

pid = /app/logs/php-fpm.pid (php-fpm的进程ID存储位置)

error_log = /app/logs/php-fpm.logs(PHP-FPM的出错日志)

log_level = error (日志的级别)

rlimit_files = 32768 (文件描述符的设置)

events_machanism = epoll (事件模型)

listen.owner = nginx (进程使用的用户)

listen.group = nginx (进程使用的用户组)

pm = dynamic

pm.max_children = 1024 (允许最大的子进程数)

pm.start_servers = 16 (启动的进程数)

pm.min_spare_servers = 5 (最小空闲进程数)(动态模式生效)

pm.max_spare_servers = 20 (最大空闲进程数)(动态模式生效)

pm.process_idle_timeout = 15s (空闲的进程多少被杀掉)(ondemand)

pm.max_requests = 2048 (一个php-fpm的worker进程处理的请求数量,处理到这个么多进程后,

这个php-fpm的worker进程会重新启动,为什么会重新启动,因为有可能worker进程存在内存泄漏的问题)

php-fpm进程启动模式,pm可以设置为static、dynamic、ondemand

static:子进程(子进程又叫做php-fpm的worker进程)自始至终是pm.max_children制定的数量,

pm.start_servers、php.min-spare_servers、pm.max_spare_servers配置将没有作用。

如果设置成dynamic,则进程是动态的,最开始是pm.start_servers制定的数量,如果请求较多,则会自动增加,但不

超过pm.max_children制定的进程数量,

同时保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。

当php-fpm启动后,一个php-cgi进程约占用3M内存,但是当他们处理过一些请求后,有些内存是释放不掉的,

占用的内存能达到20M-------30M不等。

对于内存比较吃紧的,同时并发量不是很大的应用,可以考虑采用static的处理方式,这样可以很好的控制php-fpm的所消耗的总内存,让系统更加

平稳运行。另外由于并发量很小,可以适当的把设置pm.max_requests小一些,以便让php-fpm进程有机会重启,从而释放其占用的内存。

nginx 如何和php-fpm通信

nginx 可以通通过TCP方式或者unix套接字的方式和php-fpm通信

TCP方式和Unix domain socket的区别?????

TCP方式多了网络层、数据链路层、物理层可能会慢,但是通过TCP方式可以把nginx和php-fpm部署到不同的服务器上,

unix domain socket 是通过socket的方式在进程间通信。这样就要求nginx和php-fpm在部署在一个服务器上。

可以通过nginx的fastcig模块

location ~ [^/].php(/|$)

{

fastcgi_pass unix:/tpm/php-cgi.sock; (fastcgi_pass的值需要和php-fpm配置文件中的listen选项的值一样)

fastcgi_index index.php;

#fastcgi_pass SCRIPT_FILENAME $document_root$fastcgi_script_name;
#include fastcgi_params;(如果只有这一行不加上上面一行的话,如果请求PHP孙然会请求成功,HTTP status code 200,但是页面为空)
include fastcgi.conf; #只用包含fastcgi.conf 就行了,上面两行就可以省略了。

}

nginx之CGI

fastcgi.cong 和fastcgi_params的区别:

原本nginx的conf配置目录,没有fastcgi.conf配置文件,只有fastcgi_param配置文件,fastcgi.conf是

在 nginx 0.8.30版本才引入的。

主要是解决以下问题。

原本nginx只有fastcgi_param,后来发现很多人在nginx.conf定义SCRIPT_FILENAME时使用了硬编码的方式。

例如,fastcgi_param SCRIPT_FILENAME /var/wwww/foo$fastcgi_script_name.

于是为了规范用法引入了fastcgi.conf配置文件。

nginx之fastcgi和PHP的PHP-FPM的更多相关文章

  1. nginx、fastCGI、php-fpm关系梳理(转)

    前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...

  2. etrace跟踪Nginx代码+ FASTCGI

    http://blog.csdn.net/jianqiangchen/article/details/29175285 http://blog.csdn.net/jianqiangchen/artic ...

  3. Nginx中FastCGI配置优化

    FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器 ...

  4. Nginx + CGI/FastCGI + C/Cpp

    接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...

  5. nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)

        前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装 php-fpm扩展并启动php-fpm守护进程, ...

  6. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理

    Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...

  7. nginx、fastCGI、php-fpm关系梳理(转载参考)

    nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html   前言: Linux下搭建nginx+php ...

  8. Linux上配置Nginx+PHP5(FastCGI)

    原为地址:http://www.laruence.com/2009/07/28/1030.html Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时 ...

  9. nginx、fastCGI、php-fpm关系梳理

    前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx ...

  10. Nginx 中 FastCGI 配置示例

    nginx 中 FastCGI 参数:主要是在 http 层 :保证PHP环境的高校运行 主要对PHP用来解析 fastcgi_cache_path /tmp/fastcgi_cache levels ...

随机推荐

  1. Atitit 开发进度 开发效率提升解决方案

    Atitit 开发进度  开发效率提升解决方案 1.1. 使用4gl语言 dsl语言尽可能 1 1.2. Ssd+高屏幕显示器,提升硬件 1 1.3. 汉字命名规范,可以大力提升可读性与效率 1 1. ...

  2. 在Vue项目中使用vw实现移动端适配

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...

  3. ECMAScript 6 入门之字符串

    1.新增字符串的方法 1.字符是否存在 console.log("Yo".indexOf("Y")!=-1); console.log("Yo&quo ...

  4. 【Python】Python的安装与个人使用记录

    下载 从官网上下载,目前,最新版是Python3,基于项目需求,我们使用的是Python2. 我是在CentOS上安装,下载的是Python-2.7.9.tgz. 安装 tar -zxvf Pytho ...

  5. DIOCP-DIOCPv5的处理能力

    今天和BB讨论了下DiocpV5的单连接处理能力.一直没有做过这方面的测试,稍微试了一下. 把开始的时候客户端Sleep(10),为了测试处理能力,把Sleep(10)去掉了,20秒(实际应该算17秒 ...

  6. Spring自动扫描无法扫描jar包中bean的解决方法(转)

    转载自:http://www.jb51.net/article/116357.htm 在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.sprin ...

  7. 模仿CyclicBarrier,自定义自己屏障类

    简介 在这里模仿CyclicBarrier,自定义一个自己多线程屏障类,里面有个计时器count,count为0时,才唤醒线程,否则就await挂起,(没错就是用的object类的挂起和唤醒全部线程方 ...

  8. Java多线程系列——线程阻塞工具类LockSupport

    简述 LockSupport 是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞. 和 Thread.suspend()相比,它弥补了由于 resume()在前发生,导致线程无法继续执 ...

  9. headfirst python 07 ~ 08

    Web 不论你在 web 上做什么, 都离不开请求和响应, web请求作为某个用户交互的结果由web浏览器发送到web服务器, 在web服务器上, 会生成web响应(或应答)并发回到 web 浏览器. ...

  10. 关于Unity中NGUI的3D角色血条的实现

    首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...