From: Vladimír Čunát Date: Mon, 7 Oct 2019 12:16:56 +0000 (+0200) Subject: daemon/main: file-descriptor count limit: soft->hard X-Git-Tag: v4.3.0~25^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=6b0449a990ed1fdd7fbf01663db16ed39c1d9696;p=thirdparty%2Fknot-resolver.git daemon/main: file-descriptor count limit: soft->hard --- 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);