memprof 0.3.8 → 0.3.9
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.
- data/ext/tracers/fd.c +42 -5
- data/ext/tracers/gc.c +16 -1
- data/ext/tracers/mysql.c +1 -1
- data/ext/tracers/resources.c +0 -2
- data/ext/util.h +2 -0
- data/memprof.gemspec +1 -1
- metadata +6 -6
data/ext/tracers/fd.c
CHANGED
@@ -27,6 +27,10 @@ struct memprof_fd_stats {
|
|
27
27
|
size_t write_requested_bytes;
|
28
28
|
size_t write_actual_bytes;
|
29
29
|
|
30
|
+
size_t recv_calls;
|
31
|
+
uint32_t recv_time;
|
32
|
+
ssize_t recv_actual_bytes;
|
33
|
+
|
30
34
|
size_t connect_calls;
|
31
35
|
uint32_t connect_time;
|
32
36
|
|
@@ -42,7 +46,7 @@ static struct memprof_fd_stats stats;
|
|
42
46
|
|
43
47
|
static ssize_t
|
44
48
|
read_tramp(int fildes, void *buf, size_t nbyte) {
|
45
|
-
|
49
|
+
uint64_t millis = 0;
|
46
50
|
int err;
|
47
51
|
ssize_t ret;
|
48
52
|
|
@@ -63,7 +67,7 @@ read_tramp(int fildes, void *buf, size_t nbyte) {
|
|
63
67
|
|
64
68
|
static ssize_t
|
65
69
|
write_tramp(int fildes, const void *buf, size_t nbyte) {
|
66
|
-
|
70
|
+
uint64_t millis = 0;
|
67
71
|
int err;
|
68
72
|
ssize_t ret;
|
69
73
|
|
@@ -82,9 +86,29 @@ write_tramp(int fildes, const void *buf, size_t nbyte) {
|
|
82
86
|
return ret;
|
83
87
|
}
|
84
88
|
|
89
|
+
static ssize_t
|
90
|
+
recv_tramp(int socket, void *buffer, size_t length, int flags) {
|
91
|
+
uint64_t millis = 0;
|
92
|
+
int err;
|
93
|
+
ssize_t ret;
|
94
|
+
|
95
|
+
millis = timeofday_ms();
|
96
|
+
ret = recv(socket, buffer, length, flags);
|
97
|
+
err = errno;
|
98
|
+
millis = timeofday_ms() - millis;
|
99
|
+
|
100
|
+
stats.recv_time += millis;
|
101
|
+
stats.recv_calls++;
|
102
|
+
if (ret > 0)
|
103
|
+
stats.recv_actual_bytes += ret;
|
104
|
+
|
105
|
+
errno = err;
|
106
|
+
return ret;
|
107
|
+
}
|
108
|
+
|
85
109
|
static int
|
86
110
|
connect_tramp(int socket, const struct sockaddr *address, socklen_t address_len) {
|
87
|
-
|
111
|
+
uint64_t millis = 0;
|
88
112
|
int err, ret;
|
89
113
|
|
90
114
|
millis = timeofday_ms();
|
@@ -102,7 +126,7 @@ connect_tramp(int socket, const struct sockaddr *address, socklen_t address_len)
|
|
102
126
|
static int
|
103
127
|
select_tramp(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout)
|
104
128
|
{
|
105
|
-
|
129
|
+
uint64_t millis = 0;
|
106
130
|
int ret, err;
|
107
131
|
|
108
132
|
millis = timeofday_ms();
|
@@ -120,7 +144,7 @@ select_tramp(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, stru
|
|
120
144
|
static int
|
121
145
|
poll_tramp(struct pollfd fds[], nfds_t nfds, int timeout)
|
122
146
|
{
|
123
|
-
|
147
|
+
uint64_t millis = 0;
|
124
148
|
int ret, err;
|
125
149
|
|
126
150
|
millis = timeofday_ms();
|
@@ -153,6 +177,7 @@ fd_trace_start() {
|
|
153
177
|
#else
|
154
178
|
insert_tramp("select", select_tramp);
|
155
179
|
insert_tramp("connect", connect_tramp);
|
180
|
+
insert_tramp("recv", recv_tramp);
|
156
181
|
#endif
|
157
182
|
}
|
158
183
|
|
@@ -195,6 +220,18 @@ fd_trace_dump(json_gen gen) {
|
|
195
220
|
json_gen_map_close(gen);
|
196
221
|
}
|
197
222
|
|
223
|
+
if (stats.recv_calls > 0) {
|
224
|
+
json_gen_cstr(gen, "recv");
|
225
|
+
json_gen_map_open(gen);
|
226
|
+
json_gen_cstr(gen, "calls");
|
227
|
+
json_gen_integer(gen, stats.recv_calls);
|
228
|
+
json_gen_cstr(gen, "time");
|
229
|
+
json_gen_integer(gen, stats.recv_time);
|
230
|
+
json_gen_cstr(gen, "actual");
|
231
|
+
json_gen_integer(gen, stats.recv_actual_bytes);
|
232
|
+
json_gen_map_close(gen);
|
233
|
+
}
|
234
|
+
|
198
235
|
if (stats.connect_calls > 0) {
|
199
236
|
json_gen_cstr(gen, "connect");
|
200
237
|
json_gen_map_open(gen);
|
data/ext/tracers/gc.c
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
#include <stdlib.h>
|
4
4
|
#include <string.h>
|
5
5
|
#include <sys/time.h>
|
6
|
+
#include <sys/resource.h>
|
6
7
|
|
7
8
|
#include "arch.h"
|
8
9
|
#include "bin_api.h"
|
@@ -14,6 +15,8 @@
|
|
14
15
|
struct memprof_gc_stats {
|
15
16
|
size_t gc_calls;
|
16
17
|
uint32_t gc_time;
|
18
|
+
uint32_t gc_utime;
|
19
|
+
uint32_t gc_stime;
|
17
20
|
};
|
18
21
|
|
19
22
|
static struct tracer tracer;
|
@@ -23,14 +26,20 @@ static void (*orig_garbage_collect)();
|
|
23
26
|
static void
|
24
27
|
gc_tramp()
|
25
28
|
{
|
26
|
-
|
29
|
+
uint64_t millis = 0;
|
30
|
+
struct rusage usage_start, usage_end;
|
27
31
|
|
28
32
|
millis = timeofday_ms();
|
33
|
+
getrusage(RUSAGE_SELF, &usage_start);
|
29
34
|
orig_garbage_collect();
|
35
|
+
getrusage(RUSAGE_SELF, &usage_end);
|
30
36
|
millis = timeofday_ms() - millis;
|
31
37
|
|
32
38
|
stats.gc_time += millis;
|
33
39
|
stats.gc_calls++;
|
40
|
+
|
41
|
+
stats.gc_utime += TVAL_TO_INT64(usage_end.ru_utime) - TVAL_TO_INT64(usage_start.ru_utime);
|
42
|
+
stats.gc_stime += TVAL_TO_INT64(usage_end.ru_stime) - TVAL_TO_INT64(usage_start.ru_stime);
|
34
43
|
}
|
35
44
|
|
36
45
|
static void
|
@@ -65,6 +74,12 @@ gc_trace_dump(json_gen gen) {
|
|
65
74
|
|
66
75
|
json_gen_cstr(gen, "time");
|
67
76
|
json_gen_integer(gen, stats.gc_time);
|
77
|
+
|
78
|
+
json_gen_cstr(gen, "utime");
|
79
|
+
json_gen_integer(gen, stats.gc_utime);
|
80
|
+
|
81
|
+
json_gen_cstr(gen, "stime");
|
82
|
+
json_gen_integer(gen, stats.gc_stime);
|
68
83
|
}
|
69
84
|
|
70
85
|
void install_gc_tracer()
|
data/ext/tracers/mysql.c
CHANGED
@@ -30,7 +30,7 @@ static int (*orig_send_query)(void *mysql, const char *stmt_str, unsigned long l
|
|
30
30
|
static int
|
31
31
|
real_query_tramp(void *mysql, const char *stmt_str, unsigned long length) {
|
32
32
|
enum memprof_sql_type type;
|
33
|
-
|
33
|
+
uint64_t millis = 0;
|
34
34
|
int ret;
|
35
35
|
|
36
36
|
millis = timeofday_ms();
|
data/ext/tracers/resources.c
CHANGED
@@ -22,8 +22,6 @@ struct memprof_resources_stats {
|
|
22
22
|
static struct tracer tracer;
|
23
23
|
static struct memprof_resources_stats stats;
|
24
24
|
|
25
|
-
#define TVAL_TO_INT64(tv) ((int64_t)tv.tv_sec*1e3 + (int64_t)tv.tv_usec*1e-3)
|
26
|
-
|
27
25
|
static void
|
28
26
|
resources_trace_start() {
|
29
27
|
struct rusage usage;
|
data/ext/util.h
CHANGED
data/memprof.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'memprof'
|
3
|
-
s.version = '0.3.
|
3
|
+
s.version = '0.3.9'
|
4
4
|
s.summary = 'Ruby Memory Profiler'
|
5
5
|
s.description = "Ruby memory profiler similar to bleak_house, but without patches to the Ruby VM"
|
6
6
|
s.homepage = "http://github.com/ice799/memprof"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memprof
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 1
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 9
|
10
|
+
version: 0.3.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joe Damato
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2011-
|
21
|
+
date: 2011-02-02 00:00:00 -08:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
requirements: []
|
139
139
|
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 1.
|
141
|
+
rubygems_version: 1.3.7
|
142
142
|
signing_key:
|
143
143
|
specification_version: 3
|
144
144
|
summary: Ruby Memory Profiler
|