Typo 5.3がメモリを使い過ぎる
二、三日前から時々oom-killerが出るようになった。なんでかなと見てみたらずいぶんと太ったTypoのプロセスサイズがいくつか。一つあたり500MBとか……。
今までなんともなかったのになと思ったものの、それほど考えてみれば気にしていなかっただけで、実はけっこう前からこういう状態だったのかもしれないということに気付いた。おおむね自分が困るだけとはいえ、ちょっとほったらかしすぎた。動きを見てみると、プロセスが生成されて少しして数秒かけてプロセスサイズが大きくなっていくことがわかった。どうやら何かを読み込んでいるように見える。
実はこのことに気付くほんの少し前のタイミングでPassengerのバージョンを変えたり、他のアプリケーションの配置を変えたり、GEM_HOMEを変えたりということをしている。そのため、まず疑ってしまったのはそのあたりだった。その次に疑ったのは自家製コードのいくつか。といってもTypoのためには数十行のコードを書いた程度で、特別に問題になりそうなものは見付からない。
動いているプロセスにコードをつっこんでオブジェクトの様子を見てみるかとも思い始めていたのだが、ここでscript/consoleでも同じ現象が出ていることに気付いた(遅い!)。そしてconfig/environment.rbを読み込み終えるまでにプロセスサイズが育っていることがわかった。printfデバッグで絞り込みをかけたところ、以下のコードにいたった。
if RAILS_ENV != 'test'
begin
ActiveRecord::Base.connection.select_all("select * from sessions")
rescue
begin
ActiveRecord::Base.connection.current_database
Migrator.migrate
rescue
# if there are no database, migrator doesn't no start
# use case : rake db:create in rails tasks
end
end
end
このコードが加えられたのはこのあたり。これなら、とりあえずはlimit 1でも付けておけばよいだろうか。もっとやりようがありそうなものではあるが。
結局、問題が顕在化したのは保存しているセッションの数が多くなってきたからであった。実に602,788レコードもある。セッションデータの掃除は今でも(Typo 5.3ではRails 2.2を使っているが)手作業でやるのかな? (セッションだからdelete_allで十分かしら?)
$ script/runner -e production 'CGI::Session::ActiveRecordStore::Session.destroy_all(["updated_at
追記
問題として報告しておいたところgithub上のリポジトリでは引用したブロックはコメントアウトされたようだ。5.3.1では直っているのかな。なんだか他のチケットも動き出したので、ちょうどそんなタイミングだったらしい。
Chez Akilaでランチ
一月ほど前に通り掛かったときにお店が変わっていることに気付いた。新しく出来ていたのはChez Akilaというフレンチのお店。
平日ランチメニューは1,400円。ちょっと奮発気分が必要だが、内容はそれに見合うものでおいしかった。+300円でデザートを付けることができる。このときは紅茶プリンにアイスクリームを添えたもので、味もボリュームもお得感がある。


(そのほかの写真)
店内は白と明るい木の色でまとめられている。小さいお店ながら席数をしぼっているのか窮屈な感じはしない。禁煙なのもうれしい。


