Class: God::Conditions::MemoryUsage

Inherits:
PollCondition show all
Defined in:
lib/god/conditions/memory_usage.rb

Overview

Condition Symbol :memory_usage Type: Poll

Trigger when the resident memory of a process is above a specified limit.

Paramaters Required pid_file is the pid file of the process in question. Automatically populated for Watches. above is the amount of resident memory (in kilobytes) above which the condition should trigger. You can also use the sugar methods #kilobytes, #megabytes, and #gigabytes to clarify this amount (see examples).

Examples

Trigger if the process is using more than 100 megabytes of resident memory (from a Watch):

on.condition(:memory_usage) do |c|
c.above = 100.megabytes
end

Non-Watch Tasks must specify a PID file:

on.condition(:memory_usage) do |c|
c.above = 100.megabytes
c.pid_file = "/var/run/mongrel.3000.pid"
end

Instance Attribute Summary collapse

Attributes inherited from PollCondition

#interval

Attributes inherited from God::Condition

#info, #notify, #phase, #transition

Attributes inherited from Behavior

#watch

Instance Method Summary collapse

Methods inherited from PollCondition

#after, #before

Methods inherited from God::Condition

#friendly_name, generate, valid?

Methods inherited from Behavior

#after_restart, #after_start, #after_stop, #before_restart, #before_start, #before_stop, #friendly_name, generate

Methods included from God::Configurable

#base_name, complain, #complain, #friendly_name

Constructor Details

#initializeMemoryUsage

Returns a new instance of MemoryUsage.



36
37
38
39
40
# File 'lib/god/conditions/memory_usage.rb', line 36

def initialize
  super
  self.above = nil
  self.times = [1, 1]
end

Instance Attribute Details

#aboveObject

Returns the value of attribute above.



34
35
36
# File 'lib/god/conditions/memory_usage.rb', line 34

def above
  @above
end

#pid_fileObject

Returns the value of attribute pid_file.



34
35
36
# File 'lib/god/conditions/memory_usage.rb', line 34

def pid_file
  @pid_file
end

#timesObject

Returns the value of attribute times.



34
35
36
# File 'lib/god/conditions/memory_usage.rb', line 34

def times
  @times
end

Instance Method Details

#pidObject



54
55
56
# File 'lib/god/conditions/memory_usage.rb', line 54

def pid
  self.pid_file ? File.read(self.pid_file).strip.to_i : self.watch.pid
end

#prepareObject



42
43
44
45
46
47
48
# File 'lib/god/conditions/memory_usage.rb', line 42

def prepare
  if self.times.kind_of?(Integer)
    self.times = [self.times, self.times]
  end
  
  @timeline = Timeline.new(self.times[1])
end

#resetObject



50
51
52
# File 'lib/god/conditions/memory_usage.rb', line 50

def reset
  @timeline.clear
end

#testObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/god/conditions/memory_usage.rb', line 65

def test
  process = System::Process.new(self.pid)
  @timeline.push(process.memory)
  
  history = "[" + @timeline.map { |x| "#{x > self.above ? '*' : ''}#{x}kb" }.join(", ") + "]"
  
  if @timeline.select { |x| x > self.above }.size >= self.times.first
    self.info = "memory out of bounds #{history}"
    return true
  else
    self.info = "memory within bounds #{history}"
    return false
  end
end

#valid?Boolean

Returns:

  • (Boolean)


58
59
60
61
62
63
# File 'lib/god/conditions/memory_usage.rb', line 58

def valid?
  valid = true
  valid &= complain("Attribute 'pid_file' must be specified", self) if self.pid_file.nil? && self.watch.pid_file.nil?
  valid &= complain("Attribute 'above' must be specified", self) if self.above.nil?
  valid
end