sidekiq_utils 1.0.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|