Mitigate issues from low RLIMIT_NPROC defaults. (fixes #337)
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -16,7 +16,7 @@ use tuwunel_core::{
|
||||
Result, debug, is_true,
|
||||
utils::sys::{
|
||||
compute::{nth_core_available, set_affinity},
|
||||
thread_usage, usage,
|
||||
max_threads,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -50,13 +50,19 @@ pub fn new(args: Option<&Args>) -> Result<Runtime> {
|
||||
.set(args.gc_muzzy)
|
||||
.expect("set GC_MUZZY from program argument");
|
||||
|
||||
let max_blocking_threads = max_threads()
|
||||
.expect("obtained RLIMIT_NPROC or default")
|
||||
.0
|
||||
.saturating_div(3)
|
||||
.clamp(WORKER_MIN, MAX_BLOCKING_THREADS);
|
||||
|
||||
let mut builder = Builder::new_multi_thread();
|
||||
builder
|
||||
.enable_io()
|
||||
.enable_time()
|
||||
.thread_name(WORKER_NAME)
|
||||
.worker_threads(args.worker_threads.max(WORKER_MIN))
|
||||
.max_blocking_threads(MAX_BLOCKING_THREADS)
|
||||
.max_blocking_threads(max_blocking_threads)
|
||||
.thread_keep_alive(Duration::from_secs(WORKER_KEEPALIVE))
|
||||
.global_queue_interval(args.global_event_interval)
|
||||
.event_interval(args.kernel_event_interval)
|
||||
@@ -110,7 +116,7 @@ pub fn shutdown(server: &Arc<Server>, runtime: Runtime) -> Result {
|
||||
tuwunel_core::event!(LEVEL, ?runtime_metrics, "Final runtime metrics.");
|
||||
}
|
||||
|
||||
if let Ok(resource_usage) = usage() {
|
||||
if let Ok(resource_usage) = tuwunel_core::utils::sys::usage() {
|
||||
tuwunel_core::event!(LEVEL, ?resource_usage, "Final resource usage.");
|
||||
}
|
||||
|
||||
@@ -208,7 +214,7 @@ fn set_worker_mallctl(_: usize) {}
|
||||
)]
|
||||
fn thread_stop() {
|
||||
if cfg!(any(tokio_unstable, not(feature = "release_max_log_level")))
|
||||
&& let Ok(resource_usage) = thread_usage()
|
||||
&& let Ok(resource_usage) = tuwunel_core::utils::sys::thread_usage()
|
||||
{
|
||||
tuwunel_core::debug!(?resource_usage, "Thread resource usage.");
|
||||
}
|
||||
|
||||
@@ -51,8 +51,9 @@ pub fn new(args: Option<&Args>, runtime: Option<&runtime::Handle>) -> Result<Arc
|
||||
#[cfg(feature = "sentry_telemetry")]
|
||||
let sentry_guard = crate::sentry::init(&config);
|
||||
|
||||
sys::maximize_fd_limit()
|
||||
.expect("Unable to increase maximum soft and hard file descriptor limit");
|
||||
sys::maximize_fd_limit().expect("Unable to increase maximum file descriptor limit");
|
||||
|
||||
sys::maximize_thread_limit().expect("Unable to increase maximum thread count limit");
|
||||
|
||||
let (_old_width, _new_width) = stream::set_width(config.stream_width_default);
|
||||
let (_old_amp, _new_amp) = stream::set_amplification(config.stream_amplification);
|
||||
|
||||
Reference in New Issue
Block a user