mrubyのirepテーブルを再利用する事でmod_mrubyのメモリ消費量を改善

昨日、内部フラグメンテーション耐性の高いjemallocを利用することで、mod_mrubyのメモリ使用量を半分に減らす事ができました。

しかし、なお、mod_mrubyを組み込んだサーバプロセスに継続してRubyスクリプトを処理させると、メモリ消費量が単調増加してしまうという問題が残っていました。

そこで、単調増加してしまう原因を突き止め、メモリ消費量増加をさらに改善することができました。

続きを読む

mod_mrubyのメモリ問題をvalgrindで調査の上jemallocで改善

mod_mrubyはmrubyのmrb_stateをApacheのサーバプロセス上で使いまわすアーキテクチャをとっています。基本的にプロセスは起動しっぱなしなのですが、リクエストを大量に処理すると、プロセスのメモリがどんどん太っていく問題がありました。

これは、mruby-uv等でも報告されており、どうにか改善したいと思っていました。そこで、twitter上でいくつかmatzさんとやり取りしながら、valgrindでメモリのLEAKとHEAPを調査の上、mallocのフラグメントを疑い、jemallocでmallocをフックするとどのようにメモリ使用量が改善するかを実験しました。

続きを読む

mod_mrubyの拡張ライブラリ開発のススメ

先日mod_mrubyでredisクラスを扱えるようにしました。

今回は、こういった新たなクラスを扱うためのmod_mruby用拡張ライブラリの作り方を紹介しようと思います。「mrubyで何か作ってみたいけど、どこから手出していいかわからない。」という人は、是非この記事を参考にmod_mrubyの拡張ライブラリを作って、Apacheに実行させて遊んでみてはどうでしょうか。

続きを読む