memprof 0.3.3 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,118 @@
1
+ = memprof (c) Joe Damato @joedamato http://timetobleed.com
2
+
3
+ Memprof is a Ruby level memory profiler that can help you find reference leaks in your application.
4
+ Memprof can also do very lightweight function call tracing to help you figure out which system calls, and library calls your code causes.
5
+
6
+ == Installing
7
+
8
+ gem install memprof
9
+
10
+ == Usage
11
+
12
+ == Memory Tracking
13
+
14
+ == Blocks (memory tracking)
15
+
16
+ Memprof.track {
17
+ 100.times{ "abc" }
18
+ 100.times{ 1.23 + 1 }
19
+ 100.times{ Module.new }
20
+ }
21
+
22
+ Outputs:
23
+
24
+ 100 file.rb:2:String
25
+ 100 file.rb:3:Float
26
+ 100 file.rb:4:Module
27
+
28
+ == Rails requests (memory tracking)
29
+
30
+ Use the Memprof::Middleware
31
+
32
+ == Dump objects
33
+
34
+ Memprof.dump {
35
+ "hello" + "world"
36
+ }
37
+
38
+ Outputs:
39
+
40
+ {
41
+ "_id": "0x19c610",
42
+ "file": "file.rb",
43
+ "line": 2,
44
+ "type": "string",
45
+ "class": "0x1ba7f0",
46
+ "class_name": "String",
47
+ "length": 10,
48
+ "data": "helloworld"
49
+ }
50
+
51
+ You can dump any Ruby object you want.
52
+
53
+ == Dumping the entire heap
54
+
55
+ Memprof.dump_all("file.json")
56
+
57
+ This will dump out every single live object as json to /tmp/file.json
58
+
59
+ == Less elegant tracking usage:
60
+
61
+ require 'memprof'
62
+ Memprof.start
63
+
64
+ # ruby code
65
+
66
+ Memprof.stats
67
+
68
+ # more ruby code
69
+
70
+ Memprof.stats
71
+ Memprof.stop
72
+
73
+ The above code will output 2 summaries, allowing you to compare which objects were
74
+ destroyed and which are still around.
75
+
76
+ Memprof.stats also takes an (optional) file name to write the output to a file.
77
+
78
+ == Function call tracing
79
+
80
+ This system is under development and the API may change without warning.
81
+
82
+ You can use the middleware Memprof::Tracer to output function tracing and request information for
83
+ each request that comes in to your app.
84
+
85
+ == Compatibility
86
+
87
+ You must have debug symbols installed or a an unstripped version of Ruby.
88
+
89
+ To install debug symbols on Debian-like systems:
90
+
91
+ apt-get install libruby1.8-dbg
92
+
93
+ Not supporting:
94
+ * OSX default Ruby
95
+ * Stripped Ruby binaries without debug symbols
96
+ * Any and all Windows Ruby builds
97
+ * Ruby 1.9+ on all systems
98
+ * 32bit systems
99
+
100
+ Supporting:
101
+ * Linux (enable-shared AND disable-shared):
102
+ * x86_64 builds of Ruby Enterprise Edition 1.8.6/1.8.7
103
+ * x86_64 builds of MRI Ruby
104
+
105
+ * Snow Leopard (enable-shared AND disable-shared):
106
+ * x86_64 builds of Ruby Enterprise Edition 1.8.6/1.8.7
107
+ * x86_64 builds of MRI Ruby
108
+
109
+ Coming soon:
110
+
111
+ Official support for Ruby 1.9
112
+ Official support for i386/i686
113
+
114
+ == Special Thanks
115
+ * Jake Douglas for the Mach O/snow leopard support.
116
+ * Aman Gupta for various bug fixes and other cleanup.
117
+ * Rob Benson for 1.9 support and cleanup.
118
+ * Paul Barry for force_gc support in Memprof::Middleware
data/ext/memprof.c CHANGED
@@ -1906,7 +1906,11 @@ init_memprof_config_extended() {
1906
1906
  /* who knows what could happen */
1907
1907
  if (TYPE(ruby_build_info) == T_STRING)
1908
1908
  fprintf(stderr, "%s\n", StringValuePtr(ruby_build_info));
1909
- errx(EX_SOFTWARE, "Memprof does not have enough data to run. Please email this output to bugs@memprof.com");
1909
+
1910
+ fprintf(stderr, "\nTry installing debug symbols (apt-get install libruby1.8-dbg or similar), or using a "
1911
+ "Ruby built with RVM (http://rvm.beginrescueend.com/)\n\n");
1912
+
1913
+ errx(EX_SOFTWARE, "If that doesn't work, please email this output to bugs@memprof.com");
1910
1914
  }
1911
1915
  }
1912
1916
 
@@ -11,6 +11,10 @@ module Memprof
11
11
  puts
12
12
  puts '-' * 80
13
13
  puts '-' * 80
14
+ if @options[:force_gc]
15
+ puts "Forcing GC...."
16
+ GC.start
17
+ end
14
18
  }
15
19
  ret
16
20
  end
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'
3
+ s.version = '0.3.5'
4
4
  s.date = '2010-04-13'
5
5
  s.summary = 'Ruby Memory Profiler'
6
6
  s.description = "Ruby memory profiler similar to bleak_house, but without patches to the Ruby VM"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 3
9
- version: 0.3.3
8
+ - 5
9
+ version: 0.3.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joe Damato
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-04-13 00:00:00 -07:00
20
+ date: 2010-04-13 00:00:00 -04:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -59,7 +59,7 @@ extra_rdoc_files: []
59
59
 
60
60
  files:
61
61
  - .gitignore
62
- - README
62
+ - README.rdoc
63
63
  - Rakefile
64
64
  - bin/memprof
65
65
  - ext/arch.h
data/README DELETED
@@ -1,72 +0,0 @@
1
- memprof (c) Joe Damato @joedamato http://timetobleed.com
2
-
3
- What is memprof?
4
- ================
5
- Memprof is a memory profiler for Ruby that requires no patches to the Ruby VM.
6
- It can help you find Ruby level memory leaks in your application.
7
-
8
- How to use
9
- ==========
10
-
11
- require 'memprof'
12
- Memprof.start
13
-
14
- # ruby code
15
-
16
- Memprof.stats
17
-
18
- # more ruby code
19
-
20
- Memprof.stats
21
- Memprof.stop
22
-
23
-
24
- The above code will output 2 summaries, allowing you to compare which objects were
25
- destroyed and which are still around.
26
-
27
- Memprof.stats also takes an (optional) file name to write the output to a file.
28
-
29
- Supported systems
30
- =================
31
- Currently supporting:
32
-
33
- Linux (enable-shared AND disable-shared):
34
- x86_64 builds of Ruby Enterprise Edition 1.8.6/1.8.7
35
- x86_64 builds of MRI Ruby
36
-
37
- Snow Leopard (enable-shared AND disable-shared):
38
- x86_64 builds of Ruby Enterprise Edition 1.8.6/1.8.7
39
- x86_64 builds of MRI Ruby
40
-
41
- Support for unstripped binaries and stripped binaries if (and only if) the
42
- symbol files live in /usr/lib/debug/
43
-
44
- You can get symbol files for system Rubies by installing -dbg packages.
45
-
46
- For example, on ubuntu: apt-get install libruby1.8-dbg
47
-
48
- Snow Leopard:
49
- x86_64 builds of Ruby Enterprise Edition 1.8.7
50
- x86_64 builds of MRI Ruby (enable-shared and disable-shared)
51
- Unstripped binaries only!
52
-
53
- Experimental (somewhat broken) support:
54
-
55
- Linux and OSX:
56
- i386/i686 support.
57
-
58
- Snow Leopard:
59
- OSX system Ruby, distributed with Snow Leopard
60
-
61
- Coming soon:
62
-
63
- Official support for Ruby 1.9
64
- Official support for i386/i686
65
-
66
- CREDITS
67
- =======
68
- Jake Douglas for the Mach O/snow leopard support.
69
-
70
- Aman Gupta for various bug fixes and other cleanup.
71
-
72
- Rob Benson for 1.9 support and cleanup.