sidekiq_utils 1.0.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +0 -20
- data/VERSION +1 -1
- data/lib/sidekiq_utils.rb +0 -2
- data/sidekiq_utils.gemspec +3 -6
- metadata +2 -5
- data/lib/sidekiq_utils/middleware/server/memory_monitor.rb +0 -46
- data/lib/sidekiq_utils/web_extensions/memory_monitor.rb +0 -26
- data/lib/sidekiq_utils/web_extensions/views/memory.erb +0 -33
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 56c66fe07141a3c7a9c7dc02f9eb2d18c6490ec5
         | 
| 4 | 
            +
              data.tar.gz: 872564437e8b12f063d533478bef291d1457a8e3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e595c6c645e728981d8f1866db71dd6794757467ff135c62497c040470f9ce67968d1b987565036199f562e1f00ecd1754c3671e6d473aed7baddd72059bd5e6
         | 
| 7 | 
            +
              data.tar.gz: e46f265a6fc97af95229b22cdcaff141939f9e17535b9ccd1ad4c7861a56cbf487b282cf9abda3c1c4fff956c1023200fb7d9d623bba6585e5148fee753eacb9
         | 
    
        data/README.md
    CHANGED
    
    | @@ -153,26 +153,6 @@ slack: | |
| 153 153 |  | 
| 154 154 | 
             
            Simply call `SidekiqUtils::LatencyAlert.check!` at regular intervals.
         | 
| 155 155 |  | 
| 156 | 
            -
            ## Memory monitor
         | 
| 157 | 
            -
             | 
| 158 | 
            -
            This automatically checks memory usage before and after a worker is run and keeps track of which jobs consistently leak memory. Please note that this is very approximate. It also requires you running one worker process single-threaded with `-c 1`. It slows down jobs processed by that worker considerably.
         | 
| 159 | 
            -
             | 
| 160 | 
            -
            ### Configuration
         | 
| 161 | 
            -
             | 
| 162 | 
            -
            ```
         | 
| 163 | 
            -
            Sidekiq.configure_server do |config|
         | 
| 164 | 
            -
              config.server_middleware do |chain|
         | 
| 165 | 
            -
                chain.add SidekiqUtils::Middleware::Server::MemoryMonitor
         | 
| 166 | 
            -
              end
         | 
| 167 | 
            -
            end
         | 
| 168 | 
            -
            Sidekiq::Web.register SidekiqUtils::WebExtensions::MemoryMonitor
         | 
| 169 | 
            -
            Sidekiq::Web.tabs["Memory"] = "memory"
         | 
| 170 | 
            -
            ```
         | 
| 171 | 
            -
             | 
| 172 | 
            -
            ### Usage
         | 
| 173 | 
            -
             | 
| 174 | 
            -
            This will add a "Memory" tab to your Sidekiq admin which will display memory usage information.
         | 
| 175 | 
            -
             | 
| 176 156 | 
             
            ## Throughput monitor
         | 
| 177 157 |  | 
| 178 158 | 
             
            This will keep track of how many jobs of which worker class have run in the past week, as well as when it was last run.
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            2.0.0
         | 
    
        data/lib/sidekiq_utils.rb
    CHANGED
    
    | @@ -3,10 +3,8 @@ require 'sidekiq_utils/middleware/client/deprioritize' | |
| 3 3 |  | 
| 4 4 | 
             
            require 'sidekiq_utils/middleware/server/additional_serialization'
         | 
| 5 5 | 
             
            require 'sidekiq_utils/middleware/server/find_optional'
         | 
| 6 | 
            -
            require 'sidekiq_utils/middleware/server/memory_monitor'
         | 
| 7 6 | 
             
            require 'sidekiq_utils/middleware/server/throughput_monitor'
         | 
| 8 7 |  | 
| 9 | 
            -
            require 'sidekiq_utils/web_extensions/memory_monitor'
         | 
| 10 8 | 
             
            require 'sidekiq_utils/web_extensions/throughput_monitor'
         | 
| 11 9 |  | 
| 12 10 | 
             
            require 'sidekiq_utils/redis_monitor_storage'
         | 
    
        data/sidekiq_utils.gemspec
    CHANGED
    
    | @@ -2,16 +2,16 @@ | |
| 2 2 | 
             
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 3 | 
             
            # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
         | 
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 | 
            -
            # stub: sidekiq_utils  | 
| 5 | 
            +
            # stub: sidekiq_utils 2.0.0 ruby lib
         | 
| 6 6 |  | 
| 7 7 | 
             
            Gem::Specification.new do |s|
         | 
| 8 8 | 
             
              s.name = "sidekiq_utils".freeze
         | 
| 9 | 
            -
              s.version = " | 
| 9 | 
            +
              s.version = "2.0.0"
         | 
| 10 10 |  | 
| 11 11 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
         | 
| 12 12 | 
             
              s.require_paths = ["lib".freeze]
         | 
| 13 13 | 
             
              s.authors = ["Magnus von Koeller".freeze]
         | 
| 14 | 
            -
              s.date = "2019-01- | 
| 14 | 
            +
              s.date = "2019-01-28"
         | 
| 15 15 | 
             
              s.description = "Tools that make working with a major Sidekiq installation more fun.".freeze
         | 
| 16 16 | 
             
              s.email = "magnus@angel.co".freeze
         | 
| 17 17 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -38,13 +38,10 @@ Gem::Specification.new do |s| | |
| 38 38 | 
             
                "lib/sidekiq_utils/middleware/client/deprioritize.rb",
         | 
| 39 39 | 
             
                "lib/sidekiq_utils/middleware/server/additional_serialization.rb",
         | 
| 40 40 | 
             
                "lib/sidekiq_utils/middleware/server/find_optional.rb",
         | 
| 41 | 
            -
                "lib/sidekiq_utils/middleware/server/memory_monitor.rb",
         | 
| 42 41 | 
             
                "lib/sidekiq_utils/middleware/server/throughput_monitor.rb",
         | 
| 43 42 | 
             
                "lib/sidekiq_utils/redis_monitor_storage.rb",
         | 
| 44 | 
            -
                "lib/sidekiq_utils/web_extensions/memory_monitor.rb",
         | 
| 45 43 | 
             
                "lib/sidekiq_utils/web_extensions/throughput_monitor.rb",
         | 
| 46 44 | 
             
                "lib/sidekiq_utils/web_extensions/views/job_counts.erb",
         | 
| 47 | 
            -
                "lib/sidekiq_utils/web_extensions/views/memory.erb",
         | 
| 48 45 | 
             
                "lib/sidekiq_utils/web_extensions/views/throughput.erb",
         | 
| 49 46 | 
             
                "sidekiq_utils.gemspec",
         | 
| 50 47 | 
             
                "spec/spec_helper.rb"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sidekiq_utils
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Magnus von Koeller
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-01- | 
| 11 | 
            +
            date: 2019-01-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: sidekiq
         | 
| @@ -121,13 +121,10 @@ files: | |
| 121 121 | 
             
            - lib/sidekiq_utils/middleware/client/deprioritize.rb
         | 
| 122 122 | 
             
            - lib/sidekiq_utils/middleware/server/additional_serialization.rb
         | 
| 123 123 | 
             
            - lib/sidekiq_utils/middleware/server/find_optional.rb
         | 
| 124 | 
            -
            - lib/sidekiq_utils/middleware/server/memory_monitor.rb
         | 
| 125 124 | 
             
            - lib/sidekiq_utils/middleware/server/throughput_monitor.rb
         | 
| 126 125 | 
             
            - lib/sidekiq_utils/redis_monitor_storage.rb
         | 
| 127 | 
            -
            - lib/sidekiq_utils/web_extensions/memory_monitor.rb
         | 
| 128 126 | 
             
            - lib/sidekiq_utils/web_extensions/throughput_monitor.rb
         | 
| 129 127 | 
             
            - lib/sidekiq_utils/web_extensions/views/job_counts.erb
         | 
| 130 | 
            -
            - lib/sidekiq_utils/web_extensions/views/memory.erb
         | 
| 131 128 | 
             
            - lib/sidekiq_utils/web_extensions/views/throughput.erb
         | 
| 132 129 | 
             
            - sidekiq_utils.gemspec
         | 
| 133 130 | 
             
            - spec/spec_helper.rb
         | 
| @@ -1,46 +0,0 @@ | |
| 1 | 
            -
            require 'objspace'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module SidekiqUtils
         | 
| 4 | 
            -
              module Middleware
         | 
| 5 | 
            -
                module Server
         | 
| 6 | 
            -
                  class MemoryMonitor
         | 
| 7 | 
            -
                    def call(worker, job, queue)
         | 
| 8 | 
            -
                      return yield unless Sidekiq.options[:concurrency] == 1
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                      objects_before = count_allocated_objects
         | 
| 11 | 
            -
                      memory_before = get_allocated_memory
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                      GC.start(full_mark: true)
         | 
| 14 | 
            -
                      GC.disable
         | 
| 15 | 
            -
                      begin
         | 
| 16 | 
            -
                        yield
         | 
| 17 | 
            -
                      ensure
         | 
| 18 | 
            -
                        GC.enable
         | 
| 19 | 
            -
                        GC.start(full_mark: true)
         | 
| 20 | 
            -
                        objects_after = count_allocated_objects
         | 
| 21 | 
            -
                        memory_after = get_allocated_memory
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                        object_growth = objects_after - objects_before
         | 
| 24 | 
            -
                        SidekiqUtils::RedisMonitorStorage.store(
         | 
| 25 | 
            -
                          'sidekiq_memory', 'object', job, object_growth)
         | 
| 26 | 
            -
                        Sidekiq.logger.info("Object growth: #{object_growth}")
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                        memory_growth = memory_after - memory_before
         | 
| 29 | 
            -
                        SidekiqUtils::RedisMonitorStorage.store(
         | 
| 30 | 
            -
                          'sidekiq_memory', 'memory', job, memory_growth)
         | 
| 31 | 
            -
                        Sidekiq.logger.info("Memory growth: #{memory_growth}")
         | 
| 32 | 
            -
                      end
         | 
| 33 | 
            -
                    end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                    private
         | 
| 36 | 
            -
                    def count_allocated_objects
         | 
| 37 | 
            -
                      ObjectSpace.each_object.inject(0) {|count, obj| count + 1 }
         | 
| 38 | 
            -
                    end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                    def get_allocated_memory
         | 
| 41 | 
            -
                      ObjectSpace.memsize_of_all
         | 
| 42 | 
            -
                    end
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
            end
         | 
| @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            module SidekiqUtils
         | 
| 2 | 
            -
              module WebExtensions
         | 
| 3 | 
            -
                module MemoryMonitor
         | 
| 4 | 
            -
                  def self.registered(app)
         | 
| 5 | 
            -
                    view_path = File.join(File.expand_path("..", __FILE__), "views")
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                    require 'active_support/number_helper'
         | 
| 8 | 
            -
                    app.get("/memory") do
         | 
| 9 | 
            -
                      memory = SidekiqUtils::RedisMonitorStorage.retrieve('sidekiq_memory', 'memory')
         | 
| 10 | 
            -
                      object = SidekiqUtils::RedisMonitorStorage.retrieve('sidekiq_memory', 'object')
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                      @memory = (memory.keys | object.keys).map do |job|
         | 
| 13 | 
            -
                        [job,
         | 
| 14 | 
            -
                         memory[job]['average'],
         | 
| 15 | 
            -
                         object[job]['average'],
         | 
| 16 | 
            -
                         memory[job]['sum'],
         | 
| 17 | 
            -
                         object[job]['sum'],
         | 
| 18 | 
            -
                        ]
         | 
| 19 | 
            -
                      end.sort_by {|x| -x[3] }
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                      render(:erb, File.read(File.join(view_path, "memory.erb")))
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
            end
         | 
| @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            <header class='row'>
         | 
| 2 | 
            -
              <div class='col-sm-5'>
         | 
| 3 | 
            -
                <h3>Memory</h3>
         | 
| 4 | 
            -
              </div>
         | 
| 5 | 
            -
            </header>
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            <p>
         | 
| 8 | 
            -
            Data from the trailing seven days. Only a small percentage of jobs get
         | 
| 9 | 
            -
            profiled. The "absolute" numbers refer only to those jobs that did get
         | 
| 10 | 
            -
            profiled.
         | 
| 11 | 
            -
            </p>
         | 
| 12 | 
            -
            <table class='table table-striped table-bordered table-white'>
         | 
| 13 | 
            -
              <thead>
         | 
| 14 | 
            -
                <tr>
         | 
| 15 | 
            -
                  <th>Job</th>
         | 
| 16 | 
            -
                  <th>Memory growth (absolute)</th>
         | 
| 17 | 
            -
                  <th>Memory growth (per job)</th>
         | 
| 18 | 
            -
                  <th>Object growth (absolute)</th>
         | 
| 19 | 
            -
                  <th>Object growth (per job)</th>
         | 
| 20 | 
            -
                </tr>
         | 
| 21 | 
            -
              </thead>
         | 
| 22 | 
            -
              <tbody>
         | 
| 23 | 
            -
                <% @memory.each do |(job, avg_memory, avg_object, abs_memory, abs_object)| %>
         | 
| 24 | 
            -
                  <tr>
         | 
| 25 | 
            -
                    <td><%= job %></td>
         | 
| 26 | 
            -
                    <td><%= ActiveSupport::NumberHelper.number_to_human_size(abs_memory) %></td>
         | 
| 27 | 
            -
                    <td><%= ActiveSupport::NumberHelper.number_to_human_size(avg_memory) %></td>
         | 
| 28 | 
            -
                    <td><%= ActiveSupport::NumberHelper.number_to_delimited(abs_object) %></td>
         | 
| 29 | 
            -
                    <td><%= ActiveSupport::NumberHelper.number_to_delimited(avg_object) %></td>
         | 
| 30 | 
            -
                  </tr>
         | 
| 31 | 
            -
                <% end %>
         | 
| 32 | 
            -
              </tbody>
         | 
| 33 | 
            -
            </table
         |