0
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
0
require 'passenger/platform_info'
0
+# Container for tabular data.
0
+ def initialize(column_names)
0
+ @column_names = column_names
0
+ def add_rows(list_of_rows)
0
+ list_of_rows.each do |row|
0
+ def remove_column(name)
0
+ i = @column_names.index(name)
0
+ @column_names.delete_at(i)
0
+ max_column_widths = [1] * @column_names.size
0
+ (@rows + [@column_names]).each do |row|
0
+ row.each_with_index do |value, i|
0
+ max_column_widths[i] = [value.to_s.size, max_column_widths[i]].max
0
+ format_string = max_column_widths.map{ |i| "%-#{i}s" }.join(" ") << "\n"
0
+ header = sprintf(format_string, *@column_names)
0
+ free_space = header.size - title.size - 2
0
+ left_bar_size = free_space / 2
0
+ right_bar_size = free_space - left_bar_size
0
+ result = "#{"-" * left_bar_size} #{title} #{"-" * right_bar_size}\n"
0
+ result << ("-" * header.size) << "\n"
0
+ result << sprintf(format_string, *row)
0
@@ -23,19 +80,18 @@ class MemoryStats
0
- printf "%-6d %-6d %-6d %-9s %-9s %s\n", pid, ppid, threads,
0
- vm_size_in_mb, private_dirty_rss_in_mb, name
0
+ return [pid, ppid, threads, vm_size_in_mb, private_dirty_rss_in_mb, name]
0
apache_processes = list_processes(:exe => PlatformInfo::HTTPD)
0
- print_process_list
_stats(apache_processes)
0
+ print_process_list
("Apache processes", apache_processes)
0
passenger_processes = list_processes(:match => /(^Passenger |^Rails:|ApplicationPoolServerExecutable)/)
0
- print_process_list
_stats(passenger_processes)
0
+ print_process_list
("Passenger processes", passenger_processes, :show_ppid => false)
0
if ::Process.uid != 0 && (apache_processes + passenger_processes).any?{ |p| p.private_dirty_rss.nil? }
0
@@ -101,23 +157,22 @@ private
0
- puts "PID PPID Thrds VM Size Private Name"
0
- def print_process_list_stats(processes)
0
+ def print_process_list(title, processes, options = {})
0
+ table = Table.new(%w{PID PPID Threads VMSize Private Name})
0
+ table.add_rows(processes)
0
+ if options.has_key?(:show_ppid) && !options[:show_ppid]
0
+ table.remove_column('PPID')
0
+ puts table.to_s(title)
0
total_private_dirty_rss = 0
0
some_private_dirty_rss_cannot_be_determined = false
0
if p.private_dirty_rss.is_a?(Numeric)
0
total_private_dirty_rss += p.private_dirty_rss
0
some_private_dirty_rss_cannot_be_determined = true
0
puts "### Processes: #{processes.size}"
0
printf "### Total private dirty RSS: %.2f MB", total_private_dirty_rss / 1024.0
Comments
No one has commented yet.