From 572e50e0a241054f95dd45fe35b9794e054bbd36 Mon Sep 17 00:00:00 2001 From: William Yang Date: Mon, 13 Feb 2023 17:55:03 +0100 Subject: [PATCH 1/3] perf: add TLS config hibernate_after, reduce memory footprint --- apps/emqx/i18n/emqx_schema_i18n.conf | 11 ++++++++ apps/emqx/src/emqx_schema.erl | 10 +++++++ apps/emqx/test/emqx_listeners_SUITE.erl | 35 +++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/apps/emqx/i18n/emqx_schema_i18n.conf b/apps/emqx/i18n/emqx_schema_i18n.conf index 2ba5e7f52..6faa0c511 100644 --- a/apps/emqx/i18n/emqx_schema_i18n.conf +++ b/apps/emqx/i18n/emqx_schema_i18n.conf @@ -1495,6 +1495,17 @@ In case PSK cipher suites are intended, make sure to configure } } +common_ssl_opts_schema_hibernate_after { + desc { + en: """ Hibernate the SSL process after idling for amount of time reducing its memory footprint. """ + zh: """ 在闲置一定时间后休眠 SSL 进程,减少其内存占用。""" + } + label: { + en: "hibernate after" + zh: "闲置多久后休眠" + } +} + ciphers_schema_common { desc { en: """This config holds TLS cipher suite names separated by comma, diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index ba813d2c8..a75c3a968 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -1929,6 +1929,16 @@ common_ssl_opts_schema(Defaults) -> default => Df("secure_renegotiate", true), desc => ?DESC(common_ssl_opts_schema_secure_renegotiate) } + )}, + + {"hibernate_after", + sc( + duration(), + #{ + default => undefined, + required => false, + desc => ?DESC(common_ssl_opts_schema_hibernate_after) + } )} ]. diff --git a/apps/emqx/test/emqx_listeners_SUITE.erl b/apps/emqx/test/emqx_listeners_SUITE.erl index 6a7cd2791..8c69e7fda 100644 --- a/apps/emqx/test/emqx_listeners_SUITE.erl +++ b/apps/emqx/test/emqx_listeners_SUITE.erl @@ -138,6 +138,41 @@ t_restart_listeners(_) -> ok = emqx_listeners:restart(), ok = emqx_listeners:stop(). +t_restart_listeners_with_hibernate_after_disabled(Config) -> + OldLConf = emqx_config:get([listeners]), + maps:foreach( + fun(LType, Listeners) -> + maps:foreach( + fun(Name, Opts) -> + case maps:is_key(ssl_options, Opts) of + true -> + emqx_config:put( + [ + listeners, + LType, + Name, + ssl_options, + hibernate_after + ], + 5000 + ); + _ -> + skip + end + end, + Listeners + ) + end, + OldLConf + ), + ok = emqx_listeners:start(), + ok = emqx_listeners:stop(), + %% flakyness: eaddrinuse + timer:sleep(timer:seconds(2)), + ok = emqx_listeners:restart(), + ok = emqx_listeners:stop(), + emqx_config:put([listeners], OldLConf). + t_max_conns_tcp(_) -> %% Note: Using a string representation for the bind address like %% "127.0.0.1" does not work From d424d77e8490402899750722e6a4d745ce5d28ac Mon Sep 17 00:00:00 2001 From: William Yang Date: Mon, 13 Feb 2023 18:04:03 +0100 Subject: [PATCH 2/3] chore(TLS): hibernate_after default to 5s, follow version 4.x --- apps/emqx/src/emqx_schema.erl | 3 +-- apps/emqx/test/emqx_listeners_SUITE.erl | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index a75c3a968..d1be888c3 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -1935,8 +1935,7 @@ common_ssl_opts_schema(Defaults) -> sc( duration(), #{ - default => undefined, - required => false, + default => Df("hibernate_after", "5s"), desc => ?DESC(common_ssl_opts_schema_hibernate_after) } )} diff --git a/apps/emqx/test/emqx_listeners_SUITE.erl b/apps/emqx/test/emqx_listeners_SUITE.erl index 8c69e7fda..015439587 100644 --- a/apps/emqx/test/emqx_listeners_SUITE.erl +++ b/apps/emqx/test/emqx_listeners_SUITE.erl @@ -138,7 +138,7 @@ t_restart_listeners(_) -> ok = emqx_listeners:restart(), ok = emqx_listeners:stop(). -t_restart_listeners_with_hibernate_after_disabled(Config) -> +t_restart_listeners_with_hibernate_after_disabled(_Config) -> OldLConf = emqx_config:get([listeners]), maps:foreach( fun(LType, Listeners) -> @@ -154,7 +154,7 @@ t_restart_listeners_with_hibernate_after_disabled(Config) -> ssl_options, hibernate_after ], - 5000 + undefined ); _ -> skip From 4e6c7bfcbe676b1e9e3acc2454335deffa6e898d Mon Sep 17 00:00:00 2001 From: William Yang Date: Tue, 14 Feb 2023 08:50:22 +0100 Subject: [PATCH 3/3] chore: changelog for hibernate_after --- apps/emqx/src/emqx.app.src | 2 +- changes/v5.0.18/perf-9967-en.md | 1 + changes/v5.0.18/perf-9967-zh.md | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changes/v5.0.18/perf-9967-en.md create mode 100644 changes/v5.0.18/perf-9967-zh.md diff --git a/apps/emqx/src/emqx.app.src b/apps/emqx/src/emqx.app.src index c812b2217..3030ccb06 100644 --- a/apps/emqx/src/emqx.app.src +++ b/apps/emqx/src/emqx.app.src @@ -3,7 +3,7 @@ {id, "emqx"}, {description, "EMQX Core"}, % strict semver, bump manually! - {vsn, "5.0.17"}, + {vsn, "5.0.18"}, {modules, []}, {registered, []}, {applications, [ diff --git a/changes/v5.0.18/perf-9967-en.md b/changes/v5.0.18/perf-9967-en.md new file mode 100644 index 000000000..fadba24c9 --- /dev/null +++ b/changes/v5.0.18/perf-9967-en.md @@ -0,0 +1 @@ +New common TLS option 'hibernate_after' to reduce memory footprint per idle connecion, default: 5s. diff --git a/changes/v5.0.18/perf-9967-zh.md b/changes/v5.0.18/perf-9967-zh.md new file mode 100644 index 000000000..7b73f9bd0 --- /dev/null +++ b/changes/v5.0.18/perf-9967-zh.md @@ -0,0 +1 @@ +新的通用 TLS 选项 'hibernate_after', 以减少空闲连接的内存占用,默认: 5s 。