I have a fix for this here:
git://github.com/tigris/god
But I've no idea how to test it. All I know is all the tests still
pass on my OSX box, I get nothing but errors running the tests on
CentOS on both my fork and the current stable versions of god.
regards,
Danial
On Nov 7, 4:27 pm, Tigris <[EMAIL PROTECTED]> wrote:
> Well picked up Cody. Same issues here. Basically the "f.gets" on an
> opened /proc file just hangs inside god. Seems to work fine outside of
> god, e.g.
>
> ruby -e 'File.open("/proc/meminfo"){|f| puts f.gets}'
>
> But if you debug the initialize() in SlashProcCaller, you can see that
> it gets *inside* the File.open(MeminfoPath), but hangs as soon as it
> tries to f.gets. Checking cpu usage while it's "hung" and it's taking
> up pretty much all the cpu.
>
> No idea how to fix this other than not use File.open() as you have
> suggested in your pastie.
>
> I thought it might be something to do with the line separator ($/), so
> I tried File.read() and tried seeing what $/ was, but all to no avail.
> No idea why File.open.gets() on /proc files works outside god but not
> inside.
>
> regards,
> Danial
>
> On Nov 7, 4:18 pm, gonzoprosperity <[EMAIL PROTECTED]> wrote:
>
> > We too experienced issues with God on CentOS. In our case, God was
> > using excessive amounts of CPU and we traced it down to issues in the
> > poller. We have this basic patch for God 0.7.8 that fixed all our
> > problems.
>
> >http://pastie.org/309318
>
> > You can execute this patch from the top-level of the God gem
> > directory.
>
> > It doesnt seem like it would make much sense, but converting the Ruby
> > File open calls to Unix process forks with backticks and just using
> > the plain old 'head' and 'cat' utilities did the trick.
>
> > YMMV. Good luck.
>
> > /Cody
>
> > On Nov 6, 6:38 pm, Tigris <[EMAIL PROTECTED]> wrote:
>
> > > Thanks Colin.
>
> > > Messing with your monkey patch a bit, it seems the modification to
> > > spawn() isn't required for me to get god to work on CENTOS. Just
> > > patching the fetch_system_profiler() fixes it.
>
> > > I managed to simplify it down to this so far:
>
> > > module God
> > > module System
> > > class SlashProcPoller
> > > def self.usable?
> > > false
> > > end
> > > end
> > > end
> > > end
>
> > > So it's obviously a bug in that poller, i'll start debugging and see
> > > if I can't dig up a patch for the god repo.
>
> > > regards,
> > > Danial
>
> > > On Nov 7, 1:21 am, "Colin Steele" <[EMAIL PROTECTED]> wrote:
>
> > > > module God
> > > > module System
> > > > class Process
> > > > alias_method :orig_fetch_system_poller, :fetch_system_poller
> > > > def fetch_system_poller
> > > > if `hostname` =~ /YOUR CENTOS HOST(S) HERE/
> > > > PortablePoller
> > > > else
> > > > orig_fetch_system_poller
> > > > end
> > > > end
> > > > end
> > > > end
> > > > class Process
> > > > def spawn(command)
> > > > fork do
> > > > uid_num = Etc.getpwnam(self.uid).uid if self.uid
> > > > gid_num = Etc.getgrnam(self.gid).gid if self.gid
>
> > > > ::Process.groups = [gid_num] if self.gid
> > > > ::Process::Sys.setgid(gid_num) if self.gid
> > > > ::Process::Sys.setuid(uid_num) if self.uid
>
> > > > $0 = command
> > > > STDIN.reopen "/dev/null"
> > > > STDOUT.reopen file_in_chroot(self.log), "a"
> > > > STDERR.reopen STDOUT
>
> > > > # close any other file descriptors
> > > > 3.upto(256){|fd| IO::new(fd).close rescue nil}
>
> > > > if self.env && self.env.is_a?(Hash)
> > > > self.env.each do |(key, value)|
> > > > ENV[key] = value
> > > > end
> > > > end
>
> > > > exec command unless command.empty?
> > > > end
> > > > end
> > > > end
> > > > end
>
> > > > On Thu, Nov 6, 2008 at 2:01 AM, Tigris <[EMAIL PROTECTED]> wrote:
>
> > > > > On Sep 14, 1:06 pm, None <[EMAIL PROTECTED]> wrote:
> > > > >> I've found and fixed my problem(s). Turns out the let-god-demonize
> > > > >> thing was a red herring. The fixes were to use the PortablePoller on
> > > > >> CENTOS, and to modify God::System::Process#spawn not to perform
> > > > >> chroot
> > > > >> and chdir. Voila!
>
> > > > > I don't suppose anyone can explain a bit better on how to achieve
> > > > > this? I'm experiencing the same problems outlined here on CENTOS also.
> > > > > Kill the processes manually after loading god and it doesn't even see
> > > > > the fact they died, nor do I see it polling in the logs, it just sits
> > > > > there apparently doing nothing.
>
> > > > > #######################
> > > > > def make_fail_safe(watcher)
> > > > > watcher.lifecycle do |on|
> > > > > on.condition(:flapping) do |c|
> > > > > c.to_state = [:start, :restart]
> > > > > c.times = 5
> > > > > c.within = 5.minutes
> > > > > c.transition = :unmonitored
> > > > > c.retry_in = 10.minutes
> > > > > c.retry_times = 5
> > > > > c.retry_within = 2.hours
> > > > > end
> > > > > end
> > > > > end
>
> > > > > God.watch do |w|
> > > > > w.name = 'apache'
> > > > > w.pid_file = '/var/run/httpd.pid'
> > > > > w.interval = 60.seconds
>
> > > > > w.start = '/etc/init.d/httpd start'
> > > > > w.stop = '/etc/init.d/httpd stop'
> > > > > w.restart = '/etc/init.d/httpd graceful'
>
> > > > > w.start_grace = 20.seconds
> > > > > w.restart_grace = 20.seconds
>
> > > > > w.behavior(:clean_pid_file)
>
> > > > > w.restart_if do |r|
> > > > > r.condition(:cpu_usage) {|c| c.notify = 'developers'; c.above =
> > > > > 80.percent; c.times = 5}
> > > > > r.condition(:cpu_usage) {|c| c.notify = 'developers'; c.above =
> > > > > 60.percent; c.times = 2}
> > > > > r.condition(:memory_usage){|c| c.notify = 'developers'; c.above =
> > > > > 500.megabytes; c.times = 5}
> > > > > r.condition(:http_response_code) do |c|
> > > > > c.notify = 'developers'
> > > > > c.host = 'www.example.com'
> > > > > c.path = '/god'
> > > > > c.code_is_not = 200
> > > > > c.timeout = 2.seconds
> > > > > end
> > > > > end
>
> > > > > make_fail_safe(w)
> > > > > end
>
> > > > > God.contact(:email) do |c|
> > > > > c.name = 'Me'
> > > > > c.email = '[EMAIL PROTECTED]'
> > > > > c.group = 'developers'
> > > > > end
> > > > > #######################
>
> > > > > regards,
> > > > > Danial
>
> > > > --
> > > > Colin Steelewww.colinsteele.org
> > > > [EMAIL PROTECTED]
> > > > Ken Kesey - "Ritual is necessary for us to know anything."
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"god.rb" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/god-rb?hl=en
-~----------~----~----~----~------~----~------~--~---