set_by_lua_block 和 rewrite_by_lua_block 之间消耗了大量时间

54 views
Skip to first unread message

Yanjie Wang

unread,
Dec 8, 2023, 11:47:09 AM12/8/23
to openresty
有一些极端的case中,request_time 和 upstream_response_time 会差的很大,比如说
1.643s vs 0.177s.

为了排查这个问题,我利用 set/rewrite_by_lua_block 在请求头中记录了时间。
    set_by_lua_block $a { ngx.req.set_header("x-debug-set", ngx.now()) }
    rewrite_by_lua_block { ngx.req.set_header("x-debug-rewrite", ngx.now()) }

在上述的例子中,观察到:
- x-debug-set is 1702053191.332
- x-debug-rewrite is 1702053192.798.

观察到二者巨大的差距后,我开启了 rewrite_by_lua_no_postpone 。
结果并没有改变。

所以在开启 no_postpone 后,set 和 rewrite 之间具体会发生什么呢?
有什么思路定位这个巨大的耗时到底花费在哪里了吗?

along

unread,
Feb 3, 2024, 10:52:08 PMFeb 3
to openresty
在调用ngx.now的时候,首先调用一下ngx.update_time,ngx.now可能是被缓存下来的时间;

开启debug日志瞅瞅

Reply all
Reply to author
Forward
0 new messages