From 6b0449a990ed1fdd7fbf01663db16ed39c1d9696 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Mon, 7 Oct 2019 14:16:56 +0200 Subject: [PATCH] daemon/main: file-descriptor count limit: soft->hard --- NEWS | 4 ++-- daemon/main.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 0c3a728d4..575082b23 100644 --- a/NEWS +++ b/NEWS @@ -3,10 +3,10 @@ Knot Resolver ?? Improvements ------------ -- increase file-descriptor count limits to 1M by default +- increase file-descriptor count limit to maximum allowed value (hard limit) -Knot Resolver 4.2.2 (2019-10-dd) +Knot Resolver 4.2.2 (2019-10-07) ================================ Bugfixes diff --git a/daemon/main.c b/daemon/main.c index 0678f7e88..5501d9821 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -740,6 +741,23 @@ int main(int argc, char **argv) args.config = "config"; } + /* File-descriptor count limit: soft->hard. */ + struct rlimit rlim; + ret = getrlimit(RLIMIT_NOFILE, &rlim); + if (ret == 0 && rlim.rlim_cur != rlim.rlim_max) { + kr_log_verbose("[system] increasing file-descriptor limit: %ld -> %ld\n", + (long)rlim.rlim_cur, (long)rlim.rlim_max); + rlim.rlim_cur = rlim.rlim_max; + ret = setrlimit(RLIMIT_NOFILE, &rlim); + } + if (ret) { + kr_log_error("[system] failed to get or set file-descriptor limit: %s\n", + strerror(errno)); + } else if (rlim.rlim_cur < 1024*1024) { + kr_log_info("[system] warning: hard limit for number of file-descriptors is only %ld but recommended value is 1048576\n", + rlim.rlim_cur); + } + /* Connect forks with local socket */ fd_array_t ipc_set; array_init(ipc_set); -- 2.47.2