Skip to content

Commit

Permalink
Combine memory statistics into a single metric with labels (#70)
Browse files Browse the repository at this point in the history
* Combine memory statistics into a single metric with labels

Use base unit, bytes

* πŸ’‡β€β™€οΈ
  • Loading branch information
robertomiranda authored Sep 25, 2024
1 parent 0b7254b commit a98c51e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
14 changes: 5 additions & 9 deletions lib/promenade/pitchfork/mem_stats.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,20 @@
module Promenade
module Pitchfork
class MemStats
Promenade.gauge :pitchfork_mem_rss do
doc "Resident Set Size of the pitchfork process, Total memory used by the process."
end

Promenade.gauge :pitchfork_shared_mem do
doc "Shared memory of the pitchfork process, memory that is shared between multiple processes."
Promenade.gauge :pitchfork_memory_usage_bytes do
doc "Memory usage in bytes, broken down by type (RSS, PSS, SHARED_MEMORY)"
end

def initialize
return unless defined?(::Pitchfork) && defined?(::Pitchfork::MemInfo)

@mem_info = ::Pitchfork::MemInfo.new(Process.pid)
@parent_mem_info = ::Pitchfork::MemInfo.new(Process.ppid)
end

def instrument
Promenade.metric(:pitchfork_mem_rss).set({}, @mem_info.rss)
Promenade.metric(:pitchfork_shared_mem).set({}, @mem_info.shared_memory)
Promenade.metric(:pitchfork_memory_usage_bytes).set({ type: "RSS" }, @mem_info.rss * 1024)
Promenade.metric(:pitchfork_memory_usage_bytes).set({ type: "PSS" }, @mem_info.pss * 1024)
Promenade.metric(:pitchfork_memory_usage_bytes).set({ type: "Shared" }, @mem_info.shared_memory * 1024)
end

def self.instrument
Expand Down
9 changes: 5 additions & 4 deletions spec/promenade/pitchfork/mem_stats_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
stub_const("Pitchfork::MemInfo", pitfork_mem_info)
allow(pitfork_mem_info).to receive(:new).and_return(pitfork_mem_info)
allow(pitfork_mem_info).to receive(:rss).and_return(100)
allow(pitfork_mem_info).to receive(:pss).and_return(50)
allow(pitfork_mem_info).to receive(:shared_memory).and_return(50)
end

Expand All @@ -22,11 +23,11 @@
it "sets the metrics correctly" do
stats = Promenade::Pitchfork::MemStats.new

expect(Promenade).to receive(:metric).with(:pitchfork_mem_rss).and_return(metric)
expect(Promenade).to receive(:metric).with(:pitchfork_shared_mem).and_return(metric)
expect(Promenade).to receive(:metric).with(:pitchfork_memory_usage_bytes).and_return(metric)

expect(metric).to receive(:set).with({}, 100)
expect(metric).to receive(:set).with({}, 50)
expect(metric).to receive(:set).with({ type: "RSS" }, 102400)
expect(metric).to receive(:set).with({ type: "PSS" }, 51200)
expect(metric).to receive(:set).with({ type: "Shared" }, 51200)

stats.instrument
end
Expand Down

0 comments on commit a98c51e

Please sign in to comment.