**一.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
 
#### **還有其他的教程的關鍵詞,請關注公眾號查看每天分享的文章教程的頭部**

- 第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的別名函數棄用