Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-01-12 16:59:30 +0300
committerYorick Peterse <yorickpeterse@gmail.com>2016-01-12 16:59:30 +0300
commit5679ee0120ab45829b847d55d3a2253735856b3f (patch)
treed5cd063e87e47994c3ef34cfc1958d6be21cb644 /spec/lib/gitlab/metrics/transaction_spec.rb
parent587f850170a38e2642c0de76fb69efdeae930d66 (diff)
Track memory allocated during a transaction
This gives a very rough estimate of how much memory is allocated during a transaction. This only works reliably when using a single-threaded application server and a Ruby implementation with a GIL as otherwise memory allocated by other threads might skew the statistics. Sadly there's no way around this as Ruby doesn't provide a reliable way of gathering accurate object sizes upon allocation on a per-thread basis.
Diffstat (limited to 'spec/lib/gitlab/metrics/transaction_spec.rb')
-rw-r--r--spec/lib/gitlab/metrics/transaction_spec.rb29
1 files changed, 25 insertions, 4 deletions
diff --git a/spec/lib/gitlab/metrics/transaction_spec.rb b/spec/lib/gitlab/metrics/transaction_spec.rb
index 6bdeb719491..1d5a51a157e 100644
--- a/spec/lib/gitlab/metrics/transaction_spec.rb
+++ b/spec/lib/gitlab/metrics/transaction_spec.rb
@@ -11,6 +11,14 @@ describe Gitlab::Metrics::Transaction do
end
end
+ describe '#allocated_memory' do
+ it 'returns the allocated memory in bytes' do
+ transaction.run { 'a' * 32 }
+
+ expect(transaction.allocated_memory).to be_a_kind_of(Numeric)
+ end
+ end
+
describe '#run' do
it 'yields the supplied block' do
expect { |b| transaction.run(&b) }.to yield_control
@@ -43,8 +51,10 @@ describe Gitlab::Metrics::Transaction do
transaction.increment(:time, 1)
transaction.increment(:time, 2)
+ values = { duration: 0.0, time: 3, allocated_memory: a_kind_of(Numeric) }
+
expect(transaction).to receive(:add_metric).
- with('transactions', { duration: 0.0, time: 3 }, {})
+ with('transactions', values, {})
transaction.track_self
end
@@ -54,8 +64,14 @@ describe Gitlab::Metrics::Transaction do
it 'sets a value' do
transaction.set(:number, 10)
+ values = {
+ duration: 0.0,
+ number: 10,
+ allocated_memory: a_kind_of(Numeric)
+ }
+
expect(transaction).to receive(:add_metric).
- with('transactions', { duration: 0.0, number: 10 }, {})
+ with('transactions', values, {})
transaction.track_self
end
@@ -80,8 +96,13 @@ describe Gitlab::Metrics::Transaction do
describe '#track_self' do
it 'adds a metric for the transaction itself' do
+ values = {
+ duration: transaction.duration,
+ allocated_memory: a_kind_of(Numeric)
+ }
+
expect(transaction).to receive(:add_metric).
- with('transactions', { duration: transaction.duration }, {})
+ with('transactions', values, {})
transaction.track_self
end
@@ -104,7 +125,7 @@ describe Gitlab::Metrics::Transaction do
hash = {
series: 'rails_transactions',
tags: { action: 'Foo#bar' },
- values: { duration: 0.0 },
+ values: { duration: 0.0, allocated_memory: a_kind_of(Numeric) },
timestamp: an_instance_of(Fixnum)
}