前言
许多前辈警告我们,重载可以保证整个过程的平稳性。平滑意味着在重新加载过程中,旧
进程在
处理当前请求之前不会终止。直到有一天,当我在重新加载时,有502个
错误,这使我不得不重新思考。
你如何重现这个问题让我们编写一个简单的
脚本来
模拟:
< PHP
睡眠(11);
;
>
此时,使用
浏览器浏览Web站点,然后立即
执行重新加载
操作,以查看502错误。
PHP这么弱吗甚至连重载的基本光滑度都不能保证答案当然是否定的。事实上,我们可以通过process_control_timeout
参数达到我们的
目标。不幸的是,这个参数的
默认值是0,这是不是有效的,本文将其
设置为10s。以前的实验
程序,重新执行,和通常的结果输出这段时间。但是如果你做更多的实验,你可能会
发现当加载完成后,睡眠就会立刻过来。这是因为在接收到重新加载后发出的
信号后,睡眠会直接返回。让我们重写下面的脚本。
< PHP
睡眠(11);
;
睡眠(11);
回声;
>
你会发现502个错误又出来了。这是因为虽然重装了先睡觉立即终止,第二睡眠仍然是有效的,且优于process_control_timeout时间限制。如果我们process_control_timeout 12S,那么它的所有权利。
在这个意义上,我们只需要设置process_control_timeout确保加载顺畅合理的价值,但有多大价值太小的话不能起
作用,太大的话会有副作用吗让我们重复最后一个问题的实验,但这次我们再加一个监视器:
壳>看n1'ps aux grep php { - } FPM的|
这种监控的目的是观察在加载过程PHP-FPM过程数的变化。为了让效果更明显,建议改变PHP-FPM引导
模式为静态模式,并在同一时间,应该有太多的过程。
当我们重复过去的实验中,我们发现,除了执行请求的过程,其他过程的直接破坏,和新的过程并没有立刻开始,所以坚持到最后的老工艺的执行,和新的过程已经完成。在此期间,如果其他的要求来的,它是毫无疑问,它不会立即回应。
根据我们的实验,我们可以得出一个结论:默认
情况下,刷新操作PHP-FPM不能保证顺利实施,必须建立一个合理的process_control_timeout也会注意到,它的值不能定得太高,否则
系统可能更严重阻塞的请求。
总结
以上是PHP中重载操作的所有内容。我希望这篇文章能帮助你
学习或
工作。如果有任何疑问,你可以留言。