我有多个PHP-FPM UNIX套接字池用于同一个主机,以实现代码库/功能的逻辑分离,并解决将来的扩展问题。Nginx根据URI模式管理到正确套接字的路由。部署工作正常。
每当我更改任何一个池的配置时,我都会重新加载/重新启动FPM进程(通过USR 2信号)。
我不知道FPM的内部是如何工作的,但是我假设当我重新启动主进程时,所有的池都会重新启动/重新加载。如果我错了,请纠正我。
我想知道当其他池正常工作时,我是否可以只重新加载/重新启动一个池(这些池上正在进行的事务没有问题)。
我还希望获得任何其他配置建议,以实现所需的池管理
3条答案
按热度按时间ecbunoof1#
php-fpm
允许查尔兹进程正常重启,通常使用reload
关键字代替init脚本上的restart
,发送USR 2信号。因此,通过执行优雅重启,您不应丢失任何正在运行的事务。在每个子进程的当前请求管理结束后,子进程将被杀死。如果您不需要真实的的重启,**这应该足够了。我做了一些测试,例如,重载足以:
所以我还没有发现需要真实的重新启动的情况。除了重新加载不能启动停止的服务。
如果你想确保当你想重新加载一个池时其他池不会被重新加载,你必须管理几个php-fpm守护进程,每个守护进程管理一个池,这意味着要写几个init脚本和主配置文件。
使用restart关键字更危险,特别是因为init脚本可能会在停止步骤中杀死长时间运行的子进程。对于使用多个PID和配置文件管理的多个守护进程,您甚至可以获得带有
--exec
选项的start-stop-daemon
命令(在debian中就是这种情况)并且这将杀死所有运行相同php-fpm可执行文件的守护进程(如果运行多个php-fpm进程,在停止具有正确PID的正确守护进程后,会向所有其他并行php-fpm守护进程发送kill-9,这非常糟糕)。所以使用reload关键字(USR 2信号)是必须的。
uz75evzq2#
虽然已经有了一个最佳答案,但我写这封信是为了提供最佳答案中遗漏的更多信息。
这就引出了一些事实和问题
hxzsmxv23#
我试过在一个laravel项目中重载php-fpm,并且启用了opcache,但是每次付款都被停止。