je 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- je (0.0.4)
4
+ je (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -1,6 +1,16 @@
1
- # je - Instant [jemalloc](http://www.canonware.com/jemalloc/) injection into Ruby apps
1
+ # je
2
2
 
3
- jemalloc sometimes dramatically supresses the memory fragmentation on server programs. `je` gem contains jemalloc itself within a gem, and enables you to inject jemalloc into your application in a really easy way: install `je` gem, and launch your app with `je` command.
3
+ Instant [jemalloc](http://www.canonware.com/jemalloc/) injection into Ruby apps, for better performance and less memory.
4
+
5
+ # Why jemalloc?
6
+
7
+ Ruby relies on malloc(3) for its internal memory allocation. Using better malloc() implementation will boost your application performance, and supress the memory usage.
8
+
9
+ jemalloc is a malloc(3) implementation, originally developed by Jason Evans. jemalloc handles small object better than other allocators so usually gives better performance and memory usage to Ruby programs.
10
+
11
+ # Why je?
12
+
13
+ Installing jemalloc separately from Ruby is pain in some cases (e.g. Heroku, EngineYard, etc). `je` gem contains jemalloc itself within a gem, and enables instant jemalloc ingection in a really easy way: install `je` gem, and launch your app with `je` command.
4
14
 
5
15
  # Install
6
16
 
@@ -12,13 +22,12 @@ Install `je` gem in your application. For [bundler](http://gembundler.com/) base
12
22
 
13
23
  Execute your application with `je` command, which is contained in `je` gem. Example command for Rails + bundler application is like follows.
14
24
 
15
-
16
25
  $ bundle exec je ./script/rails s
17
26
 
18
- # TODO
27
+ # Limitation
19
28
 
20
- Currently, this gem works only on Linux. Not working on Windows and Mac OS X.
29
+ Currently, this gem works only on Linux and Mac OS X.
21
30
 
22
31
  # License
23
32
 
24
- [BSD-derived License](http://www.canonware.com/jemalloc/license.html).
33
+ [BSD-derived License](http://www.canonware.com/jemalloc/license.html).
data/bin/je CHANGED
@@ -1,16 +1,31 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'optparse'
2
3
  require 'timeout'
3
4
 
5
+ $verbose = false
6
+ opt = OptionParser.new
7
+ opt.on('-v') { |v| $verbose = true }
8
+ argv = opt.parse(ARGV)
9
+ if argv.length == 0
10
+ puts <<END
11
+ Usage: je [ARGS]...
12
+
13
+ Options:
14
+ -v verbose
15
+ END
16
+ exit
17
+ end
18
+
4
19
  # Set ENV for preloading jemalloc
5
20
  lib_dir = File.expand_path('../lib/', File.dirname(__FILE__))
6
21
  if File.exists? (lib_dir + "/jemalloc.so")
7
- puts "=> Injecting jemalloc..."
22
+ puts "=> Injecting jemalloc..." if $verbose
8
23
  ENV.store("LD_PRELOAD", lib_dir + "/jemalloc.so")
9
24
  elsif File.exists? (lib_dir + "/jemalloc.bundle")
10
- puts "=> Injecting jemalloc..."
25
+ puts "=> Injecting jemalloc..." if $verbose
11
26
  ENV.store("DYLD_INSERT_LIBRARIES", lib_dir + "/jemalloc.bundle")
12
27
  else
13
- puts "=> Skip injecting jemalloc. Your platform is not supported."
28
+ puts "=> Skip injecting jemalloc. Your platform is not supported." if $verbose
14
29
  end
15
30
 
16
31
  # fork(2)
@@ -33,7 +48,7 @@ trap("TERM") { puts "SIGTERM received"; terminate_gracefully pid }
33
48
 
34
49
  # exec(2)
35
50
  if pid.nil? then
36
- Kernel.exec *ARGV
51
+ Kernel.exec *argv
37
52
  else
38
53
  pid, status = Process.wait2
39
54
  Kernel.exit (status.exitstatus || 0)
@@ -32,8 +32,11 @@ create_makefile('jemalloc')
32
32
  # NOTICE: Mac OS X only
33
33
  if RbConfig::CONFIG['target_vendor'] == "apple"
34
34
  makefile = open('Makefile').read
35
- makefile.gsub!(/-dynamic\ -bundle/, '-shared')
36
- makefile.gsub!(/-flat_namespace/, '-dylib_install_name')
37
- #,-dylib_install_name
35
+ if makefile =~ /-dynamic\ -bundle/ && makefile =~ /-flat_namespace/
36
+ makefile.gsub!(/-dynamic\ -bundle/, '-shared')
37
+ makefile.gsub!(/-flat_namespace/, '-dylib_install_name')
38
+ else
39
+ raise 'Your platform is not supported. Please report to http://github.com/treasure-data/je'
40
+ end
38
41
  open('Makefile', 'w'){ |f| f.write(makefile) }
39
42
  end
data/lib/je/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JE
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: je
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-08 00:00:00.000000000 Z
12
+ date: 2012-09-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -89,17 +89,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
89
  - - ! '>='
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
+ segments:
93
+ - 0
94
+ hash: -3111438065534866000
92
95
  required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  none: false
94
97
  requirements:
95
98
  - - ! '>='
96
99
  - !ruby/object:Gem::Version
97
100
  version: '0'
101
+ segments:
102
+ - 0
103
+ hash: -3111438065534866000
98
104
  requirements: []
99
105
  rubyforge_project:
100
- rubygems_version: 1.8.21
106
+ rubygems_version: 1.8.24
101
107
  signing_key:
102
108
  specification_version: 3
103
109
  summary: use jemalloc as default allocator, everywhere!
104
110
  test_files: []
105
- has_rdoc: