通过访问 /fpm-status 页面,使用工具定期检索 Prometheus 指标。有时,该工具无法访问 /fpm-status 页面,因为 php-fpm 响应“服务器忙”。请稍后再试。' (HTTP 503) 在此期间 php-fpm 仅记录以下内容:
注意:[pool www]状态:记分板已在使用。
我们经营一个非常小的游泳池,只有两个静态的孩子。
pm = static
pm.max_children = 2
Run Code Online (Sandbox Code Playgroud)
对 /fpm-status 的请求可能会排队。但这通常不是问题。对 fpm 池的请求数量也非常低。所以我预计队列不会很长。(当然我不能确定,因为没有收集那段时间的指标)
查看fpm 源代码,我可以看到它无法获取记分牌上的锁。但它不会等待它可用。所以当没有获取到锁时,就会返回错误。但这是否意味着当另一个请求写入记分板(更新状态)时,fpm-status 不可用?
这是什么意思(即我该如何解决这个问题)?
浏览 FPM 代码后,fpm_scoreboard_update
更新记分板的函数似乎是唯一获取相同锁的其他函数。因此,如果此时记分板已更新或有两个同时/fpm-status
请求,则该请求将失败。在这种情况下,服务器将返回HTTP 503
状态代码 ( 503 Service Unavailable
),这确实是一个安静且准确的响应。
等待几毫秒然后重复请求,将是处理此恕我直言的最佳方法。
184
但是,AFAICS 替换文件fpm_status.c
行应该是安全的
if (!fpm_spinlock(&scoreboard_p->lock, 1)) {
Run Code Online (Sandbox Code Playgroud)
和
if (!fpm_spinlock(&scoreboard_p->lock, 0)) {
Run Code Online (Sandbox Code Playgroud)
启用忙等待锁。
归档时间: |
|
查看次数: |
1800 次 |
最近记录: |