Skip to content
creating jail environment, limiting resouces, assigning IP address and separating filesystem
Ruby
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
mrblib
.gitignore
LICENSE
README.md
Rakefile
build_config.rb
example.rb
mrbgem.rake

README.md

virtualing (mruby-virtualing)

virtualing is a lightweight virtualization tool for linux processes.

creating jail environment, limiting resouces, assigning IP address and separating filesystem

using https://github.com/kazuho/jailing

install jailing

See https://github.com/kazuho/jailing

build virtualing

rake

and create virtualing binary into current directory.

example

# httpd.rb
Virtualing.new({

  :resource => {

    # cgroup name
    :group => "httpd-jail",

    # cgroup root path
    # centos "/cgroup" by default
    # ubuntu "/sys/fs/cgroup"
    :root => "/cgroup"

    # CPU [msec] exc: 30000 -> 30%
    :cpu_quota => 30000,

    # IO [Bytes/sec]
    :blk_dvnd => "202:0",
    :blk_rbps => 10485760,
    :blk_wbps => 10485760,

    # Memory [Bytes]
    :mem => 512 * 1024 * 1024,
    :oom => true,

  },

  :jail => {
    # use chroot instaed of jailing
    # :jailing => false,
    :path => "/usr/local/bin/jailing",
    :root => "/tmp/apache",
    :bind => ["/usr/local/apache"],
    :ro_bind => ["/usr/local/lib"],
    :cmnd => "/usr/local/apache/bin/httpd -X -f /usr/local/apache/conf/httpd.conf"
  },

  :ip => {
    :vip   => "192.168.0.30",
    :dev  => "eth0",
  },

}).run
# callback memory limit event (default :oom)
# }).run_with_mem_eventfd do |ret|
#   puts "OOM KILLER!!! > #{ret}"
# end

# callback memory limit event for oom
# }).run_with_mem_eventfd(:oom) do |ret|
#   puts "OOM KILLER!!! > #{ret}"
# end

# callback memory limit event for usage(4MByte)
# }).run_with_mem_eventfd(:usage, 4 * 1024 * 1024) do |ret|
#   puts "Usage Up or Down to threadshould !!! > #{ret}"
# end

# umount example
# for dir in `mount | grep /var/httpd-jail | awk '{print $3}'`; do sudo umount $dir; done

# del vip
# ip addr del $VIP/24 dev eth0

run

sudo ./virtualing httpd.rb

auto memory expansion example

Virtualing.new({
#(snip)
  :resource => {
    #(snip)
    :oom => false,
  },
#(snip)
}).run_with_mem_eventfd_loop do |ret|
  puts "OOM KILLER!!! current memory: #{mem}"
  sleep 2
  c = Virtualing::MEMORY.new group
  mem = mem * 2
  c.limit_in_bytes = mem
  c.modify
  puts "current memory expand to #{mem}"
end

License

under the MIT License:

  • see LICENSE file
You can’t perform that action at this time.