From 1ccfc0e3afa3de78f5b1cfda99869bb5e393ace6 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Wed, 11 Apr 2012 17:56:29 -0400 Subject: [PATCH] Fix: increase consumer open files limit Set ulimit of consumer when root so it can scales up to the session daemon number of open files. Signed-off-by: David Goulet --- src/bin/lttng-consumerd/lttng-consumerd.c | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index 32571bddf..9f2f02feb 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include @@ -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); -- 2.34.1