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
|