diff --git a/Gemfile b/Gemfile
index ab01b6b72dafc91d6e70b8b4c2d5f25dbbca7802..864e514ae0d4e7eb58003cc6adc0040ef8a5b6bb 100644
--- a/Gemfile
+++ b/Gemfile
@@ -326,7 +326,7 @@ group :metrics do
   gem 'influxdb', '~> 0.2', require: false
 
   # Prometheus
-  gem 'prometheus-client-mmap', '~> 0.9.9'
+  gem 'prometheus-client-mmap', '~> 0.9.10'
   gem 'raindrops', '~> 0.18'
 end
 
diff --git a/Gemfile.lock b/Gemfile.lock
index 6fd74c1da7831d5accc5ad5d3baeb9e1ba780507..fec34622be3902b51efc8e775942b7ee9db95aaa 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -715,7 +715,7 @@ GEM
       parser
       unparser
     procto (0.0.3)
-    prometheus-client-mmap (0.9.9)
+    prometheus-client-mmap (0.9.10)
     pry (0.11.3)
       coderay (~> 1.1.0)
       method_source (~> 0.9.0)
@@ -1250,7 +1250,7 @@ DEPENDENCIES
   org-ruby (~> 0.9.12)
   pg (~> 1.1)
   premailer-rails (~> 1.9.7)
-  prometheus-client-mmap (~> 0.9.9)
+  prometheus-client-mmap (~> 0.9.10)
   pry-byebug (~> 3.5.1)
   pry-rails (~> 0.3.4)
   puma (~> 3.12)
diff --git a/config/initializers/7_prometheus_metrics.rb b/config/initializers/7_prometheus_metrics.rb
index 143b34b5368fd298589b9afb33a896500ec558d8..6bd2256ac0ed6747b26054a1159651087c8d26eb 100644
--- a/config/initializers/7_prometheus_metrics.rb
+++ b/config/initializers/7_prometheus_metrics.rb
@@ -47,10 +47,12 @@ def prometheus_default_multiproc_dir
   end
 
   Gitlab::Cluster::LifecycleEvents.on_master_start do
+    ::Prometheus::Client.reinitialize_on_pid_change(force: true)
+
     if defined?(::Unicorn)
-      Gitlab::Metrics::Samplers::UnicornSampler.initialize_instance(Settings.monitoring.unicorn_sampler_interval).start
+      Gitlab::Metrics::Samplers::UnicornSampler.instance(Settings.monitoring.unicorn_sampler_interval).start
     elsif defined?(::Puma)
-      Gitlab::Metrics::Samplers::PumaSampler.initialize_instance(Settings.monitoring.puma_sampler_interval).start
+      Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start
     end
   end
 end
diff --git a/ee/changelogs/unreleased/66889-reset-and-reinitialize-prometheus-client-on-master-start.yml b/ee/changelogs/unreleased/66889-reset-and-reinitialize-prometheus-client-on-master-start.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a046f1a0363d79569c992d03fd30426af073700f
--- /dev/null
+++ b/ee/changelogs/unreleased/66889-reset-and-reinitialize-prometheus-client-on-master-start.yml
@@ -0,0 +1,5 @@
+---
+title: Reinitialize metrics files on webserver master process start
+merge_request: 16623
+author:
+type: fixed
diff --git a/lib/gitlab/daemon.rb b/lib/gitlab/daemon.rb
index 2f4ae010e7407c13cb6595245a9992e02a92cc09..43c159fee27b5da2e21d191d6ba4cca370c340a1 100644
--- a/lib/gitlab/daemon.rb
+++ b/lib/gitlab/daemon.rb
@@ -10,8 +10,8 @@ def self.initialize_instance(*args)
       @instance
     end
 
-    def self.instance
-      @instance ||= initialize_instance
+    def self.instance(*args)
+      @instance ||= initialize_instance(*args)
     end
 
     attr_reader :thread