Skip to content

Commit cc8d046

Browse files
committed
'php-fpm'
1 parent 0aadaee commit cc8d046

File tree

3 files changed

+277
-13
lines changed

3 files changed

+277
-13
lines changed

PHP/PHP-FPM配置选项.md

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
## PHP-FPM
2+
3+
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
4+
5+
它的功能包括:
6+
7+
- 支持平滑停止/启动的高级进程管理功能;
8+
- 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
9+
- stdout 和 stderr 日志记录;
10+
- 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
11+
- 文件上传优化支持;
12+
- "慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
13+
- [fastcgi_finish_request()](http://php.net/manual/zh/function.fastcgi-finish-request.php) - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
14+
- 动态/静态子进程产生;
15+
- 基本 SAPI 运行状态信息(类似Apache的 mod_status);
16+
- 基于 php.ini 的配置文件。
17+
18+
### 全局配置选项
19+
20+
- pid
21+
22+
pid文件的位置
23+
24+
- error_log
25+
26+
错误日志的位置
27+
28+
- log_level
29+
30+
错误的级别 alert 、error、warning、notice、debug、默认是notice
31+
32+
- syslog.facility
33+
34+
设置何种程序记录消息 默认daemon
35+
36+
- syslog.ident
37+
38+
为每条消息 添加前缀
39+
40+
- emergency_restart_interval
41+
42+
如果子进程在 *emergency_restart_interval* 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭)
43+
44+
- process_control_timeout
45+
46+
设置子进程接受主进程复用信号的超时时间 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。
47+
48+
- process_max
49+
50+
fork的最大的fpm的进程数
51+
52+
- process.priority
53+
54+
设置master进程的nice(2) 优先级
55+
56+
- daemonize
57+
58+
设置php-fpm后台运行。默认是yes
59+
60+
- rlimit_core
61+
62+
设置master 进程打开的core最大的尺寸
63+
64+
- events.mechaism
65+
66+
设置fpm的使用的事件机制 select、pool、epoll、kqueue (*BSD)、port (Solaris )
67+
68+
- systemd_interval
69+
70+
使用systemd集成的fpm时,设置间歇秒数
71+
72+
### 运行时配置
73+
74+
- listen
75+
76+
设置接受的fastcgi请求的地址可用格式为:'ip:port','port','/path/to/unix/socket'。每个进程池都需要设置
77+
78+
- listen.backlog
79+
80+
设置backlog的最大值
81+
82+
- listen.allowed_clients
83+
84+
设置允许链接到fastcgi的ip地址
85+
86+
- listen.owner listen.group listen.mode
87+
88+
设置权限
89+
90+
- user group
91+
92+
fpm运行的Unix用户 必须设置的
93+
94+
- pm
95+
96+
设置进程管理器如何管理子进程
97+
98+
- static 子进程是固定的 = *pm.max_children*
99+
- *ondemand* 进程在有需求时才产生
100+
- *dynamic*  子进程的数量在下面配置的基础上动态设置 *pm.max_children**pm.start_servers**pm.min_spare_servers**pm.max_spare_servers*
101+
102+
- pm.max_children
103+
104+
pm设置为staic时。表示创建的子进程的数量。
105+
106+
pm为dynamic时,表示最大可创建的进程数
107+
108+
- pm.start_servers
109+
110+
设置启动时创建的子进程的数目。仅在 *pm* 设置为 *dynamic* 时使用 。就是初始化创建的进程数
111+
112+
- pm.min_spare_servers
113+
114+
设置空闲进程的最大数目
115+
116+
- pm.process_idle_timeout
117+
118+
秒。多久之后结束空闲进程
119+
120+
- pm.max_requests
121+
122+
设置每个子进程重生之前的服务的请求数。
123+
124+
- pm.status_path
125+
126+
fpm状态的页面的地址
127+
128+
- ping.path
129+
130+
fpm监控页面的ping的地址
131+
132+
- ping.resource
133+
134+
用于定于ping请求的返回响应 默认是pong
135+
136+
- request_terminate_timeout
137+
138+
设置单个请求的超时中止时间。
139+
140+
- request_slowlog_timeout
141+
142+
当一个请求该设置的超时时间后,就会将对应的 PHP 调用堆栈信息完整写入到慢日志中
143+
144+
- slowlog
145+
146+
慢请求的记录日志
147+
148+
- rlimit_files
149+
150+
设置打开文件描述符的限制
151+
152+
- access.log
153+
154+
访问日志
155+
156+
- access.format
157+
158+
acces log的格式
159+
160+
### 优化
161+
162+
#### 内核调优
163+
164+
- 调整linux内核打开文件的数量。
165+
166+
```shell
167+
echo `ulimit -HSn 65536` >> /etc/profile
168+
echo `ulimit -HSn 65536` >> /etc/rc.local
169+
source /etc/profile
170+
```
171+
172+
#### PHP-FPM配置调优
173+
174+
- 进程数调整
175+
176+
>pm.max_children = 300; **静态方式**下开启的php-fpm进程数量   
177+
>
178+
>pm.start_servers = 20; **动态方式**下的起始php-fpm进程数量   
179+
>
180+
>pm.min_spare_servers = 5; **动态方式**下的最小php-fpm进程数量   
181+
>
182+
>pm.max_spare_servers = 35; **动态方式**下的最大php-fpm进程数量
183+
>
184+
>request_slowlog_timeout = 2; 开启慢日志
185+
>slowlog = log/$pool.log.slow; 慢日志路径
186+
>
187+
>rlimit_files = 1024; 增加php-fpm打开文件描述符的限制
188+
189+
**一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右 。**
190+
191+
用内存/20 就大概算出最大的进程数。
192+
193+
一般初始化的进程有一个类似的公式
194+
195+
```
196+
start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2;
197+
```
198+
199+
200+
201+
如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误
202+
203+
- **最大请求数**
204+
205+
最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。
206+
207+
这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。
208+
209+
​ pm.max_requests = 10240
210+
211+
- 最长执行时间
212+
213+
最大执行时间在php.ini和php-fpm.conf里都可以配置,配置项分别为max_execution_time和request_terminate_timeout。
214+

PHP/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,5 @@ Fpm是一个实现了Fastcgi协议的程序,用来管理Fastcgi起的进程的,
136136
1. Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
137137
2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
138138
3. 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
139-
4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
139+
4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
140+

面试/笔试题4.md

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,68 @@
11
# 面试题
22

33
1. "\t" "\r" "\n" "\x20"
4-
2. setcookie("user","value") print_r($_COOKIE['user'])
5-
3. echo "$a",'$a',"\\\$a","$a"."$a","$a"+"$a"
4+
5+
答:\t tab \r 换行 \n 回车 \x20 16进制
6+
7+
2. setcookie("user","value") var_dump($_COOKIE['user'])
8+
9+
答:null
10+
11+
3. `$a = 3; echo "$a",'$a',"\\\$a","$a"."$a","$a"+"$a"`
12+
13+
33$a\$a336
14+
615
4. require include区别
16+
17+
require 遇到错误会中断,include不会
18+
719
5. private protected public const static
20+
821
6. 调用父类的方法`parent::`
22+
923
7. `$__GET,` `$_POST`
10-
8. 客户端ip整型
11-
9. 什么是php-fpm
12-
10. 查看进程打开的文件
13-
11. 查看io的状态
14-
12. 查看cpu的负载
15-
13. mysql 的增删改查
16-
14. 聚簇索引所在的列数据是乱序的,会有什么影响。
17-
15. csrf xss sql注入
18-
16. mysql主从同步的原理,什么sql语句导致mysql的主从同步失败
19-
17. 拓展 活动高峰时期,cpu出现100%。你如何排查。nginx+php-fpm 数据读取redis和mysql、
24+
25+
8. php 跳转页面
26+
27+
header("location:");
28+
29+
9. 客户端ip整型
30+
31+
ip2long
32+
33+
10. 什么是php-fpm
34+
35+
FastCGI进程管理器
36+
37+
11. 查看进程打开的文件
38+
39+
lsof
40+
41+
12. 查看io的状态
42+
43+
iostat
44+
45+
13. 查看cpu的负载
46+
47+
top
48+
49+
14. mysql 的增删改查
50+
51+
15. 聚簇索引所在的列数据是乱序的,会有什么影响。
52+
53+
[https://www.cnblogs.com/starhu/p/6406495.html](https://www.cnblogs.com/starhu/p/6406495.html)
54+
55+
16. csrf xss sql注入
56+
57+
17. mysql主从同步的原理,什么sql语句导致mysql的主从同步失败
58+
59+
mysql binlog
60+
61+
18. 拓展 活动高峰时期,cpu出现100%。你如何排查。nginx+php-fpm 数据读取redis和mysql、
62+
63+
64+
65+
19. 项目中遇到了什么问题,
66+
20. 之前的项目有没有其他的优化方案?
67+
21. 平时怎么学习的?
68+
22. 未来的职业的职业方向?

0 commit comments

Comments
 (0)