Commit 4a25983f authored by Matt Stancliff's avatar Matt Stancliff
Browse files

Improve error handling around setting ulimits

The log messages about open file limits have always
been slightly opaque and confusing.  Here's an attempt to
fix their wording, detail, and meaning.  Users will have a
better understanding of how to fix very common problems
with these reworded messages.

Also, we handle a new error case when maxclients becomes less
than one, essentially rendering the server unusable.  We
now exit on startup instead of leaving the user with a server
unable to handle any connections.

This fixes antirez#356 as well.
parent 491532a7
...@@ -1522,12 +1522,30 @@ void adjustOpenFilesLimit(void) { ...@@ -1522,12 +1522,30 @@ void adjustOpenFilesLimit(void) {
} }
if (f < oldlimit) f = oldlimit; if (f < oldlimit) f = oldlimit;
if (f != maxfiles) { if (f != maxfiles) {
int old_maxclients = server.maxclients;
server.maxclients = f-REDIS_EVENTLOOP_FDSET_INCR; server.maxclients = f-REDIS_EVENTLOOP_FDSET_INCR;
redisLog(REDIS_WARNING,"Unable to set the max number of files limit to %d (%s), setting the max clients configuration to %d.", if (server.maxclients < 1) {
(int) maxfiles, strerror(errno), (int) server.maxclients); redisLog(REDIS_WARNING,"Your current 'ulimit -n' "
"of %llu is not enough for Redis to start. "
"Please increase your open file limit to at least "
"%llu. Exiting.", oldlimit, maxfiles);
exit(1);
}
redisLog(REDIS_WARNING,"You requested maxclients of %d "
"requiring at least %llu max file descriptors.",
old_maxclients, maxfiles);
redisLog(REDIS_WARNING,"Redis can't set maximum open files "
"to %llu because of OS error: %s.",
maxfiles, strerror(errno));
redisLog(REDIS_WARNING,"Current maximum open files is %llu. "
"maxclients has been reduced to %d to compensate for "
"low ulimit. "
"If you need higher maxclients increase 'ulimit -n'.",
oldlimit, server.maxclients);
} else { } else {
redisLog(REDIS_NOTICE,"Max number of open files set to %d", redisLog(REDIS_NOTICE,"Increased maximum number of open files "
(int) maxfiles); "to %llu (it was originally set to %llu).",
maxfiles, oldlimit);
} }
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment