diff --git a/src/init.c b/src/init.c index 61bfe5c..8478e13 100644 --- a/src/init.c +++ b/src/init.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -1144,6 +1145,7 @@ static int hyper_loop(void) struct epoll_event *events; struct hyper_pod *pod = &global_pod; sigset_t mask, omask; + struct rlimit limit; sigemptyset(&mask); sigaddset(&mask, SIGCHLD); @@ -1162,6 +1164,26 @@ static int hyper_loop(void) sigdelset(&omask, SIGCHLD); signal(SIGCHLD, hyper_init_sigchld); + // setup open file limit + limit.rlim_cur = limit.rlim_max = 1000000; + if (setrlimit(RLIMIT_NOFILE, &limit) < 0) { + perror("set rlimit for NOFILE failed"); + return -1; + } + + // setup process num limit + limit.rlim_cur = limit.rlim_max = 30604; + if (setrlimit(RLIMIT_NPROC, &limit) < 0) { + perror("set rlimit for NPROC failed"); + return -1; + } + + // setup pending signal limit, same with NRPROC + if (setrlimit(RLIMIT_SIGPENDING, &limit) < 0) { + perror("set rlimit for SIGPENDING failed"); + return -1; + } + ctl.efd = epoll_create1(EPOLL_CLOEXEC); if (ctl.efd < 0) { perror("epoll_create failed");