Class: LogStash::Util::ThreadDump
- Inherits:
-
Object
- Object
- LogStash::Util::ThreadDump
- Defined in:
- lib/logstash/util/thread_dump.rb
Constant Summary collapse
- SKIPPED_THREADS =
[ "Finalizer", "Reference Handler", "Signal Dispatcher" ].freeze
- THREADS_COUNT_DEFAULT =
10.freeze
- IGNORE_IDLE_THREADS_DEFAULT =
true.freeze
Instance Attribute Summary collapse
-
#dump ⇒ Object
readonly
Returns the value of attribute dump.
-
#ignore ⇒ Object
readonly
Returns the value of attribute ignore.
-
#top_count ⇒ Object
readonly
Returns the value of attribute top_count.
Instance Method Summary collapse
- #each(&block) ⇒ Object
- #idle_thread?(thread_name, data) ⇒ Boolean
-
#initialize(options = {}) ⇒ ThreadDump
constructor
A new instance of ThreadDump.
Constructor Details
#initialize(options = {}) ⇒ ThreadDump
Returns a new instance of ThreadDump.
13 14 15 16 17 18 |
# File 'lib/logstash/util/thread_dump.rb', line 13 def initialize(={}) @options = @dump = .fetch(:dump, ThreadsReport.generate({})) @top_count = .fetch(:threads, THREADS_COUNT_DEFAULT) @ignore = .fetch(:ignore_idle_threads, IGNORE_IDLE_THREADS_DEFAULT) end |
Instance Attribute Details
#dump ⇒ Object (readonly)
Returns the value of attribute dump.
11 12 13 |
# File 'lib/logstash/util/thread_dump.rb', line 11 def dump @dump end |
#ignore ⇒ Object (readonly)
Returns the value of attribute ignore.
11 12 13 |
# File 'lib/logstash/util/thread_dump.rb', line 11 def ignore @ignore end |
#top_count ⇒ Object (readonly)
Returns the value of attribute top_count.
11 12 13 |
# File 'lib/logstash/util/thread_dump.rb', line 11 def top_count @top_count end |
Instance Method Details
#each(&block) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/logstash/util/thread_dump.rb', line 20 def each(&block) i=0 dump.each do |hash| thread_name = hash["thread.name"] break if i >= top_count if ignore next if idle_thread?(thread_name, hash) end block.call(hash) i += 1 end end |
#idle_thread?(thread_name, data) ⇒ Boolean
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/logstash/util/thread_dump.rb', line 33 def idle_thread?(thread_name, data) idle = false if SKIPPED_THREADS.include?(thread_name) # these are likely JVM dependent idle = true elsif thread_name.match(/Ruby-\d+-JIT-\d+/) # This are internal JRuby JIT threads, # see java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor for details. idle = true elsif thread_name.match(/pool-\d+-thread-\d+/) # This are threads used by the internal JRuby implementation to dispatch # calls and tasks, see prg.jruby.internal.runtime.methods.DynamicMethod.call idle = true else data["thread.stacktrace"].each do |trace| if trace.start_with?("java.util.concurrent.ThreadPoolExecutor.getTask") idle = true break end end end idle end |