php-fpm 进程管理

ps -ef | grep php-fpm | grep master | awk '{print $2}' | xargs kill -12 #kill -12 就是告知master进程平滑重启 先查找 PHP-FPM 的进程号 1 ps -ef | grep php-fpm 2 root 900 1 0 Feb12 ? 00:00:39 php-fpm: master process (/usr/local/web/php/etc/php-fpm.conf) 3 nobody 901 900 0 Feb12 ? 00:00:13 php-fpm: pool www 4 nobody 902 900 0 Feb12 ? 00:00:13 php-fpm: pool www 5 nobody 1911 900 0 Feb13 ? 00:00:12 php-fpm: pool www 可以看到主进程的pid是 900 然后用kill命令给这个进程发送重启的信号 kill -SIGUSR2 900 其它的信号: 1 SIGINT, SIGTERM 立刻终止 2 SIGQUIT 平滑终止 3 SIGUSR1 重新打开日志文件 4 SIGUSR2 平滑重载所有worker进程并重新载入配置和二进制模块 ### 配置文件翻译: [全局配置] include: 本配置文件中的相对路径都是以php的安装路径的根目录为基准的, 可以在命令行中用-p参数制定相对路径 pid: 进程号所在的文件, 默认放在 path/to/php/var emergency_restart_threshold (进程个数) emergency_restart_interval (时间段) 在一定时间段内, 因为SIGSEGV(内存段错误) 或者 SIGBUS(总线错误)导致进程退出个数等于某个值fpm就会重启 process.max: 控制子进程最大数的全局变量, 后边的设置子进程数量的指令受到这个值的限制, 0表示无限制 process.priority: master进程的优先级, -19~20, 子进程会继承该值 rlimit_*: resource limit, Linux资源限制, 使用默认值的话, 就以操作系统设置为准 events.mechanism: 事件通知机制, 注释掉则自动选择, 目前最流行的是epoll, 将准备就绪的进程号(大概这样理解吧)放到一个文件里, 每次只用扫描这个文件就知道谁准备好了 [进程池配置] [www] 进程池名字为www 1 nobody 15942 30485 0 10:19 ? 00:00:15 php-fpm: pool www 2 nobody 16302 30485 0 10:21 ? 00:00:01 php-fpm: pool www 3 nobody 16303 30485 0 10:21 ? 00:00:01 php-fpm: pool www 4 root 30485 1 0 Apr19 ? 00:10:46 php-fpm: master process (/..../php-fpm.conf) 也可以在一个配置文件中定义多个进程池(监听不同的端口) 1 root 16837 1 0 17:15 ? 00:00:00 php-fpm: master process (/..../php-fpm-test.conf) 2 nobody 16838 16837 0 17:15 ? 00:00:00 php-fpm: pool www 3 nobody 16839 16837 0 17:15 ? 00:00:00 php-fpm: pool www 4 nobody 16840 16837 0 17:15 ? 00:00:00 php-fpm: pool test 5 nobody 16841 16837 0 17:15 ? 00:00:00 php-fpm: pool test listen = 127.0.0.1:9001 监听ip+端口 listen.allowed_clients , 允许访问的ip priority 优先级 pm 控制子进程数量的模式 static, 固定数量; dynamic, 动态变化数量, 至少有一个; ondemand, 来一个请求fork一个 pm.max_children : 当pm=static时 子进程的数量, 当pm=dynamic 或者 pm=ondemand时, 子进程最大的进程数 该条命令相当于 apache的 mpm_prefork指令, 相当于php的PHP_FCGI_CHILDREN环境变量 pm中的默认值是基于低配置服务器设置的, 可以修改相应的配置指令去适合你自己的服务器 pm.start_servers: 启动fpm时生成的子进程数目 pm.min_spare_servers: 最小空闲进程数 pm.max_spare_servers: 最大空闲进程数 pm.min_spare_servers < pm.start_servers < pm.max_spare_servers pm.max_requests: 每个子进程再重启前所能处理的最大请求数, 0表示无限制, 相当于PHP_FCGI_MAX_REQUESTS pm.status_path = /status: http://www.foo.bar/status?json&full 查看fpm的状态信息, 必须以"/"开头, 最好不要以.php结尾 返回信息有: 进程池名字, 进程开始日期, 运行了多少秒, 处理了多少请求, 队列里边有多少待处理的请求, 迄今为止队列里最大的请求数, 活跃进程数, 空闲进程数, 总进程数.... json, 表示可以指定放回txt/json/xml格式 full, 表示更详细的信息, 执行脚本信息, cpu信息, 内存信息, 请求数据的长度..... ping.path = /ping 查看进程是否还有响应, 可以用来制作图表, 进行负载均衡(踢掉某个不响应的进程), 给团队触发提醒 以"/"开头, 最好不要以.php结尾 ping.response 自定义返回信息, 以文本格式返回(text/plan), 同时返回 200 响应码 access.log: 访问日志地址 access.format: 日志格式 slowlog: 慢响应日志地址 request_slowlog_timeout: 评定为慢响应的时间长度 request_terminate_timeout: 请求最长处理时间, 如果php.ini里的max_execution_time没有起作用, 这里应该会起作用 rlimit_files: 本pool里打开的最大文件资源数 rlimit_core: 本pool里使用的最大(core)内核数 chroot: 进程启动时, 将根目录转向到这个制定设定的路径, 绝对路径 chdir: 进程启动时, 将当前目录设定为这个指令制定的目录, 相对目录 catch_workers_output: 将标准输出/错误输出写入到main日志文件中,对响应有几个毫秒的延误, 不设置, 则输出到标准输出设备中(/dev/null, 应该是显示器吧) security.limit_extensions: .php .html 限制解析文件的后缀, 设为空, 则解析任何后缀的文件 php_* 重写或者合并php.ini相关指令的值
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2022

备案号:京ICP备15003423号-3