Welcome! Log In Create A New Profile

Advanced

[njs] Stream: fixed CPU hog when js_filter is registered in both directions.

Dmitry Volyntsev
August 12, 2021 12:42PM
details: https://hg.nginx.org/njs/rev/377743cd9059
branches:
changeset: 1687:377743cd9059
user: Miao Wang <shankerwangmiao@gmail.com>
date: Wed Aug 11 11:44:12 2021 +0800
description:
Stream: fixed CPU hog when js_filter is registered in both directions.

Previously, a single busy chain was used to track filtered data in both
directions. This might lead to a situation when busy chunks are not
freed properly and pile up.

The fix is to separate busy chain for upstream and downstream directions.

This closes #413 issue on Github.

diffstat:

nginx/ngx_stream_js_module.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)

diffs (41 lines):

diff -r 80adcb502e40 -r 377743cd9059 nginx/ngx_stream_js_module.c
--- a/nginx/ngx_stream_js_module.c Wed Aug 11 21:48:52 2021 +0300
+++ b/nginx/ngx_stream_js_module.c Wed Aug 11 11:44:12 2021 +0800
@@ -49,7 +49,8 @@ typedef struct {
ngx_buf_t *buf;
ngx_chain_t **last_out;
ngx_chain_t *free;
- ngx_chain_t *busy;
+ ngx_chain_t *upstream_busy;
+ ngx_chain_t *downstream_busy;
ngx_int_t status;
#define NGX_JS_EVENT_UPLOAD 0
#define NGX_JS_EVENT_DOWNLOAD 1
@@ -528,7 +529,7 @@ ngx_stream_js_body_filter(ngx_stream_ses
njs_str_t exception;
njs_int_t ret;
ngx_int_t rc;
- ngx_chain_t *out, *cl;
+ ngx_chain_t *out, *cl, **busy;
ngx_connection_t *c, *dst;
ngx_stream_js_ev_t *event;
ngx_stream_js_ctx_t *ctx;
@@ -606,15 +607,17 @@ ngx_stream_js_body_filter(ngx_stream_ses

if (from_upstream) {
dst = c;
+ busy = &ctx->downstream_busy;

} else {
dst = s->upstream ? s->upstream->peer.connection : NULL;
+ busy = &ctx->upstream_busy;
}

if (out != NULL || dst == NULL || dst->buffered) {
rc = ngx_stream_next_filter(s, out, from_upstream);

- ngx_chain_update_chains(c->pool, &ctx->free, &ctx->busy, &out,
+ ngx_chain_update_chains(c->pool, &ctx->free, busy, &out,
(ngx_buf_tag_t) &ngx_stream_js_module);

} else {
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Stream: fixed CPU hog when js_filter is registered in both directions.

Dmitry Volyntsev 295 August 12, 2021 12:42PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 291
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready