**一.PHP-FPM进程和线程特点:**
1.PHP-FPM是阻塞的单线程模型,PHP-FPM的每个进程只开启一个线程,一个线程同时只能服务一个请求。
2.服务进程内存使用统计:
```
ps aux |grep php-fpm|awk '{mem+=$6}END{print mem}'
```
 
**二.进程池:**
[www]
查看进程池:
```
ps -ef
#可看到www池中进程分配
```
 
**三.进程守护者:**
```
user = nginx
group = nginx
#建议与nginx进程守护者保持一致
```
 
**四.监听端口:**
```
listen = 127.0.0.1:9000
```
 
**五.进程管理器核心优化:**
1.动态创建子进程:
```
pm = dynamic
```
2.最大子进程数:
```
pm.max_children = 100 (默认5)
#每开启一个php-fpm进程要占用近20M左右的内存,假设服务器内存为2G
```
3.初始进程数:
```
pm.start_servers = 40 (默认2)
```
4.最小空闲进程数:
```
pm.min_spare_servers = 20 (默认1)
```
5.最大空闲进程数:
```
pm.max_spare_servers = 60 (默认3)
```
6.最大多少次请求后子进程重生:
```
pm.max_requests = 10240
#有效降低内存消耗
```
 
**六.进程状态监控:**
1.php配置:
```
pm.status_path = /phpstatus
```
2.nginx设置方法:
```
location /phpstatus {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
```
3.客户端测试:
```
http://192.168.2.1/phpstatus
```
4.进程状态信息:
```
pool: www # 进程池名称
process manager: dynamic # 进程管理方式
start time: 22/Jan/2016:15:49:00 +0800 # 启动时间
start since: 375 # 运行时长
accepted conn: 7 # 当前进程池接受的请求数
listen queue: 0 # 请求等待队列,如果不为 0 ,意味着 FPM 进程不足,需要增加
max listen queue: 0 # 最大等待队列数量
listen queue len: 1024 # SOCKET 等待队列长度
idle processes: 4 # 空闲进程数
active processes: 1 # 活跃的进程数
total processes: 5 # 总进程数
max active processes: 1 # 最大活跃进程数
max children reached: 0 # 达到最大进程数的次数,如果不为 0 ,意味着最大进程数不足,需要增加
slow requests: 0 # 慢请求数量,需要设置 slow log
```
 
**七.生成访问日志:**
```
access.log = log/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
```
 
**八.开启慢日志:**
```
request_slowlog_timeout = 5
slowlog = log/$pool.log.slow
```
 
**九.增加php-fpm打开文件数的限制:**
```
rlimit_files = 65535
```
 
**十.每个php-fpm进程的内存限制(php.ini):**
```
memory_limit=128M
```
 
**十一.进程最大执行时间,与php.ini中max_execution_time作用相同(php.ini):**
```
max_execution_time=30
```
 
**十二.ab压力测试**
```
#ab->nginx->php->index.php
ab -n10 -c10 http://bbs.linux.com/index.php
ab -n1000 -c1000 http://bbs.linux.com/index.php
ab -n10000 -c10000 http://bbs.linux.com/index.php
```
 
### **系统的学习PHP**
关注:PHP自学中心,回复相应的关键词,领取以下视频教程
**ThinkPHP5底层源码分析**
公众号里回复:20190621
 
#### **还有其他的教程的关键词,请关注公众号查看每天分享的文章教程的头部**
![](https://img.kancloud.cn/96/af/96af322d2cdc53d3fbbe981affa60c7f_150x150.jpg)
- 第1章:LNP Web环境搭建
- 1-1 Nginx1.19源码编译安装
- 1-2 Nginx1.19环境配置
- 1-3 Nginx1.19性能优化与测试
- 1-4 PHP8.0源码编译安装
- 1-5 PHP8.0环境配置
- 1-6 PHP8.0性能优化与测试
- 第2章:JIT即时编译
- 2-1 JIT编译原理
- 2-2 Tracing JIT和Function JIT编译引擎
- 2-3 Opcodes编译原理
- 2-4 Opcache和JIT功能开启
- 2-5 JIT高性能测试
- 第3章:PHP8的主要新特性
- 3-1 php8的命名参数
- 3-2 Reflection反射
- 3-3 注解
- 3-4 构造器属性提升
- 3-5 联合类型
- 3-6 Nullsafe空安全运算符
- 3-7 Match表达式
- 第4章:PHP8的新功能和类
- 4-1 PhpToken类
- 4-2 Stringable接口
- 4-3 WeakMap类
- 4-4 Str_contains函数
- 4-5 Str_starts_with和Str_ends_with函数
- 4-6 Fdiv函数
- 4-7 Get_resource_id函数
- 4-8 Get_debug_type函数
- 第5章:类型系统改进
- 5-1 新的Mixed伪类型
- 5-2 Static类方法的返回类型
- 第6章:错误处理方面的改进
- 6-1 系统函数引发TypeError和ValueError异常
- 6-2 Throw表达式抛出异常
- 6-3 无变量捕获的Catch
- 6-4 默认错误报告设置为E_ALL
- 6-5 默认情况下显示PHP启动错误
- 6-6 Assert断言默认情况下引发异常
- 6-7 操作符@不再抑制Fatal错误
- 6-8 PDO默认错误模式为ERRMODE_EXCEPTION
- 第7章:资源到对象的迁移
- 7-1 GdImage类对象替换了GD映像资源
- 7-2 CurlHandle类对象替换Curl处理程序
- 7-3 套接字扩展资源Socket是类对象
- 7-4 XMLWriter对象替换xmlwriter资源
- 第8章:PHP面向对象的编程更改
- 8-1 不兼容的方法签名的致命错误
- 8-2 严格执行类魔术方法签名
- 8-3 静态调用非静态类方法会导致致命错误
- 8-4 继承规则不适用于Private类方法
- 8-5 对象支持Class魔术常量
- 第9章:与字符串相关的更改
- 9-1 Substr和Iconv_substr偏移越境返回空字符串
- 9-2 加减运算符优先级高于点连接符
- 第10章:其他功能与特性
- 10-1 Printf采用新精度和宽度修饰符
- 10-2 内置Web服务器支持动态端口选择
- 10-3 参数列表和闭包Use列表中允许结尾逗号
- 10-4 隐式负数组键增量不会跳过负数
- 10-5 Crypt函数Salt为必选参数
- 10-6 调用禁用函数或类为未定义状态
- 10-7 可选参数之后禁止出现必选参数
- 第11章:弃用的函数与方法
- 11-1 ReflectionFunction::isDisabled弃用
- 11-2 ReflectionParameter::getClass弃用
- 11-3 ReflectionParameter::isArray弃用
- 11-4 ReflectionParameter::isCallable弃用
- 11-5 ReflectionClass::export弃用
- 11-6 ReflectionFunction::export弃用
- 11-7 Get_defined_functions改进禁用函数
- 11-8 24个PostgreSQL的别名函数弃用