关于进程和 PHP -fpm 的一些疑惑

2021-11-15 12:22:41 +08:00
 palemoky

最近在看 CSAPP ,看到进程部分,结合之前的 PHP 学习,有一些问题请教下各位 V 友:

  1. 通过 pstree 32765 -np 可以看到 fpm 的进程结构如下图,这里的父进程( 32765 )在 fork 了子进程后,还会处理请求吗?还是只负责管理子进程?
    php-fpm(32765)─┬─php-fpm(508)
                   ├─php-fpm(2527)
                   └─php-fpm(3344)
    
  2. 子进程在处理完一个请求后会退出吗? fpm 除了在达到 pm.max_requestspm.process_idle_timeout 的预设值退出外,还会在什么机制下退出呢? fpm 的一个子进程会在一个请求生命周期结束后处理新的请求吗?
  3. 常说一个应用程序就是一个进程,像 Nginx 或 php-fpm 又会 fork 多个子进程,那此时的 Nginx 和 PHP 是有几个进程呢? 1 个吗?因为子进程都由父进程管理?
  4. 每个进程都有独立的文件描述符表, 我看默认大小是 1024 ,如果一个请求依赖打开超过 1024 个资源,那是不是这个请求就无法正常处理了呢?
  5. 当 fpm 通过 tcp 的方式与 Nginx 通信时,默认的 fpm 端口是 9000 ,不同的子进程是如何都通过 9000 和 Nginx 通信的呢?还是子进程有不同的端口呢?
1557 次点击
所在节点    程序员
5 条回复
julyclyde
2021-11-15 12:41:40 +08:00
3 常说的不对
4 要看 limit ,达到了就不能正常工作了
5 回去学网络吧,这是一个常见错误理解
mahone3297
2021-11-15 12:46:41 +08:00
1. 应该是要 accept 请求,然后 fork 其他子进程
2. 应该不会退出,等待处理新请求。除了达到你说的 pm.max_requests 和 pm.process_idle_timeout 等设置
3. 很多个进程
4. 应该会报错 too many open files
5. 可能 @julyclyde 的意思是子进程有不同的端口?请教下 @julyclyde 这里,子进程是直接跟 nginx 通信的是吧?
julyclyde
2021-11-15 12:53:48 +08:00
@mahone3297
1 php-fpm 是提前 fork 好的
mkfs
2021-11-15 15:03:45 +08:00
FPM 有好几种进程管理模式的,不同策略,用不同的参数。
PHP 是多进程模式的,一个请求一个进程。

max_requests 参数,是对于那种,要保留一定空闲进程的情况来说的,因为 PHP 是进程模式,有新的请求,就需要 fork 新进程,fork 成本比较高,为了提高响应速度,就预先 fork 一些进程,这样有请求过来,就直接用这些进程好了。因为 FPM 要一直保证存有一定数量的进程,所以可能会有一部分进程,一直没机会退出。那为什么要有 max_requests 参数呢?因为怕内存泄漏呗,超过一定数量的请求后,退出进程重新创建,可以解决这个问题。

process_idle_timeout ,是为了复用“那些 fork 出来,但又不准备长期保留的进程”的(有控制空闲进程数量的参数,超过设定数量的时候,会有进程退出),因为一个请求处理完毕后,可以先不退出这个进程,让后序到来的请求复用这个进程,如果超过这个时间没能复用,就退出这个进程。

Nginx 是事件驱动模式,有新的请求,不会创建新进程,但是他会调用 FPM ,FPM 会创建新进程。

文件描述符问题,超了,再发起相关创建描述符的调用,会报错:"too many open files",一般来说,你一个进程不需要打开这么多文件吧,况且 PHP 是多进程模式。

端口 9000 这个问题,其实就是 TCP 四元组的问题了,服务器 IP:端口+客户端 IP:端口。
mkfs
2021-11-15 15:05:07 +08:00
服务器 IP:服务器端口+客户端 IP:客户端端口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/815473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX