You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Which PikiwiDB functionalities are relevant/related to the feature request?
No response
Description
PikiwiDB starts failed:
After modify fd number, it starts sucessfully.
Proposed solution
Check fd number when PikiwiDB starts as Redis.
#defineRLIMIT_NOFILE5/* max number of open files */structrlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
};
structrlimit limit;
/* This function will try to raise the max number of open files accordingly to * the configured max number of clients. It also reserves a number of file * descriptors (CONFIG_MIN_RESERVED_FDS) for extra operations of * persistence, listening sockets, log files and so forth. * * If it will not be possible to set the limit accordingly to the configured * max number of clients, the function will do the reverse setting * server.maxclients to the value that we can actually handle. */voidadjustOpenFilesLimit(server_t *server) { //come from /redis/server.c/adjustOpenFilesLimit()rlim_t maxfiles = server->maxclients+CONFIG_MIN_RESERVED_FDS;
structrlimit limit;
if (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
printf("Unable to obtain the current NOFILE limit (%s), assuming 1024 and setting the max clients configuration accordingly.",
strerror(errno));
server->maxclients = 1024-CONFIG_MIN_RESERVED_FDS;
} else {
rlim_t oldlimit = limit.rlim_cur;
/* Set the max number of files if the current limit is not enough * for our needs. */if (oldlimit < maxfiles) {
rlim_t bestlimit;
int setrlimit_error = 0;
/* Try to set the file limit to match 'maxfiles' or at least * to the higher value supported less than maxfiles. */
bestlimit = maxfiles;
while(bestlimit > oldlimit) {
rlim_t decr_step = 16;
limit.rlim_cur = bestlimit;
limit.rlim_max = bestlimit;
if (setrlimit(RLIMIT_NOFILE,&limit) != -1) break;
setrlimit_error = errno;
/* We failed to set file limit to 'bestlimit'. Try with a * smaller limit decrementing by a few FDs per iteration. */if (bestlimit < decr_step) break;
bestlimit -= decr_step;
}
/* Assume that the limit we get initially is still valid if * our last try was even lower. */if (bestlimit < oldlimit) bestlimit = oldlimit;
if (bestlimit < maxfiles) {
unsignedint old_maxclients = server->maxclients;
server->maxclients = bestlimit-CONFIG_MIN_RESERVED_FDS;
/* maxclients is unsigned so may overflow: in order * to check if maxclients is now logically less than 1 * we test indirectly via bestlimit. */if (bestlimit <= CONFIG_MIN_RESERVED_FDS) {
printf("Your current 'ulimit -n' ""of %llu is not enough for the server to start. ""Please increase your open file limit to at least ""%llu. Exiting.",
(unsignedlonglong) oldlimit,
(unsignedlonglong) maxfiles);
exit(1);
}
printf("You requested maxclients of %d ""requiring at least %llu max file descriptors.",
old_maxclients,
(unsignedlonglong) maxfiles);
printf("Server can't set maximum open files ""to %llu because of OS error: %s.",
(unsignedlonglong) maxfiles, strerror(setrlimit_error));
printf("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'.",
(unsignedlonglong) bestlimit, server->maxclients);
} else {
printf("Increased maximum number of open files ""to %llu (it was originally set to %llu).",
(unsignedlonglong) maxfiles,
(unsignedlonglong) oldlimit);
}
}
}
}
Alternatives considered
none
The text was updated successfully, but these errors were encountered:
Which PikiwiDB functionalities are relevant/related to the feature request?
No response
Description
PikiwiDB starts failed:
After modify fd number, it starts sucessfully.
Proposed solution
Check fd number when PikiwiDB starts as Redis.
Alternatives considered
none
The text was updated successfully, but these errors were encountered: