怎么统计 Flask 每个请求的耗时?钩子与 WSGI 中间件有什么区别?出错的请求会不会被统计到?为什么要看分位数而不是平均数?这篇逐项量出来。
/fast after_request 记到 0.02 ms | WSGI 中间件(含响应体生成完)记到 0.18 ms | Server-Timing 头:app;dur=0.02 /work after_request 记到 60.06 ms | WSGI 中间件(含响应体生成完)记到 60.18 ms | Server-Timing 头:app;dur=60.06 /stream after_request 记到 0.02 ms | WSGI 中间件(含响应体生成完)记到 324.88 ms | Server-Timing 头:app;dur=0.02
上一篇:测试 Blueprint;下一篇:慢 SQL 统计。
4 个请求(其中 2 个抛异常,返回 500):after_request 被调用 4 次,teardown_request 被调用 4 次 (默认的 500 响应是 Flask 在异常处理里生成的,也会走 after_request——这里看到的次数就是实际调用数)
无计时 70 µs/请求;带 before/after 钩子与 WSGI 中间件 79 µs/请求;多出约 9 µs
400 个样本:平均 21.1 ms | p50 7.5 ms | p95 201.8 ms | p99 210.3 ms | 最大 210.4 ms
这里用 test client 的 400 个样本,耗时是 time.sleep 模拟的。