Skip to content

Commit a8361dd

Browse files
committed
Fix incorrect option handling for ps.
1 parent 158690e commit a8361dd

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

lib/memory/leak/cluster.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,12 @@ def apply_limit!(total_size_limit = @total_size_limit)
8585

8686
# Sample the memory usage of all processes in the cluster.
8787
def sample!
88-
System.memory_usages(@processes.keys).each do |process_id, memory_usage|
89-
@processes[process_id].current_size = memory_usage
88+
System.memory_usages(@processes.keys) do |process_id, memory_usage|
89+
if monitor = @processes[process_id]
90+
monitor.current_size = memory_usage
91+
else
92+
Console.warn(self, "Unknown process ID.", process_id: process_id)
93+
end
9094
end
9195
end
9296

lib/memory/leak/system.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ def self.total_memory_size
3636
# @parameter process_ids [Array(Integer)] The process IDs to monitor.
3737
# @returns [Array(Tuple(Integer, Integer))] The memory usage of the given process IDs.
3838
def self.memory_usages(process_ids)
39-
IO.popen(["ps", "-o", "pid=,rss=", *process_ids.map(&:to_s)]) do |io|
40-
io.each_line.map(&:split).map{|process_id, size| [process_id.to_i, size.to_i * 1024]}
39+
return to_enum(__method__, process_ids) unless block_given?
40+
41+
IO.popen(["ps", "-o", "pid=,rss=", "-p", process_ids.join(",")]) do |io|
42+
io.each_line.map(&:split).each do |process_id, size|
43+
yield process_id.to_i, size.to_i * 1024
44+
end
4145
end
4246
end
4347

@@ -46,7 +50,7 @@ def self.memory_usages(process_ids)
4650
# @parameter process_ids [Array(Integer)] The process IDs to monitor.
4751
# @returns [Array(Tuple(Integer, Integer))] The memory usage of the given process IDs.
4852
def self.memory_usage(process_id)
49-
IO.popen(["ps", "-o", "rss=", process_id.to_s]) do |io|
53+
IO.popen(["ps", "-o", "rss=", "-p", process_id.to_s]) do |io|
5054
return io.read.to_i * 1024
5155
end
5256
end

test/memory/leak/system.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,24 @@
2424

2525
with ".memory_usages" do
2626
it "can determine the memory usages" do
27-
result = subject.memory_usages([Process.pid])
28-
expect(result).to be_a(Array)
27+
pids = 3.times.map{Process.spawn("sleep 1")}
28+
29+
result = subject.memory_usages(pids)
2930

3031
result.each do |process_id, size|
32+
expect(pids).to be(:include?, process_id)
3133
expect(process_id).to be_a(Integer)
3234
expect(size).to be_a(Integer)
3335
end
36+
ensure
37+
pids.each do |pid|
38+
Process.kill(:TERM, pid)
39+
Process.wait(pid)
40+
end
3441
end
3542

3643
it "ignores invalid process IDs" do
3744
result = subject.memory_usages([Process.pid, 0])
38-
expect(result).to be_a(Array)
3945

4046
result.each do |process_id, size|
4147
expect(process_id).to be_a(Integer)

0 commit comments

Comments
 (0)