summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-11-15 09:33:03 +0000
committerGitHub <noreply@github.com>2024-11-15 10:33:03 +0100
commitc9baf3849fdbe161a9251a712a71e2b91eeabf3e (patch)
tree61d082720160d928e303b4e1ae4816d3f228894a /cli
parentdcc75d5685ddb1ad3c1b97721cbc24bf6fa56c76 (diff)
perf: use available system memory for v8 isolate memory limit (#26868)
Instead of using the default 1.4Gb limit (which was meant for browser tabs) configure V8 to set the heap limit to the amount of memory available in the system. Closes https://github.com/denoland/deno/issues/23424 Closes https://github.com/denoland/deno/issues/26435 Closes https://github.com/denoland/deno/issues/21226
Diffstat (limited to 'cli')
-rw-r--r--cli/lsp/tsc.rs2
-rw-r--r--cli/tsc/mod.rs2
-rw-r--r--cli/worker.rs15
3 files changed, 18 insertions, 1 deletions
diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs
index c9b24176a..48dcb7964 100644
--- a/cli/lsp/tsc.rs
+++ b/cli/lsp/tsc.rs
@@ -34,6 +34,7 @@ use crate::util::path::relative_specifier;
use crate::util::path::to_percent_decoded_str;
use crate::util::result::InfallibleResultExt;
use crate::util::v8::convert;
+use crate::worker::create_isolate_create_params;
use deno_core::convert::Smi;
use deno_core::convert::ToV8;
use deno_core::error::StdAnyError;
@@ -4760,6 +4761,7 @@ fn run_tsc_thread(
specifier_map,
request_rx,
)],
+ create_params: create_isolate_create_params(),
startup_snapshot: Some(tsc::compiler_snapshot()),
inspector: has_inspector_server,
..Default::default()
diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs
index 452d5c165..8f8bed20a 100644
--- a/cli/tsc/mod.rs
+++ b/cli/tsc/mod.rs
@@ -9,6 +9,7 @@ use crate::npm::CliNpmResolver;
use crate::resolver::CjsTracker;
use crate::util::checksum;
use crate::util::path::mapped_specifier_for_tsc;
+use crate::worker::create_isolate_create_params;
use deno_ast::MediaType;
use deno_core::anyhow::anyhow;
@@ -1104,6 +1105,7 @@ pub fn exec(request: Request) -> Result<Response, AnyError> {
root_map,
remapped_specifiers,
)],
+ create_params: create_isolate_create_params(),
..Default::default()
});
diff --git a/cli/worker.rs b/cli/worker.rs
index 1afe37e34..c6cbf77f1 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -555,6 +555,7 @@ impl CliMainWorkerFactory {
permissions,
v8_code_cache: shared.code_cache.clone(),
};
+
let options = WorkerOptions {
bootstrap: BootstrapOptions {
deno_version: crate::version::DENO_VERSION_INFO.deno.to_string(),
@@ -585,7 +586,7 @@ impl CliMainWorkerFactory {
},
extensions: custom_extensions,
startup_snapshot: crate::js::deno_isolate_init(),
- create_params: None,
+ create_params: create_isolate_create_params(),
unsafely_ignore_certificate_errors: shared
.options
.unsafely_ignore_certificate_errors
@@ -786,6 +787,7 @@ fn create_web_worker_callback(
},
extensions: vec![],
startup_snapshot: crate::js::deno_isolate_init(),
+ create_params: create_isolate_create_params(),
unsafely_ignore_certificate_errors: shared
.options
.unsafely_ignore_certificate_errors
@@ -806,6 +808,17 @@ fn create_web_worker_callback(
})
}
+/// By default V8 uses 1.4Gb heap limit which is meant for browser tabs.
+/// Instead probe for the total memory on the system and use it instead
+/// as a default.
+pub fn create_isolate_create_params() -> Option<v8::CreateParams> {
+ let maybe_mem_info = deno_runtime::sys_info::mem_info();
+ maybe_mem_info.map(|mem_info| {
+ v8::CreateParams::default()
+ .heap_limits_from_system_memory(mem_info.total, 0)
+ })
+}
+
#[allow(clippy::print_stdout)]
#[allow(clippy::print_stderr)]
#[cfg(test)]