]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/main: file-descriptor count limit: soft->hard
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 7 Oct 2019 12:16:56 +0000 (14:16 +0200)
committerPetr Špaček <petr.spacek@nic.cz>
Tue, 8 Oct 2019 07:00:24 +0000 (09:00 +0200)
NEWS
daemon/main.c

diff --git a/NEWS b/NEWS
index 0c3a728d48f7ece2b53b7126c76a1000710d4160..575082b2322e088453139336a0e85f61ac26ec99 100644 (file)
--- 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
index 0678f7e88dc1633ab9cb6ce46a505f3d48b08c98..5501d982117b6acc33383ff5f4bddd3b4c515d1f 100644 (file)
@@ -37,6 +37,7 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/resource.h>
 #include <unistd.h>
 
 #include <lua.h>
@@ -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);