php-fpm相关操作
php-fpm常用操作
一.
php5.3.3之后使用新号方式控制php-fpm进程 INT, TERM 立即终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重启所有worker进程并重新载入配置和二进制模块
操作:
# 平滑重启
kill -USR2 16550
kill -USR2 `cat /usr/local/var/run/php-fpm.pid`
# 启动
/etc/init.d/php-fpm start
使用php-fpm.pid进行关闭与重启操作:
1. 修改配置
vim php-fpm.conf [global]
; Pid file
; Note: the default prefix is /opt/apps/var
; Default Value: none
pid = run/php-fpm.pid
2. 重启php-fpm即可生成php-fpm.pid
kill -USR2 10857 php-fpm 关闭:
kill -INT `cat /usr/work/tool/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/work/local/php/var/run/php-fpm.pid`
3. 启动指定配置文件
./php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -c 指定php.ini配置文件
-y 指定php-fpm.conf配置文件
4.校验配置
/usr/local/php/sbin/php-fpm -t
5.开启慢日志
request_slowlog_timeout = 3s
slowlog = var/log/slow.log
日志内容:
[14-Oct-2024 14:23:22] [pool www] pid 204029
script_filename = /mnt/e/www/api/public/index.php
[0x00007f95cda142b0] sleep() /mnt/e/www/api/application/controllers/Api.php:66
[0x00007f95cda14240] testAction() /mnt/e/www/api/public/index.php:16
[0x00007f95cda141f0] run() /mnt/e/www/api/public/index.php:16
php-fpm.conf配置项:
;request_terminate_timeout 将执行时间太长的进程直接终止
request_terminate_timeout=10s
完整配置:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice [www]
listen = /tmp/php-cgi.sock
;listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 200
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 60
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
;request_slowlog_timeout = 0
request_slowlog_timeout = 1s
slowlog = var/log/slow.log access.log = var/log/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
sock VS tcp
php-fpm提供了两种方式提供服务
从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保证通信的正确性和完整性。
tcp socket)
允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。
unix socket)
1)允许在本地运行的进程之间进行通信。
2)将sock文件放在/dev/shm目录下,使用的内存读写更快。
# cd /dev/shm
touch php7.0-fpm.sock
chown www-data:www-data php7.0-fpm.sock
chmod 777 php7.0-fpm.sock
php-fpm配置:
# vi /etc/php/7.0/fpm/pool.d/www.conf
listen= /dev/shm/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data
nginx配置:
location ~* \.php$ {
fastcgi_pass unix:/dev/shm/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
3)提升稳定性
1.修改内核参数 /etc/sysctl.conf
net.unix.max_dgram_qlen = 4096
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
2.提高backlog
backlog默认位128,1024这个值最好换算成自己正常的QPS。
nginx.conf
server{
listen 80 default backlog=1024;
} php-fpm.conf
listen.backlog = 1024
3.增加sock文件和php-fpm实例
在/dev/shm新建一个sock文件,在nginx中通过upstream魔抗将请求负载均衡到两个sock文件,
并且将两个sock文件分别对应到两套php-fpm实例上。
如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。
如果我面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。
有关backlog:
有高并发的业务,就必须要调整backlog。对于PHP而言,需要注意的有3方面:
1、操作系统 | sysctl
2、WEB前端 | 比如:Nginx
3、PHP后台 | 比如:php-fpm
操作系统以CentOS为例,可通过默认配置 /etc/sysctl.conf 文件进行调整。比如:
net.core.somaxconn = 1048576 # 默认为128
net.core.netdev_max_backlog = 1048576 # 默认为1000
net.ipv4.tcp_max_syn_backlog = 1048576 # 默认为1024
WEB前端以Nginx为例,可通过默认配置 /etc/nginx/nginx.conf 文件中的监听选项来调整。比如:
listen 80 backlog=8192; # 默认为511
PHP后台,以PHP-FPM为例,可以通过默认配置 /etc/php-fpm.d/www.conf 文件进行调整。比如:
listen.backlog = 8192 # 默认为-1(由系统决定)
大系统下,如上3处都应该进行调整。
值得注意的是:
PHP-FPM的配置文件中,关于listen.backlog选项的注释有些误导人:
; Set listen(2) backlog. A value of '-1' means unlimited.
; Default Value: -1
实际上如果使用默认值,很容易出现后端无法连接的问题,按老文档上的解释这个默认是200。建议此处不要留空,务必设置一个合适的值。
php-fpm相关操作的更多相关文章
- 从零自学Hadoop(20):HBase数据模型相关操作上
阅读目录 序 介绍 命名空间 表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- 从零自学Hadoop(21):HBase数据模型相关操作下
阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- 理解CSV文件以及ABAP中的相关操作
在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...
- Liunx下的有关于tomcat的相关操作 && Liunx 常用指令
先记录以下liunx下的有关于tomcat的相关操作 查看tomcat进程: ps-ef|grep java (回车) 停止tomcat进程: kill -9 PID (进程号如77447) (回车) ...
- pip的相关操作
>Python中的pip是什么?能够做些什么? pip是Python中的一个进行包管理的东西,能够下载包.安装包.卸载包......一些列操作 >怎么查看pip的相关信息 在控制台输入: ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- SQL语言和DML相关操作以及相应的运算符
SQL 1.结构化查询语言 2.特点 a.第四代编程语言,更接近自然语言 b必须有数据库系统解释执行 c.对象名,关键字不区分大小写 d.字符串必须要用单引号引起来,不能用双引号 e.每条语句最后用分 ...
- 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...
- CentOS学习笔记--基本命令--目录的相关操作
Linux基本命令--目录的相关操作 常见的处理目录的命令吧: cd:变换目录 pwd:显示目前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cd (变换目录) cd是Chang ...
随机推荐
- 修改SpringBoot的配置文件application.yaml后启动失败
经常碰到修改application.yaml文件之后,SpringBoot项目启动失败的,报错信息如下 Connected to the target VM, address: '127.0.0.1: ...
- Vue3 动态子页面和菜单栏同步
动态子页面 <router-view></router-view>显示子页面的内容 main.vue <template> <a-layout id=&quo ...
- chatGPT能做职业规划?看完之后发现3年软测白做了!
"每天都是重复.单调的工作,收入不理想,想跳槽无力,学习又没有动力和方向,不知道未来的发展在哪里,甚至想转行·····" 做测试久了,很多人都有诸如此类的疑惑,不想一直停留在测试需 ...
- 【赵渝强老师】Oracle数据库的存储结构
Oracle的存储结构分为:物理存储结构和逻辑存储结构. 一.物理存储结构:指硬盘上存在的文件 数据文件(data file) 一个数据库可以由多个数据文件组成的,数据文件是真正存放数据库数据的.一个 ...
- Nuxt.js 应用中的 app:mounted 钩子详解
title: Nuxt.js 应用中的 app:mounted 钩子详解 date: 2024/10/5 updated: 2024/10/5 author: cmdragon excerpt: ap ...
- 高通dump ftrace & kernelshark使用
简介 高通 ramdump 可以解析出 ftrace,方便用于追踪 快省稳 问题. kernelshark 是一个可以查看 trace event 的图形化工具,方便梳理和观察内核微观行为. trac ...
- /proc/sys/vm 使用
这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM). 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到. 目前,/proc/s ...
- window和Linux下安装nvidia的apex
两种方法: 1.去github下下载apex,之后安装到你的python环境下,我的安装路径:E:\Anaconda\anaconda\envs\pytorch\Lib\site-packages 注 ...
- 如何让img图片居中
说明:img是行内块元素,用一个盒子(父元素)嵌套img(子元素) text-align:center;可以让父元素为块元素的行内块或行内元素水平居中: vaertical-align:middle; ...
- KubeSphere 在互联网电商行业的应用实践
来自社区用户(SRE运维手记)投稿 背景 在云原生的时代背景下,Kubernetes 已经成为了主流选择.然而,Kubernetes 的原生操作复杂性和学习曲线较高,往往让很多团队在使用和管理上遇到挑 ...