diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb
index ab7e7a06a77417bf22935a1606012478055b9eb2..744c489d46e7f307dddeded5c33f7507664d1f8f 100644
--- a/lib/gitlab/metrics/method_call.rb
+++ b/lib/gitlab/metrics/method_call.rb
@@ -18,6 +18,24 @@ module Gitlab
         end
       end
 
+      def self.call_measurement_enabled?
+        return @call_measurement_enabled unless call_measurement_enabled_cache_expired?
+        MUTEX.synchronize do
+          return @call_measurement_enabled unless call_measurement_enabled_cache_expired?
+          @call_measurement_enabled_cache_expires_at = Time.now + 5.minutes
+          @call_measurement_enabled = Feature.get(:prometheus_metrics_method_instrumentation).enabled?
+        end
+      end
+
+      def self.call_measurement_enabled_cache_expired?
+        @call_measurement_enabled.nil? || @call_measurement_enabled_cache_expires_at.nil? || @call_measurement_enabled_cache_expires_at < Time.now
+      end
+
+      def self.call_measurement_enabled_cache_expire
+        @call_measurement_enabled = nil
+        @call_measurement_enabled_cache_expires_at = nil
+      end
+
       # name - The full name of the method (including namespace) such as
       #        `User#sign_in`.
       #
@@ -45,7 +63,7 @@ module Gitlab
         @cpu_time += cpu_time
         @call_count += 1
 
-        if call_measurement_enabled? && above_threshold?
+        if self.class.call_measurement_enabled? && above_threshold?
           self.class.call_duration_histogram.observe(@transaction.labels.merge(labels), real_time / 1000.0)
         end
 
@@ -70,12 +88,6 @@ module Gitlab
       def above_threshold?
         real_time >= Metrics.method_call_threshold
       end
-
-      def call_measurement_enabled?
-        Rails.cache.fetch(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes) do
-          Feature.get(:prometheus_metrics_method_instrumentation).enabled?
-        end
-      end
     end
   end
 end
diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb
index df4c5167497fdd29317ee7af80c075d0a3982314..f514fdd70ed8f9a16b4210b63fb5ea5c1b6022d5 100644
--- a/spec/lib/gitlab/metrics/method_call_spec.rb
+++ b/spec/lib/gitlab/metrics/method_call_spec.rb
@@ -20,18 +20,35 @@ describe Gitlab::Metrics::MethodCall do
 
       context 'prometheus instrumentation is enabled' do
         before do
+          allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original
+          described_class.call_measurement_enabled_cache_expire
           Feature.get(:prometheus_metrics_method_instrumentation).enable
         end
 
-        it 'feature check is cached for 5 minutes' do
-          allow(Feature.get(:prometheus_metrics_method_instrumentation)).to receive(:enabled?).and_call_original
-          allow(Rails.cache).to receive(:fetch).and_call_original
+        around do |example|
+          Timecop.freeze do
+            example.run
+          end
+        end
 
-          method_call.measure { 'foo' }
-          method_call.measure { 'foo' }
+        it 'caches subsequent invocations of feature check' do
+          10.times do
+            method_call.measure { 'foo' }
+          end
+
+          expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).once
+        end
+
+        it 'expires feature check cache after 5 minutes' do
+          10.times do
+            method_call.measure { 'foo' }
+          end
+
+          Timecop.travel(Time.now + 5.minutes) do
+            method_call.measure { 'foo' }
+          end
 
           expect(Feature.get(:prometheus_metrics_method_instrumentation)).to have_received(:enabled?).twice
-          expect(Rails.cache).to have_received(:fetch).with(:prometheus_metrics_method_instrumentation_enabled, expires_in: 5.minutes).twice
         end
 
         it 'observes the performance of the supplied block' do
@@ -45,6 +62,7 @@ describe Gitlab::Metrics::MethodCall do
 
       context 'prometheus instrumentation is disabled' do
         before do
+          described_class.call_measurement_enabled_cache_expire
           Feature.get(:prometheus_metrics_method_instrumentation).disable
         end