検索条件
Solrばりばり使ってます。大変便利です。
でもやっぱり日本語情報が少ない。というわけで実戦投入までに調べたことを公開メモ。バージョンは3.x系です。
前のメモはこれ。
このエラー出まくった。
ファイルを大量に開くようなので、ファイルディスクリプタ(システムが開けるファイル数)の上限を65536とかにしておく。
普通は /etc/security/limits.conf あたりで指定するみたいだけど、サービスとして起動させておくプログラムに対しては有効にならないっぽい。
詳しくは下記記事参照。
■ファイルディスクリプタ数の上限変更とlimits.confの罠
http://yumewaza.yumemi.co.jp/2010/07/limitsconf.html
というわけで、/etc/security/limits.conf は使わず、起動スクリプト(/etc/init.d/solr)上でulimit -n 65536とか記載しておく。
下記参考に。
■Tomcat - Too many open files が出る問題
http://www.matsuaz.com/matsumotojs/2010/12/24/1293117835413.html
追加したデータをインデックスに載せるためにはコミットが必要なのだけど、コミットするたびにファイルの断片が増えていくので、定期的にoptimizeしないと重くなる。あと上記の開きすぎエラーにもつながる。
定期的って一年に一回とかかと思ったら、どんどん重くなったのでかなり頻繁に必要らしい。本だと5回コミットしたら1回optimizeとか書いてあった。スケジューリングが面倒なのでもうコミットするたびoptimizeするようにした。
で、最初は楽そうだからautocommit(自動コミット)使ってたけど、コミットは処理が重いのでちゃんとスケジューリングして深夜にまとめてコミット&オプティマイズするとか、計画的に実行した方がいい。後述の再起動とも関連。
2014/12/16 追記
Solr4.0以降だと特に定期的にoptimizeする必要はなくなったぽい。
ログにあらゆる情報が出力されていてすぐでかくなるので、エラーだけ出力するように起動スクリプト上でフィルタした。
java -Dsolr.solr.home=multicore -DSTOP.PORT=8079 -DSTOP.KEY= -jar start.jar 2>&1 | grep --line-buffered "Exception" >> <LOG_FILE> &
これが良いやり方かどうかはわからん。
標準出力とエラー出力はわかれてないっぽいのでこんなやり方になった。
コミット中に再起動するとロックファイルが残って書き込めなくなる。
logroteが再起動させるので、その時間にはコミットさせないようにすること。
autocommitはここでも危険。
使用メモリの設定とかあるのかと思って調べたけどよくわからない。javaの-Xmxオプションで指定する?-Xmx4096mとかやってみたらかえって重くなったので結局いじってない。いじってなくても十分捌けてる。
以上。
誰か公式マニュアル翻訳して欲しい。