この記事は、mruby advent calendar 2015 20日目の記事です。みなさん難しい記事が多いですが、私にそういうのは無理なので軽めの内容になっています。
最近、h2o で mruby がサポートされたので、まずはコンパイルしてみた。
h2o は、@kazuho さんが作成されている HTTP/2 & HTTP/1.x 対応の高速な WEBサーバです。
先日の関西Ruby会議の帰りの飛行機の中、着陸5分前ぐらいの出来事。
harasou: 「松本さん、mrbgems の作り方教えてくださいよ」 matusmotory:「じゃあ、まづ mrblib ってディレクトリ作って…」
おもむろに二人並んで PC を取り出し、mrbgems を作り始めた(着陸直前だったので、PC出して良かったのかよくわからないが…) というわけで、その時のことを簡単にご紹介。
2015/07/11(土)に行われた「関西Ruby会議06」に登壇させてもらい、mruby の利用事例について紹介してきた。 インフラしか知らないエンジニアが、matz さんを前に mruby の説明なんて、かなり場違いで恐縮な状況でした。
ブログ書くまでがペパボテックカンファレンス!というプレシャーをうけたので、一昨日(7/4)、福岡天神で開催された「第2回ペパボテックカンファレンス」について記録。
5時間超におよぶカンファレンスに参加してくださったみなさま、本当にお疲れ様でした。
- connpass : http://pepabo.connpass.com/event/16457/
- youtube : https://www.youtube.com/watch?v=SUuaugJ4p7o
- twitter : http://togetter.com/li/842661
- slides : http://kimromi.hatenablog.jp/entry/2015/07/04/211334
@takesi_yosimura さんが、twitter をまとめてくださっていました。ありがとうございます!また、@kimroi さんは発表スライドをまとめてくれていました。ありがとうございます!
先日会社で「mysql のテーブルと、プロセス上の共有メモリを連携させたい」って話が出たとき、トリガで外部プログラムが実行できればいけるのでは?と思ったので、調べてみた。
MySQL で外部コマンドを実行するには
mysql で外部コマンドを実行するには system
が使える。
mysql> system uname -a
Linux cent6 2.6.32-504.16.2.el6.x86_64 #1 SMP Wed Apr 22 06:48:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
ただ、これはターミナル上からとかでないと使えない。
調べてみると、mysql には UDF(User Defined Function) という仕組みがあって、自作関数を作成することができるらしい。これは、C や C++ で書いて共有ライブラリ(.so)を作成し、mysql の plugindir に放り込めば使えるようになる。
mruby-cgroup は、mruby から cgroup を利用するためのモジュールで、いわゆる libcgroup のバインディング。現在、mruby-cgroup 9cad17343 で対応しているサブシテムは以下のとおり。
- cpu
- cpu_set
- cpu_acct
- blkio
他に、cgroup のサブシステムには以下のようなものがある(CentOS 6.4)
# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 10 1 1
ns 0 1 1
cpu 11 1 1
cpuacct 12 1 1
memory 13 1 1
devices 14 1 1
freezer 15 1 1
net_cls 16 1 1
blkio 17 1 1
perf_event 0 1 1
net_prio 0 1 1
この中から、簡単に使えそうな memory サブシステムを追加してみた。
mruby-cgroup とは
mruby-cgroup は、@matsumotory が開発している mruby から cgroup を利用するためのライブラリ。
https://github.com/matsumoto-r/mruby-cgroup
cgroup は linux カーネルの機能で、タスク(プロセス)のリソース(CPU, メモリ, IO, etc)を制御するための仕組み。 これを利用すると「特定のプロセスが CPU100% 使うような処理を行っても 50% しか利用させない」といった制御ができるようになる。
mruby とは
組込み向けに軽量化されたRuby。mruby 単体で実行するというよりは、組み込み機器や Cなどで書いたアプリのなかに、まるごとmrubyアプリケーション+実行環境
を組み込んで利用する感じ。