docker(docker-compose)で起動しているsolrのメモリをデフォルトから1Gに変更する
docker-compose.ymlを以下のように
docker-compose.ymlを使わない場合、以下を参考にコマンドで。
docker-compose.yml
version: '2'
services:
solr:
image: solr
ports:
- "8983:8983"
volumes:
- /data:/opt/solr/server/solr/mycores
- /var/log/solr:/opt/solr/server/logs
- /home/junk/solr/entrypoint/set-heap.sh:/docker-entrypoint-initdb.d/set-heap.sh
restart: always
公式ドキュメントとの違いは、sedの置き換え前パスに.*をつけている点(コメント化されてても有効にするため)
ログの出力もVしたので、以下でオーナーを変更
$ sudo mkdir /var/log/solr
$ sudo chown 8983:8983 /var/log/solr
set-heap.shファイルを/home/junk/solr/entrypoint/フォルダに作成します。
set-heap.sh
#!/bin/bash
set -e
cp /opt/solr/bin/solr.in.sh /opt/solr/bin/solr.in.sh.orig
sed -e 's/.*SOLR_HEAP=".*"/SOLR_HEAP="1024m"/' </opt/solr/bin/solr.in.sh.orig >/opt/solr/bin/solr.in.sh
grep '^SOLR_HEAP=' /opt/solr/bin/solr.in.sh
フォルダとファイルのオーナーを変更
$ sudo chown -R 8983:8983 /home/junk/solr/entrypoint
再起動
$ docker-compose restart
確認
$ sudo docker logs solr_solr_1 | head
/opt/docker-solr/scripts/solr-foreground: running /docker-entrypoint-initdb.d/set-heap.sh
SOLR_HEAP="1024m"
SOLR_HEAP="1024m"が出ていればOK。
あとか管理画面からJVM-Memoryを確認しても良い。
トラブルシューティングとして、set-heap.shが実行されているか?
・実行されていない → Volume、パス、オーナーを確認する
・実行されている → set-heap.shの中身を確認
solr.in.shによっては上記set-heap.shで上手く書き換えられない場合があるかもしれないのでその場合、コンテナに入って直接ファイルが書き換わるかコマンドを実行して確認する。
個人的メモ
- コンテナに入らないでdockerで起動しているsolrのpostコマンドを実行する
echo '/opt/solr/bin/post -h' | sudo docker exec -i solr_solr_1 /bin/bash