php生命周期

cli生命周期

定义:

模块初始化部分函数调用图

php_request_startup 部分函数调用图

  • php_request_startup
  • php_output_activate 1. 重置输出全局并设置输出处理程序的堆栈
  • zend_activate
    • gc_reset 2. 重置垃圾回收
    • init_compiler 3. 初始化编译器
    • init_executor 4. 初始化执行器
    • startup_scanner 5. 初始化扫描器
  • sapi_activate 6. 调用sapi_module里面的activate方法
  • zend_signal_activate 7. 对信号进行处理(空函数)
  • zend_set_timeout 8. 设置超时时间
  • php_hash_environment 9. 初始化相关全局变量
  • zend_activate_modules 10. 调用request_startup_func激活模块

执行阶段调用

请求关闭阶段

模块关闭阶段

fpm的三种模式

  • pm=static (静态模式) pm.max_children指定work子进程数量
  • pm=dynamic(动态模式) wokr子进程数量是动态的 由pm.start_servers控制默认启动进程 最大子进程数量由 pm.max_children控制
  • pm=ondemand(按需要的)

网络编程

  • socket
  • bind
  • listen
  • accept

kill SIGUSR1 php-fpm 线上日志分割(重新持有日志文件句柄)

kill SIGUSR2 php-fpm 平滑重载所有work进程 重新载入配置文件 和 二进制文件 修改配置文件平滑重启 php平滑升级

kill -9 杀死php-fpm master进程 work进程依然能够提供服务
因为php-fpm master主进程只负责管理工作(监听work子进程挂掉以后 重新拉起work子进程),并不会处理请求
请求是有work进程直接处理的 所以强杀master进程 work进程依然能对外提供服务

master进程不会对外服务 只负责管理work进程

fpm的生命周期

fpm常驻内存进程

504 nginx上游返回数据超过nginx设置的超时时间 nginx等不及了 就给客户端返回了504
502 连不上fpm 或者是fpm应为某种原因把链接断掉了

详解FastCGI协议

fastcgi_in_out

mac头
ip头
tcp头

_fcgi_header contentlength + paddinglength 一定是8的倍数

抓包一次完整的fastcgi请求包

1
tcpdump -i lo port 9000 -XX -S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
14:01:44.495551 IP localhost.49472 > localhost.cslistener: Flags [S], seq 1361465525, win 43690, options [mss 65495,sackOK,TS val 75365109 ecr 0,nop,wscale 7], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c aa40 4000 4006 9279 7f00 0001 7f00 .<.@@.@..y......
0x0020: 0001 c140 2328 5126 50b5 0000 0000 a002 ...@#(Q&P.......
0x0030: aaaa fe30 0000 0204 ffd7 0402 080a 047d ...0...........}
0x0040: faf5 0000 0000 0103 0307 ..........
14:01:44.495577 IP localhost.cslistener > localhost.49472: Flags [S.], seq 3487476334, ack 1361465526, win 43690, options [mss 65495,sackOK,TS val 75365110 ecr 75365109,nop,wscale 7], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<.......
0x0020: 0001 2328 c140 cfde aa6e 5126 50b6 a012 ..#(.@...nQ&P...
0x0030: aaaa fe30 0000 0204 ffd7 0402 080a 047d ...0...........}
0x0040: faf6 047d faf5 0103 0307 ...}......
14:01:44.495593 IP localhost.49472 > localhost.cslistener: Flags [.], ack 3487476335, win 342, options [nop,nop,TS val 75365110 ecr 75365110], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 aa41 4000 4006 9280 7f00 0001 7f00 .4.A@.@.........
0x0020: 0001 c140 2328 5126 50b6 cfde aa6f 8010 ...@#(Q&P....o..
0x0030: 0156 fe28 0000 0101 080a 047d faf6 047d .V.(.......}...}
0x0040: faf6 ..
14:01:44.495658 IP localhost.49472 > localhost.cslistener: Flags [P.], seq 1361465526:1361466462, ack 3487476335, win 342, options [nop,nop,TS val 75365110 ecr 75365110], length 936
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 03dc aa42 4000 4006 8ed7 7f00 0001 7f00 ...B@.@.........
0x0020: 0001 c140 2328 5126 50b6 cfde aa6f 8018 ...@#(Q&P....o..
0x0030: 0156 01d1 0000 0101 080a 047d faf6 047d .V.........}...}
0x0040: faf6 0101 0001 0008 0000 0001 0000 0000 ................
0x0050: 0000 0104 0001 0380 0000 0f12 5343 5249 ............SCRI
0x0060: 5054 5f46 494c 454e 414d 452f 7661 722f PT_FILENAME/var/
0x0070: 7777 772f 696e 6465 782e 7068 700c 0051 www/index.php..Q
0x0080: 5545 5259 5f53 5452 494e 470e 0352 4551 UERY_STRING..REQ
0x0090: 5545 5354 5f4d 4554 484f 4447 4554 0c00 UEST_METHODGET..
0x00a0: 434f 4e54 454e 545f 5459 5045 0e00 434f CONTENT_TYPE..CO
0x00b0: 4e54 454e 545f 4c45 4e47 5448 0b0a 5343 NTENT_LENGTH..SC
0x00c0: 5249 5054 5f4e 414d 452f 696e 6465 782e RIPT_NAME/index.
0x00d0: 7068 700b 0a52 4551 5545 5354 5f55 5249 php..REQUEST_URI
0x00e0: 2f69 6e64 6578 2e70 6870 0c0a 444f 4355 /index.php..DOCU
0x00f0: 4d45 4e54 5f55 5249 2f69 6e64 6578 2e70 MENT_URI/index.p
0x0100: 6870 0d08 444f 4355 4d45 4e54 5f52 4f4f hp..DOCUMENT_ROO
0x0110: 542f 7661 722f 7777 770f 0853 4552 5645 T/var/www..SERVE
0x0120: 525f 5052 4f54 4f43 4f4c 4854 5450 2f31 R_PROTOCOLHTTP/1
0x0130: 2e31 0e04 5245 5155 4553 545f 5343 4845 .1..REQUEST_SCHE
0x0140: 4d45 6874 7470 1107 4741 5445 5741 595f MEhttp..GATEWAY_
0x0150: 494e 5445 5246 4143 4543 4749 2f31 2e31 INTERFACECGI/1.1
0x0160: 0f0c 5345 5256 4552 5f53 4f46 5457 4152 ..SERVER_SOFTWAR
0x0170: 456e 6769 6e78 2f31 2e31 362e 300b 0b52 Enginx/1.16.0..R
0x0180: 454d 4f54 455f 4144 4452 3130 2e32 3131 EMOTE_ADDR10.211
0x0190: 2e35 352e 320b 0552 454d 4f54 455f 504f .55.2..REMOTE_PO
0x01a0: 5254 3634 3537 350b 0c53 4552 5645 525f RT64575..SERVER_
0x01b0: 4144 4452 3130 2e32 3131 2e35 352e 3131 ADDR10.211.55.11
0x01c0: 0b02 5345 5256 4552 5f50 4f52 5438 300b ..SERVER_PORT80.
0x01d0: 0953 4552 5645 525f 4e41 4d45 6c6f 6361 .SERVER_NAMEloca
0x01e0: 6c68 6f73 740f 0352 4544 4952 4543 545f lhost..REDIRECT_
0x01f0: 5354 4154 5553 3230 3009 0c48 5454 505f STATUS200..HTTP_
0x0200: 484f 5354 3130 2e32 3131 2e35 352e 3131 HOST10.211.55.11
0x0210: 0f0a 4854 5450 5f43 4f4e 4e45 4354 494f ..HTTP_CONNECTIO
0x0220: 4e6b 6565 702d 616c 6976 650b 0848 5454 Nkeep-alive..HTT
0x0230: 505f 5052 4147 4d41 6e6f 2d63 6163 6865 P_PRAGMAno-cache
0x0240: 1208 4854 5450 5f43 4143 4845 5f43 4f4e ..HTTP_CACHE_CON
0x0250: 5452 4f4c 6e6f 2d63 6163 6865 1e01 4854 TROLno-cache..HT
0x0260: 5450 5f55 5047 5241 4445 5f49 4e53 4543 TP_UPGRADE_INSEC
0x0270: 5552 455f 5245 5155 4553 5453 310f 7948 URE_REQUESTS1.yH
0x0280: 5454 505f 5553 4552 5f41 4745 4e54 4d6f TTP_USER_AGENTMo
0x0290: 7a69 6c6c 612f 352e 3020 284d 6163 696e zilla/5.0.(Macin
0x02a0: 746f 7368 3b20 496e 7465 6c20 4d61 6320 tosh;.Intel.Mac.
0x02b0: 4f53 2058 2031 305f 3133 5f36 2920 4170 OS.X.10_13_6).Ap
0x02c0: 706c 6557 6562 4b69 742f 3533 372e 3336 pleWebKit/537.36
0x02d0: 2028 4b48 544d 4c2c 206c 696b 6520 4765 .(KHTML,.like.Ge
0x02e0: 636b 6f29 2043 6872 6f6d 652f 3734 2e30 cko).Chrome/74.0
0x02f0: 2e33 3732 392e 3136 3920 5361 6661 7269 .3729.169.Safari
0x0300: 2f35 3337 2e33 360b 7648 5454 505f 4143 /537.36.vHTTP_AC
0x0310: 4345 5054 7465 7874 2f68 746d 6c2c 6170 CEPTtext/html,ap
0x0320: 706c 6963 6174 696f 6e2f 7868 746d 6c2b plication/xhtml+
0x0330: 786d 6c2c 6170 706c 6963 6174 696f 6e2f xml,application/
0x0340: 786d 6c3b 713d 302e 392c 696d 6167 652f xml;q=0.9,image/
0x0350: 7765 6270 2c69 6d61 6765 2f61 706e 672c webp,image/apng,
0x0360: 2a2f 2a3b 713d 302e 382c 6170 706c 6963 */*;q=0.8,applic
0x0370: 6174 696f 6e2f 7369 676e 6564 2d65 7863 ation/signed-exc
0x0380: 6861 6e67 653b 763d 6233 140d 4854 5450 hange;v=b3..HTTP
0x0390: 5f41 4343 4550 545f 454e 434f 4449 4e47 _ACCEPT_ENCODING
0x03a0: 677a 6970 2c20 6465 666c 6174 6514 1748 gzip,.deflate..H
0x03b0: 5454 505f 4143 4345 5054 5f4c 414e 4755 TTP_ACCEPT_LANGU
0x03c0: 4147 457a 682d 434e 2c7a 683b 713d 302e AGEzh-CN,zh;q=0.
0x03d0: 392c 656e 3b71 3d30 2e38 0104 0001 0000 9,en;q=0.8......
0x03e0: 0000 0105 0001 0000 0000 ..........
14:01:44.495667 IP localhost.cslistener > localhost.49472: Flags [.], ack 1361466462, win 356, options [nop,nop,TS val 75365110 ecr 75365110], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 5099 4000 4006 ec28 7f00 0001 7f00 .4P.@.@..(......
0x0020: 0001 2328 c140 cfde aa6f 5126 545e 8010 ..#(.@...oQ&T^..
0x0030: 0164 fe28 0000 0101 080a 047d faf6 047d .d.(.......}...}
0x0040: faf6 ..
14:01:44.498070 IP localhost.cslistener > localhost.49472: Flags [P.], seq 3487476335:3487476439, ack 1361466462, win 356, options [nop,nop,TS val 75365112 ecr 75365110], length 104
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 009c 509a 4000 4006 ebbf 7f00 0001 7f00 ..P.@.@.........
0x0020: 0001 2328 c140 cfde aa6f 5126 545e 8018 ..#(.@...oQ&T^..
0x0030: 0164 fe90 0000 0101 080a 047d faf8 047d .d.........}...}
0x0040: faf6 0106 0001 0050 0000 582d 506f 7765 .......P..X-Powe
0x0050: 7265 642d 4279 3a20 5048 502f 372e 312e red-By:.PHP/7.1.
0x0060: 300d 0a43 6f6e 7465 6e74 2d74 7970 653a 0..Content-type:
0x0070: 2074 6578 742f 6874 6d6c 3b20 6368 6172 .text/html;.char
0x0080: 7365 743d 5554 462d 380d 0a0d 0a48 656c set=UTF-8....Hel
0x0090: 6c6f 2057 6f72 6c64 210a 0103 0001 0008 lo.World!.......
0x00a0: 0000 0000 0000 0000 0000 ..........
14:01:44.498088 IP localhost.49472 > localhost.cslistener: Flags [.], ack 3487476439, win 342, options [nop,nop,TS val 75365112 ecr 75365112], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 aa43 4000 4006 927e 7f00 0001 7f00 .4.C@.@..~......
0x0020: 0001 c140 2328 5126 545e cfde aad7 8010 ...@#(Q&T^......
0x0030: 0156 fe28 0000 0101 080a 047d faf8 047d .V.(.......}...}
0x0040: faf8 ..
14:01:44.498108 IP localhost.cslistener > localhost.49472: Flags [F.], seq 3487476439, ack 1361466462, win 356, options [nop,nop,TS val 75365112 ecr 75365112], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 509b 4000 4006 ec26 7f00 0001 7f00 .4P.@.@..&......
0x0020: 0001 2328 c140 cfde aad7 5126