diff --git a/metrics_server/metrics_server.rb b/metrics_server/metrics_server.rb
index 873489b444ed342a26ecae64364e16797168bc23..f504d075498581c651c2384726164a9970e07460 100644
--- a/metrics_server/metrics_server.rb
+++ b/metrics_server/metrics_server.rb
@@ -17,6 +17,12 @@ def start_for_puma
       end
 
       supervisor = PumaProcessSupervisor.instance
+
+      at_exit do
+        Gitlab::AppLogger.info("Puma process #{Process.pid} is exiting, shutting down metrics server...")
+        supervisor.shutdown
+      end
+
       supervisor.supervise(start_server.call) do
         Gitlab::AppLogger.info('Puma metrics server terminated, restarting...')
         start_server.call