diff --git a/src/node_worker.cc b/src/node_worker.cc
index a734d65965a9d7..752fc48141f5e1 100644
--- a/src/node_worker.cc
+++ b/src/node_worker.cc
@@ -7,6 +7,7 @@
 #include "node_buffer.h"
 #include "node_options-inl.h"
 #include "node_perf.h"
+#include "node_snapshot_builder.h"
 #include "util-inl.h"
 #include "async_wrap-inl.h"
 
@@ -146,6 +147,20 @@ class WorkerThreadData {
     SetIsolateCreateParamsForNode(&params);
     params.array_buffer_allocator_shared = allocator;
 
+    bool use_node_snapshot = true;
+    if (w_->per_isolate_opts_) {
+      use_node_snapshot = w_->per_isolate_opts_->node_snapshot;
+    } else {
+      // IsolateData is created after the Isolate is created so we'll
+      // inherit the option from the parent here.
+      use_node_snapshot = per_process::cli_options->per_isolate->node_snapshot;
+    }
+    const SnapshotData* snapshot_data =
+        use_node_snapshot ? SnapshotBuilder::GetEmbeddedSnapshotData()
+                          : nullptr;
+    if (snapshot_data != nullptr) {
+      SnapshotBuilder::InitializeIsolateParams(snapshot_data, &params);
+    }
     w->UpdateResourceConstraints(&params.constraints);
 
     Isolate* isolate = Isolate::Allocate();
diff --git a/test/parallel/test-worker-nearheaplimit-deadlock.js b/test/parallel/test-worker-nearheaplimit-deadlock.js
index 1f38bc074da048..cf4c0d972c8719 100644
--- a/test/parallel/test-worker-nearheaplimit-deadlock.js
+++ b/test/parallel/test-worker-nearheaplimit-deadlock.js
@@ -10,7 +10,11 @@ if (!process.env.HAS_STARTED_WORKER) {
     resourceLimits: {
       maxYoungGenerationSizeMb: 0,
       maxOldGenerationSizeMb: 0
-    }
+    },
+    // With node snapshot the OOM can occur during the deserialization of
+    // the context, so disable it since we want the OOM to occur during
+    // the creation of the message port.
+    execArgv: [ ...process.execArgv, '--no-node-snapshot']
   };
 
   const worker = new Worker(__filename, opts);