Class: Rbkit::Profiler
- Inherits:
-
Object
- Object
- Rbkit::Profiler
- Defined in:
- lib/rbkit.rb
Instance Attribute Summary collapse
-
#pub_port ⇒ Object
Returns the value of attribute pub_port.
-
#request_port ⇒ Object
Returns the value of attribute request_port.
Instance Method Summary collapse
-
#initialize(pub_port, request_port) ⇒ Profiler
constructor
A new instance of Profiler.
- #make_clean_exit(exiting: false) ⇒ Object
- #process_incoming_request(incoming_request) ⇒ Object
- #start_server(enable_object_trace: false, enable_gc_stats: false) ⇒ Object
- #stop_server ⇒ Object
Constructor Details
#initialize(pub_port, request_port) ⇒ Profiler
Returns a new instance of Profiler.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/rbkit.rb', line 14 def initialize(pub_port, request_port) [pub_port, request_port].each{|port| validate_port_range(port) } @pub_port = pub_port @request_port = request_port @profiler_thread = nil @stop_thread = false @server_running = false @gc_stats_timer = Rbkit::Timer.new(5) do data = RbkitGC.stat Rbkit.send_hash_as_event(data, Rbkit::EVENT_TYPES[:gc_stats]) end @message_dispatch_timer = Rbkit::Timer.new(1) do Rbkit. end end |
Instance Attribute Details
#pub_port ⇒ Object
Returns the value of attribute pub_port.
12 13 14 |
# File 'lib/rbkit.rb', line 12 def pub_port @pub_port end |
#request_port ⇒ Object
Returns the value of attribute request_port.
12 13 14 |
# File 'lib/rbkit.rb', line 12 def request_port @request_port end |
Instance Method Details
#make_clean_exit(exiting: false) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/rbkit.rb', line 73 def make_clean_exit(exiting: false) return false if !@server_running @stop_thread = true stop_server @server_running = false true end |
#process_incoming_request(incoming_request) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rbkit.rb', line 54 def process_incoming_request(incoming_request) case incoming_request when "start_memory_profile" Rbkit.start_stat_tracing @enable_gc_stats = true when "stop_memory_profile" Rbkit.stop_stat_tracing @enable_gc_stats = false when "trigger_gc" GC.start when "objectspace_snapshot" Rbkit.send_objectspace_dump end end |
#start_server(enable_object_trace: false, enable_gc_stats: false) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rbkit.rb', line 30 def start_server(enable_object_trace: false, enable_gc_stats: false) if @server_running || !Rbkit.start_stat_server(pub_port, request_port) $stderr.puts "Rbkit server couldn't bind to socket, check if it is already" \ " running. Profiling data will not be available." return false end Rbkit.start_stat_tracing if enable_object_trace @enable_gc_stats = enable_gc_stats @server_running = true @profiler_thread = Thread.new do loop do break if @stop_thread incoming_request = Rbkit.poll_for_request process_incoming_request(incoming_request) @gc_stats_timer.run if @enable_gc_stats @message_dispatch_timer.run # Let us sleep this thread for a bit, so as other things can run. sleep(0.05) end end at_exit { make_clean_exit(exiting: true) } true end |
#stop_server ⇒ Object
69 70 71 |
# File 'lib/rbkit.rb', line 69 def stop_server Rbkit.stop_stat_server end |