Adjust |ulimit -n| automatically, no bash required (#5586)

This commit is contained in:
Michael Vines 2019-08-21 14:55:58 -07:00 committed by GitHub
parent f18aa4e423
commit d651cb7a25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 3 deletions

View File

@ -431,6 +431,45 @@ fn get_bank_forks(
(bank_forks, bank_forks_info, leader_schedule_cache)
}
#[cfg(not(unix))]
fn adjust_ulimit_nofile() {}
#[cfg(unix)]
fn adjust_ulimit_nofile() {
// Rocks DB likes to have many open files. The default open file descriptor limit is
// usually not enough
let desired_nofile = 65000;
fn get_nofile() -> libc::rlimit {
let mut nofile = libc::rlimit {
rlim_cur: 0,
rlim_max: 0,
};
if unsafe { libc::getrlimit(libc::RLIMIT_NOFILE, &mut nofile) } != 0 {
warn!("getrlimit(RLIMIT_NOFILE) failed");
}
nofile
}
let mut nofile = get_nofile();
if nofile.rlim_cur < desired_nofile {
nofile.rlim_cur = desired_nofile;
if unsafe { libc::setrlimit(libc::RLIMIT_NOFILE, &nofile) } != 0 {
error!(
"Unable to increase the maximum open file descriptor limit to {}",
desired_nofile
);
if cfg!(target_os = "macos") {
error!("On mac OS you may need to run |sudo launchctl limit maxfiles 65536 200000| first");
}
}
nofile = get_nofile();
}
info!("Maximum open file descriptors: {}", nofile.rlim_cur);
}
pub fn new_banks_from_blocktree(
blocktree_path: &Path,
account_paths: Option<String>,
@ -448,6 +487,8 @@ pub fn new_banks_from_blocktree(
) {
let genesis_block = GenesisBlock::load(blocktree_path).expect("Failed to load genesis block");
adjust_ulimit_nofile();
let (blocktree, ledger_signal_receiver, completed_slots_receiver) =
Blocktree::open_with_signal(blocktree_path).expect("Failed to open ledger database");

View File

@ -3,9 +3,6 @@
# Adjusts system settings for optimal fullnode performance
#
# shellcheck source=scripts/ulimit-n.sh
source "$(dirname "${BASH_SOURCE[0]}")"/ulimit-n.sh
sysctl_write() {
declare name=$1
declare new_value=$2