mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 20:43:04 +01:00
Raise NPROC limit on unix to avoid errors when starting many threads
This commit is contained in:
parent
18ed4f65c8
commit
dc4452eb0e
@ -128,6 +128,9 @@ static USHORT INET_SERVER_flag = 0;
|
|||||||
|
|
||||||
static bool serverClosing = false;
|
static bool serverClosing = false;
|
||||||
|
|
||||||
|
#if defined(UNIX) && defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT)
|
||||||
|
static void raiseLimit(int resource);
|
||||||
|
#endif
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
@ -269,24 +272,14 @@ int FB_EXPORTED server_main( int argc, char** argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(UNIX) && defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT)
|
#if defined(UNIX) && defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT)
|
||||||
|
raiseLimit(RLIMIT_NPROC);
|
||||||
|
|
||||||
#if !(defined(DEV_BUILD))
|
#if !(defined(DEV_BUILD))
|
||||||
if (Config::getBugcheckAbort())
|
if (Config::getBugcheckAbort())
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
// try to force core files creation
|
// try to force core files creation
|
||||||
struct rlimit core;
|
raiseLimit(RLIMIT_CORE);
|
||||||
if (getrlimit(RLIMIT_CORE, &core) == 0)
|
|
||||||
{
|
|
||||||
core.rlim_cur = core.rlim_max;
|
|
||||||
if (setrlimit(RLIMIT_CORE, &core) != 0)
|
|
||||||
{
|
|
||||||
gds__log("setrlimit() failed, errno=%d", errno);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gds__log("getrlimit() failed, errno=%d", errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
// we need some writable directory for core file
|
// we need some writable directory for core file
|
||||||
// on any unix /tmp seems to be the best place
|
// on any unix /tmp seems to be the best place
|
||||||
@ -298,30 +291,10 @@ int FB_EXPORTED server_main( int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SUPERSERVER) && (defined SOLARIS || defined HPUX || defined LINUX)
|
#if defined(SUPERSERVER) && (defined SOLARIS || defined HPUX || defined LINUX)
|
||||||
{
|
// Increase max open files to hard limit for Unix
|
||||||
// Increase max open files to hard limit for Unix
|
// platforms which are known to have low soft limits.
|
||||||
// platforms which are known to have low soft limits.
|
|
||||||
|
|
||||||
struct rlimit old;
|
raiseLimit(RLIMIT_NOFILE);
|
||||||
|
|
||||||
if (getrlimit(RLIMIT_NOFILE, &old) == 0 && old.rlim_cur < old.rlim_max)
|
|
||||||
{
|
|
||||||
struct rlimit new_max;
|
|
||||||
new_max.rlim_cur = new_max.rlim_max = old.rlim_max;
|
|
||||||
if (setrlimit(RLIMIT_NOFILE, &new_max) == 0)
|
|
||||||
{
|
|
||||||
#if _FILE_OFFSET_BITS == 64
|
|
||||||
gds__log("64 bit i/o support is on.");
|
|
||||||
gds__log("Open file limit increased from %lld to %lld",
|
|
||||||
old.rlim_cur, new_max.rlim_cur);
|
|
||||||
|
|
||||||
#else
|
|
||||||
gds__log("Open file limit increased from %d to %d",
|
|
||||||
old.rlim_cur, new_max.rlim_cur);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -583,3 +556,25 @@ static int tryStopMainThread()
|
|||||||
return serverClosing ? 1 : 0;
|
return serverClosing ? 1 : 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(UNIX) && defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT)
|
||||||
|
static void raiseLimit(int resource)
|
||||||
|
{
|
||||||
|
struct rlimit lim;
|
||||||
|
if (getrlimit(resource, &lim) == 0)
|
||||||
|
{
|
||||||
|
if (lim.rlim_cur != lim.rlim_max)
|
||||||
|
{
|
||||||
|
lim.rlim_cur = lim.rlim_max;
|
||||||
|
if (setrlimit(RLIMIT_CORE, &lim) != 0)
|
||||||
|
{
|
||||||
|
gds__log("setrlimit() failed, errno=%d", errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gds__log("getrlimit() failed, errno=%d", errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user