Fix: increase consumer open files limit
authorDavid Goulet <dgoulet@efficios.com>
Wed, 11 Apr 2012 21:56:29 +0000 (17:56 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Wed, 11 Apr 2012 21:56:29 +0000 (17:56 -0400)
Set ulimit of consumer when root so it can scales up to the session
daemon number of open files.

Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-consumerd/lttng-consumerd.c

index 32571bddf36cfc94483eaf0f180694ac21a99fae..9f2f02feba03897b7462de3250c863ec2ec37b55 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/ipc.h>
+#include <sys/resource.h>
 #include <sys/shm.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
@@ -38,6 +39,7 @@
 #include <assert.h>
 #include <config.h>
 #include <urcu/compiler.h>
+#include <ulimit.h>
 
 #include <common/defaults.h>
 #include <common/common.h>
@@ -227,6 +229,25 @@ static void parse_args(int argc, char **argv)
        }
 }
 
+/*
+ * Set open files limit to unlimited. This daemon can open a large number of
+ * file descriptors in order to consumer multiple kernel traces.
+ */
+static void set_ulimit(void)
+{
+       int ret;
+       struct rlimit lim;
+
+       /* The kernel does not allowed an infinite limit for open files */
+       lim.rlim_cur = 65535;
+       lim.rlim_max = 65535;
+
+       ret = setrlimit(RLIMIT_NOFILE, &lim);
+       if (ret < 0) {
+               PERROR("failed to set open files limit");
+       }
+}
+
 /*
  * main
  */
@@ -272,6 +293,11 @@ int main(int argc, char **argv)
        /* Init */
        lttng_consumer_init();
 
+       if (!getuid()) {
+               /* Set limit for open files */
+               set_ulimit();
+       }
+
        /* create the consumer instance with and assign the callbacks */
        ctx = lttng_consumer_create(opt_type, lttng_consumer_read_subbuffer,
                NULL, lttng_consumer_on_recv_stream, NULL);
This page took 0.034271 seconds and 4 git commands to generate.