zombie_passenger_killer 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock
CHANGED
@@ -27,22 +27,6 @@ module ZombiePassengerKiller
|
|
27
27
|
raise $!
|
28
28
|
end
|
29
29
|
|
30
|
-
def store_current_cpu(processes)
|
31
|
-
keys_to_remove = @history.keys - processes.map{|x| x[:pid] }
|
32
|
-
keys_to_remove.each{|k| !@history.delete k }
|
33
|
-
|
34
|
-
processes.each do |process|
|
35
|
-
@history[process[:pid]] ||= []
|
36
|
-
@history[process[:pid]] << process[:cpu]
|
37
|
-
@history[process[:pid]] = @history[process[:pid]].last(@history_entries)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def get_strace(pid, time)
|
42
|
-
Process.getpgid(pid) rescue return 'No such process'
|
43
|
-
`( strace -p #{pid} 2>&1 ) & sleep #{time} ; kill $! 2>&1`
|
44
|
-
end
|
45
|
-
|
46
30
|
def hunt_zombies
|
47
31
|
active_pids_in_passenger_status = passenger_pids
|
48
32
|
active_processes_in_processlist = process_status
|
@@ -63,6 +47,24 @@ module ZombiePassengerKiller
|
|
63
47
|
end
|
64
48
|
end
|
65
49
|
|
50
|
+
private
|
51
|
+
|
52
|
+
def store_current_cpu(processes)
|
53
|
+
keys_to_remove = @history.keys - processes.map{|x| x[:pid] }
|
54
|
+
keys_to_remove.each{|k| !@history.delete k }
|
55
|
+
|
56
|
+
processes.each do |process|
|
57
|
+
@history[process[:pid]] ||= []
|
58
|
+
@history[process[:pid]] << process[:cpu]
|
59
|
+
@history[process[:pid]] = @history[process[:pid]].last(@history_entries)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_strace(pid, time)
|
64
|
+
Process.getpgid(pid) rescue return 'No such process'
|
65
|
+
`( strace -p #{pid} 2>&1 ) & sleep #{time} ; kill $! 2>&1`
|
66
|
+
end
|
67
|
+
|
66
68
|
# return array of pids reported from passenger-status command, nil if passenger-status doesn't run
|
67
69
|
def passenger_pids
|
68
70
|
pids = %x(#{'rvmsudo ' if @rvmsudo}passenger-status|grep PID).split("\n").map { |x| x.strip.match(/PID: \d*/).to_s.split[1].to_i }
|
@@ -70,7 +72,7 @@ module ZombiePassengerKiller
|
|
70
72
|
end
|
71
73
|
|
72
74
|
def process_status
|
73
|
-
%x(ps -eo pid,pcpu,args|grep -v grep|
|
75
|
+
%x(ps -eo pid,pcpu,args|grep -v grep|egrep '#{@pattern}').split("\n").map do |line|
|
74
76
|
values = line.strip.split[0..1]
|
75
77
|
{:pid => values.first.to_i, :cpu => values.last.to_f}
|
76
78
|
end
|
@@ -103,7 +103,7 @@ describe ZombiePassengerKiller do
|
|
103
103
|
it "kills normal processes" do
|
104
104
|
pid = start_bogus_process
|
105
105
|
lambda{
|
106
|
-
killer.kill_zombie
|
106
|
+
killer.send(:kill_zombie, pid)
|
107
107
|
sleep 0.1
|
108
108
|
}.should change{ process_alive?(pid) }
|
109
109
|
end
|
@@ -111,37 +111,37 @@ describe ZombiePassengerKiller do
|
|
111
111
|
it "kills hanging processes" do
|
112
112
|
pid = start_bogus_process :hang => true
|
113
113
|
lambda{
|
114
|
-
killer.kill_zombie
|
114
|
+
killer.send(:kill_zombie, pid)
|
115
115
|
sleep 0.1
|
116
116
|
}.should change{ process_alive?(pid) }
|
117
117
|
end
|
118
118
|
|
119
119
|
it "prints an strace of the process" do
|
120
120
|
pid = start_bogus_process
|
121
|
-
killer.kill_zombie
|
121
|
+
killer.send(:kill_zombie, pid)
|
122
122
|
output.should include('attach:')
|
123
123
|
end
|
124
124
|
|
125
125
|
it "does not take a strace of a dead process" do
|
126
|
-
killer.kill_zombie
|
126
|
+
killer.send(:kill_zombie, 111)
|
127
127
|
output.should_not include('attach:')
|
128
128
|
end
|
129
129
|
|
130
130
|
it "does not fail with an unknown pid" do
|
131
|
-
killer.kill_zombie
|
131
|
+
killer.send(:kill_zombie, 111)
|
132
132
|
output.should include('No such process')
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
136
|
describe "#log" do
|
137
137
|
it "logs simple when :show_times is not given" do
|
138
|
-
killer.log "X"
|
138
|
+
killer.send(:log, "X")
|
139
139
|
output.should == "X\n"
|
140
140
|
end
|
141
141
|
|
142
142
|
it "logs simple when :show_times is not given" do
|
143
143
|
@options = {:show_times => true}
|
144
|
-
killer.log "X"
|
144
|
+
killer.send(:log, "X")
|
145
145
|
output.should include(Time.now.year.to_s)
|
146
146
|
end
|
147
147
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zombie_passenger_killer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -45,7 +45,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
45
|
version: '0'
|
46
46
|
segments:
|
47
47
|
- 0
|
48
|
-
hash: -
|
48
|
+
hash: -3534877582481648676
|
49
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
version: '0'
|
55
55
|
segments:
|
56
56
|
- 0
|
57
|
-
hash: -
|
57
|
+
hash: -3534877582481648676
|
58
58
|
requirements: []
|
59
59
|
rubyforge_project:
|
60
60
|
rubygems_version: 1.8.24
|