mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
src: raise maximum file descriptor limit
Do a binary search for the maximum RLIMIT_NOFILE. Works around the low, low limits on certain high, high-priced devices from Cupertino, CA.
This commit is contained in:
parent
f311963ff9
commit
6820054d2d
23
src/node.cc
23
src/node.cc
@ -72,6 +72,7 @@
|
||||
#define umask _umask
|
||||
typedef int mode_t;
|
||||
#else
|
||||
#include <sys/resource.h> // getrlimit, setrlimit
|
||||
#include <unistd.h> // setuid, getuid
|
||||
#endif
|
||||
|
||||
@ -3103,6 +3104,28 @@ void Init(int* argc,
|
||||
node_isolate = Isolate::GetCurrent();
|
||||
|
||||
#ifdef __POSIX__
|
||||
// Raise the open file descriptor limit.
|
||||
{
|
||||
struct rlimit lim;
|
||||
if (getrlimit(RLIMIT_NOFILE, &lim) == 0 && lim.rlim_cur != lim.rlim_max) {
|
||||
// Do a binary search for the limit.
|
||||
rlim_t min = lim.rlim_cur;
|
||||
rlim_t max = 1 << 20;
|
||||
// But if there's a defined upper bound, don't search, just set it.
|
||||
if (lim.rlim_max != RLIM_INFINITY) {
|
||||
min = lim.rlim_max;
|
||||
max = lim.rlim_max;
|
||||
}
|
||||
do {
|
||||
lim.rlim_cur = min + (max - min) / 2;
|
||||
if (setrlimit(RLIMIT_NOFILE, &lim)) {
|
||||
max = lim.rlim_cur;
|
||||
} else {
|
||||
min = lim.rlim_cur;
|
||||
}
|
||||
} while (min + 1 < max);
|
||||
}
|
||||
}
|
||||
// Ignore SIGPIPE
|
||||
RegisterSignalHandler(SIGPIPE, SIG_IGN);
|
||||
RegisterSignalHandler(SIGINT, SignalExit);
|
||||
|
Loading…
Reference in New Issue
Block a user