diff --git a/Project.toml b/Project.toml
index 66c0742e3..374451ed2 100644
--- a/Project.toml
+++ b/Project.toml
@@ -12,6 +12,7 @@ Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
 ExpressionExplorer = "21656369-7473-754a-2065-74616d696c43"
 FileWatching = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
 FuzzyCompletions = "fb4132e2-a121-4a70-b8a1-d5b831dcdcc2"
+GCUtils = "25d72b2e-e87f-11ef-9f1d-00155d5ae889"
 HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
 HypertextLiteral = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
 InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
@@ -43,6 +44,7 @@ Downloads = "1"
 ExpressionExplorer = "0.5, 0.6, 1"
 FileWatching = "1"
 FuzzyCompletions = "=0.5.5"
+GCUtils = "1.0.0"
 HTTP = "^1.5.2"
 HypertextLiteral = "0.7, 0.8, 0.9"
 InteractiveUtils = "1"
diff --git a/src/evaluation/Run.jl b/src/evaluation/Run.jl
index 45d48c9dc..8fe48b92c 100644
--- a/src/evaluation/Run.jl
+++ b/src/evaluation/Run.jl
@@ -32,6 +32,7 @@ function run_reactive!(
         )
     end
     try_event_call(session, NotebookExecutionDoneEvent(notebook, user_requested_run))
+	WorkspaceManager.gc_worker((session, notebook))
 	return topological_order
 end
 
@@ -487,6 +488,7 @@ function update_save_run!(
             session,
             NotebookExecutionDoneEvent(notebook, get(kwargs, :user_requested_run, true))
         )
+		WorkspaceManager.gc_worker((session, notebook))
 		topological_order
     end
 end
diff --git a/src/evaluation/WorkspaceManager.jl b/src/evaluation/WorkspaceManager.jl
index 66e31fcce..da9c044ba 100644
--- a/src/evaluation/WorkspaceManager.jl
+++ b/src/evaluation/WorkspaceManager.jl
@@ -712,4 +712,13 @@ function interrupt_workspace(session_notebook::Union{SN,Workspace}; verbose=true
     end
 end
 
+function gc_worker(session_notebook::SN)
+    try
+        workspace = get_workspace(session_notebook)
+        if isdefined(Malt, :requestgc)
+            Malt.requestgc(workspace.worker)
+        end
+    catch; end
+end
+
 end
diff --git a/src/webserver/WebServer.jl b/src/webserver/WebServer.jl
index da054d6e3..2555701c7 100644
--- a/src/webserver/WebServer.jl
+++ b/src/webserver/WebServer.jl
@@ -1,6 +1,8 @@
 import MsgPack
 import UUIDs: UUID
 import HTTP
+import GCUtils: setup_gc
+
 import Sockets
 import .PkgCompat
 
@@ -167,6 +169,9 @@ function run!(session::ServerSession)
 
     local port, serversocket = port_serversocket(hostIP, favourite_port, port_hint)
 
+    # Manual GC for the server process
+    after_http, cleanup, rest = setup_gc(360)
+
     on_shutdown() = @sync begin
         # Triggered by HTTP.jl
         @info("\nClosing Pluto... Restart Julia for a fresh session. \n\nHave a nice day! 🎈\n\n")
@@ -179,6 +184,7 @@ function run!(session::ServerSession)
         for nb in values(session.notebooks)
             @asynclog SessionActions.shutdown(session, nb; keep_in_session=false, async=false, verbose=false)
         end
+        cleanup()
     end
 
     server = HTTP.listen!(hostIP, port; stream=true, server=serversocket, on_shutdown, verbose=-1) do http::HTTP.Stream
@@ -311,6 +317,7 @@ function run!(session::ServerSession)
                 end
             end
         end
+        after_http()
     end
 
     server_running() =