Merge branch 'sh-remove-allocation-tracking-influxdb' into 'master'
Remove allocation tracking code from InfluxDB sampler for performance Closes gitlab-com/infrastructure#3250 See merge request gitlab-org/gitlab-ce!15834
This commit is contained in:
commit
3daa733139
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Remove allocation tracking code from InfluxDB sampler for performance
|
||||
merge_request:
|
||||
author:
|
||||
type: performance
|
|
@ -27,7 +27,6 @@ module Gitlab
|
|||
def sample
|
||||
sample_memory_usage
|
||||
sample_file_descriptors
|
||||
sample_objects
|
||||
sample_gc
|
||||
|
||||
flush
|
||||
|
@ -48,29 +47,6 @@ module Gitlab
|
|||
add_metric('file_descriptors', value: System.file_descriptor_count)
|
||||
end
|
||||
|
||||
if Metrics.mri?
|
||||
def sample_objects
|
||||
sample = Allocations.to_hash
|
||||
counts = sample.each_with_object({}) do |(klass, count), hash|
|
||||
name = klass.name
|
||||
|
||||
next unless name
|
||||
|
||||
hash[name] = count
|
||||
end
|
||||
|
||||
# Symbols aren't allocated so we'll need to add those manually.
|
||||
counts['Symbol'] = Symbol.all_symbols.length
|
||||
|
||||
counts.each do |name, count|
|
||||
add_metric('object_counts', { count: count }, type: name)
|
||||
end
|
||||
end
|
||||
else
|
||||
def sample_objects
|
||||
end
|
||||
end
|
||||
|
||||
def sample_gc
|
||||
time = GC::Profiler.total_time * 1000.0
|
||||
stats = GC.stat.merge(total_time: time)
|
||||
|
|
|
@ -48,7 +48,6 @@ module Gitlab
|
|||
def sample
|
||||
start_time = System.monotonic_time
|
||||
sample_gc
|
||||
sample_objects
|
||||
|
||||
metrics[:memory_usage].set(labels, System.memory_usage)
|
||||
metrics[:file_descriptors].set(labels, System.file_descriptor_count)
|
||||
|
@ -68,32 +67,6 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
def sample_objects
|
||||
list_objects.each do |name, count|
|
||||
metrics[:objects_total].set(labels.merge(class: name), count)
|
||||
end
|
||||
end
|
||||
|
||||
if Metrics.mri?
|
||||
def list_objects
|
||||
sample = Allocations.to_hash
|
||||
counts = sample.each_with_object({}) do |(klass, count), hash|
|
||||
name = klass.name
|
||||
|
||||
next unless name
|
||||
|
||||
hash[name] = count
|
||||
end
|
||||
|
||||
# Symbols aren't allocated so we'll need to add those manually.
|
||||
counts['Symbol'] = Symbol.all_symbols.length
|
||||
counts
|
||||
end
|
||||
else
|
||||
def list_objects
|
||||
end
|
||||
end
|
||||
|
||||
def worker_label
|
||||
return {} unless defined?(Unicorn::Worker)
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ describe Gitlab::Metrics::Samplers::InfluxSampler do
|
|||
it 'samples various statistics' do
|
||||
expect(sampler).to receive(:sample_memory_usage)
|
||||
expect(sampler).to receive(:sample_file_descriptors)
|
||||
expect(sampler).to receive(:sample_objects)
|
||||
expect(sampler).to receive(:sample_gc)
|
||||
expect(sampler).to receive(:flush)
|
||||
|
||||
|
@ -72,28 +71,6 @@ describe Gitlab::Metrics::Samplers::InfluxSampler do
|
|||
end
|
||||
end
|
||||
|
||||
if Gitlab::Metrics.mri?
|
||||
describe '#sample_objects' do
|
||||
it 'adds a metric containing the amount of allocated objects' do
|
||||
expect(sampler).to receive(:add_metric)
|
||||
.with(/object_counts/, an_instance_of(Hash), an_instance_of(Hash))
|
||||
.at_least(:once)
|
||||
.and_call_original
|
||||
|
||||
sampler.sample_objects
|
||||
end
|
||||
|
||||
it 'ignores classes without a name' do
|
||||
expect(Allocations).to receive(:to_hash).and_return({ Class.new => 4 })
|
||||
|
||||
expect(sampler).not_to receive(:add_metric)
|
||||
.with('object_counts', an_instance_of(Hash), type: nil)
|
||||
|
||||
sampler.sample_objects
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#sample_gc' do
|
||||
it 'adds a metric containing garbage collection statistics' do
|
||||
expect(GC::Profiler).to receive(:total_time).and_return(0.24)
|
||||
|
|
|
@ -11,7 +11,6 @@ describe Gitlab::Metrics::Samplers::RubySampler do
|
|||
it 'samples various statistics' do
|
||||
expect(Gitlab::Metrics::System).to receive(:memory_usage)
|
||||
expect(Gitlab::Metrics::System).to receive(:file_descriptor_count)
|
||||
expect(sampler).to receive(:sample_objects)
|
||||
expect(sampler).to receive(:sample_gc)
|
||||
|
||||
sampler.sample
|
||||
|
@ -65,26 +64,4 @@ describe Gitlab::Metrics::Samplers::RubySampler do
|
|||
sampler.sample
|
||||
end
|
||||
end
|
||||
|
||||
if Gitlab::Metrics.mri?
|
||||
describe '#sample_objects' do
|
||||
it 'adds a metric containing the amount of allocated objects' do
|
||||
expect(sampler.metrics[:objects_total]).to receive(:set)
|
||||
.with(include(class: anything), be > 0)
|
||||
.at_least(:once)
|
||||
.and_call_original
|
||||
|
||||
sampler.sample
|
||||
end
|
||||
|
||||
it 'ignores classes without a name' do
|
||||
expect(Allocations).to receive(:to_hash).and_return({ Class.new => 4 })
|
||||
|
||||
expect(sampler.metrics[:objects_total]).not_to receive(:set)
|
||||
.with(include(class: 'object_counts'), anything)
|
||||
|
||||
sampler.sample
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue