php-fpm 进程管理
2017年4月2日 20:39:16 星期日
ps -ef | grep php-fpm | grep master | awk '{print $2}' | xargs kill -12 #kill -12 就是告知master进程平滑重启
或 ps -ef | grep php-fpm | grep master | awk '{print $2}' | xargs sudo kill -12
2015年2月26日 15:40:15
先查找 PHP-FPM 的进程号
ps -ef | grep php-fpm
root Feb12 ? :: php-fpm: master process (/usr/local/web/php/etc/php-fpm.conf)
nobody Feb12 ? :: php-fpm: pool www
nobody Feb12 ? :: php-fpm: pool www
nobody Feb13 ? :: php-fpm: pool www
可以看到主进程的pid是 900
然后用kill命令给这个进程发送重启的信号
kill -SIGUSR2
其它的信号:
SIGINT, SIGTERM 立刻终止
SIGQUIT 平滑终止
SIGUSR1 重新打开日志文件
SIGUSR2 平滑重载所有worker进程并重新载入配置和二进制模块
bash 脚本(根据网上找的脚本,精简后的, 去掉了检测当前pid的grep+awk代码, 建议使用时直接使用restart指令, Mac上可用,但是注意权限)
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin BINFILE="/usr/sbin/php-fpm"
CFGFILE="/etc/php-fpm.conf"
PIDFILE="/var/run/php-fpm.pid"
LOCKFILE="/var/lock/php-fpm.lock"
INIFILE="/etc/php.ini" RETVAL= start() {
[[ -x $BINFILE ]] || exit
[[ -f $CFGFILE ]] || exit $BINFILE -t >/dev/null >& if [[ $? -ne ]]; then
echo "The php-fpm configure has error."
return
fi echo "Starting php-fpm......"
sudo $BINFILE -c ${INIFILE} -y $CFGFILE -g ${PIDFILE}
RETVAL=$?
echo "ok~"
[[ $RETVAL -eq ]] && touch $LOCKFILE return $RETVAL
} stop() {
echo "Shutting down php-fpm......" if [[ -f $PIDFILE ]]; then
kill - `cat ${PIDFILE}`
else
kill - `ps aux | grep php-fpm | awk '/master/{print $2}'`
fi RETVAL=$?
echo "ok~"
[[ $RETVAL -eq ]] && sudo rm -f $LOCKFILE $PIDFILE return $RETVAL
} restart() {
stop
sleep start
sleep RETVAL=$?
return $RETVAL
} reload() {
echo -n $"Reloading php-fpm......" if [[ -f $PIDFILE ]]; then
kill -USR2 `cat ${PIDFILE}`
else
kill -USR2 `ps aux | grep php-fpm | awk '/master/{print $2}'`
fi RETVAL=$?
echo "ok~" return $RETVAL
} case "$1" in
start)
start
;; stop)
stop
;; restart)
restart
;; reload)
reload
;; *)
echo "Usage: service php-fpm {start|stop|restart|reload}"
RETVAL=
esac exit $RETVAL
配置文件翻译:
[全局配置]
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
nobody : ? :: php-fpm: pool www
nobody : ? :: php-fpm: pool www
nobody : ? :: php-fpm: pool www
root Apr19 ? :: php-fpm: master process (/..../php-fpm.conf)
也可以在一个配置文件中定义多个进程池(监听不同的端口)
root : ? :: php-fpm: master process (/..../php-fpm-test.conf)
nobody : ? :: php-fpm: pool www
nobody : ? :: php-fpm: pool www
nobody : ? :: php-fpm: pool test
nobody : ? :: 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相关指令的值
php-fpm 进程管理的更多相关文章
- FastCGI 进程管理器(FPM)
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的. 它的功能包括: 支持平滑停止/启动的高级进程管理功能: 可以工作于不同的 uid/ ...
- PHP FastCGI进程管理器PHP-FPM的架构
一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程.每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态 ...
- php-fpm解读-进程管理的三种模式
php-fpm进程管理一共有三种模式:ondemand.static.dynamic,我们可以在同一个fpm的master配置三种模式,看下图1.php-fpm的工作模式和nginx类似,都是一个ma ...
- PHP 优化之php -fpm 进程
一,php-fpm的启动参数 1 2 3 4 5 6 7 8 9 10 11 12 13 #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/ ...
- 《Linux内核设计与实现》读书笔记 第三章 进程管理
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...
- 进程管理三大扩展工具htop
三大进程管理监控工具 HTOP 介绍: Htop是一款运行于Linux系统监控与进程管理软件,htop提供所有进程的列表,并且使用彩色标识出处理器.swap和内存状态.用户一般可以在top无法提供详尽 ...
- Linux进程管理子系统分析【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...
- Linux下取代top的进程管理工具 htop
一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for ...
- Linux进程管理
一.进程管理简介 进程是正在执行的程序或命令,每一个进程都是一个运行实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用: 1.判断服务器的健康状态 2.查看系统中的所有进程 3.杀死进程 ...
- C++ Windows进程管理
功能: 1.各个进程启动.挂起.恢复.停止等 2.监听进程的运行状态,进程退出(正常.非正常)时,通知用户 3.异步队列 4.线程安全 进程管理器类: #ifndef __ProcessManager ...
随机推荐
- 【HDU 5438】Ponds
题意 不断删去度数为1的点,最后求有奇数个点的联通块的权值之和. 分析 存边的时候,要头尾都存这个边.用dfs或者队列删点,再用并查集或者dfs确定联通块,然后统计联通块的点数,最后累加. 我自己写的 ...
- 德州扑克AI WEB版
继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...
- BZOJ1093 最大半连通子图
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到 ...
- groovy–流程控制
在本篇文章中,我们将介绍逻辑分支,循环,以及如何从if-else以及try-catch代码块中返回值. if – elseGroovy 支持Java传统的if-else语法: def x = fals ...
- Core Animation编程指南
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...
- POJ1679The Unique MST(次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25203 Accepted: 8995 D ...
- Java Observer 观察者
http://www.cnblogs.com/jaward/p/3277619.html 1.API 被观察者 java.util.Observable; public class Observabl ...
- x86汇编指令详解
80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...
- linux:Nginx+https双向验证(数字安全证书)
本文由邓亚运提供 Nginx+https双向验证 说明: 要想实现nginx的https,nginx必须启用http_ssl模块:在编译时加上--with-http_ssl_module参数就ok.另 ...
- Fedora下安装ORACLE 11g
一.硬件检测 1.内存检测 oracle11g要求最低1GB内存 命令: grep MemTotal /proc/meninfo 2.交换空间检测 通常交换空间是内存1.5倍 命令: grep ...