Alfresco Community構築7:運用開始後の作業

前回までの記事:

Alfresco Community構築1:概要

Alfresco Community構築2:環境整備

Alfresco Community構築3:Communityインストール

Alfresco Community構築4:検索とレンダリングサービス設定

Alfresco Community構築5:初期カスタマイズ

Alfresco Community構築6:文書移行

 

運用開始後に気づいたことがいくつかあった。

  • 文書保管場所の変更

Alfrescoを最初に起動すると、文書保管場所が自動生成される。具体的には/opt/alf_data/contentstoreと/opt/alf_data/contentstore.deleted。前者には全ての生きている文書、後者には削除された文書が入る。削除文書は一定期間をおいて自動的にシステムから完全削除されるので、その期間内であればゴミ箱から戻せる。アップロード後すぐに削除したものは一ヶ月程度でシステムから完全に消され、そうでないものは半年程度はまだ戻し可能だった(アルゴリズムに基づいて削除期間を決めているようだ)。

Alfresco構築当初はcontentstoreについて十分理解しておらず、運用が始まってから、Alfrescoをインストールした/optの容量が食わていることに気がついた。/optには十分な領域を確保していなかったため、あわてて別の大きな領域をcontentstore向けに振り分けた。具体的には大きな容量を持つディレクトリ(/home/tomcat/alfresco)を作り、そちらにcontentstoreを移し、/opt/alf_dataからリンクを張った。作業はもちろんtomcatユーザで行った。

$ pwd
/opt/alfresco/tomcat
$ cd ../alf_data
$ ls
contentstore  contentstore.deleted  keystore
$ mv contentstore /home/tomcat/alfresco
$ mv contentstore.deleted /home/tomcat/alfresco
$ ln -s /home/tomcat/alfresco/contentstore .
$ ln -s /home/tomcat/alfresco/contentstore.deleted .
$ ls -al
lrwxrwxrwx 1 tomcat tomcat  34  3月  2 09:19 contentstore -> /home/tomcat/alfresco/contentstore
lrwxrwxrwx 1 tomcat tomcat  42  3月  2 09:17 contentstore.deleted -> /home/tomcat/alfresco/contentstore.deleted
drwxrwxr-x 2 tomcat tomcat 185 12月 20 14:08 keystore
  • ログファイル対応

Alfrescoのログはtomcat/logs/に保管される。それとは別に、tomcat/直下に保管されるログもあり、まぎらわしいので、これらもtomcat/logs/にログを書き出すよう変更した。これには、webapps配下のlog4j.propertiesを変更する。以下のスクリプトtomcat/で実行した(webapps/[alfresco.share]/下を書き換えるので、warが新しくなったら実行しないといけない)。

$ vi chg_logLocation.sh 
#!/bin/sh

# Property files 
PROPERTY_ALF="webapps/alfresco/WEB-INF/classes/log4j.properties"
PROPERTY_SHA="webapps/share/WEB-INF/classes/log4j.properties"

# Change "alfresco.log" to "logs/alfresco.log"
sed -i s@=alfresco\.log@=/$\{catalina.base\}/logs/alfresco\.log@ \
	/opt/alfresco/tomcat/$PROPERTY_ALF

if [ $? -ne 0 ]; then
    echo "An error occurred while editing $PROPERTY_ALF."
    exit
fi

echo "Updated $PROPERTY_ALF Successfully." 

# Change "share.log" to "logs/share.log"
sed -i s@=share\.log@=/$\{catalina.base\}/logs/share\.log@ \
	/opt/alfresco/tomcat/$PROPERTY_SHA

if [ $? -ne 0 ]; then
    echo "An error occurred while editing $PROPERTY_SHA."
    exit
fi

echo "Updated $PROPERTY_SHA Successfully." 
echo "Log location of alfresco.log, share.log are changed."

ところでログファイルが保管されるtomcat/logs/だが、この場所のファイルはtomcat更新時に消える。従って、長期にわたってログを確認できるよう別に保管庫を作成し(/home/tomcat/alfresco/oldfiles)、定期的にログファイルをそちらへ移動するようにした。毎月1日の2:00にファイル移動するよう、cronを設定しただけだが。

$ crontab -e
# Move old files of /opt/alfresco/tomcat/logs/ to /home/tomcat/alfresco/oldfiles/
0 2 1 * * find /opt/alfresco/tomcat/logs -type f -name '*log*' -mtime +30 | xargs mv --target-directory=/home/tomcat/alfresco/oldlogs

ログファイルについてもう一点だけ。毎日作成されるlocalhost_access_logというファイルがある。名前の通り、Alfrescoへのアクセスログを記録するものなのだが、Alfrescoでファイル作成/削除等のファイル操作がされない場合、このログファイルが巨大化していく。実は、運用機とは別に試験機を設けており、運用機適用前の動作確認をしているのだが、ある時、試験機でディスク使用量100%になったことがあった。見るとlogsディレクトリがディスクを食っており、1ファイルで3GBを超えるものまであった。

調べてみるとどうもAlfrescoの仕様らしく、ファイル操作でDBへのアクセスがないと、ログファイルが巨大化していくらしい。解消は、Alfrescoでファイル操作をすること。これがわかってから、試験機では毎週、ファイル作成や削除などの操作をするようにした。運用機の方は毎日何らかのファイル操作をしているので、ログファイル巨大化といった問題は出ない。

  • 検索サービスOOM対策

運用から一年ほどたった頃、検索サービスが自然消滅した(起動プロセスが消えていた)。再起動後は消えることもなかったので、なんでだろう?と思いつつも様子見にしていた。それから半年くらい後、またもやプロセスが消失。そして、今度は再起動してもまたすぐプロセスが消える。調べてみると、検索サービスのlogs/にsolr_oom_killer-8983-*.logというファイルができていた。

$ cat solr_oom_killer-8983-2023-07-31_10_43_13.log
Running OOM killer script for process 4097 for Solr on port 8983
Killed process 4097

Out of Memoryで、システムが検索サービス実行プロセスを強制排除したようだ。結局、Solrが使用しているJVMのヒープサイズが不足していたのが原因とわかった。デフォルトは最大ヒープサイズが512MBだったので、それを2GBに増やしたところ、プロセスの強制停止は起こらなくなった。

$ pwd
/opt/alfresco-search-services
$ vi solr.in.sh 
 #SOLR_HEAP="512m"
 SOLR_HEAP="2g"

 #SOLR_JAVA_MEM="-Xms1g -Xmx1g"
 SOLR_JAVA_MEM="-Xms1g -Xmx2g"

$ ./solr/bin/solr restart
Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 99339 to stop gracefully.
Waiting up to 180 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=104484). Happy searching!

なお同時に、メモリも8GBから12GBに増設した。

ところで、その後に検索サービスを2.0.3にアップグレードした所、またOOM killerが発動されたので、最大ヒープサイズを3GBに上げた。検索サービスはファイル数増加に合わせてインデックスも増えていき、それに合わせてメモリも食うようだ。solrhome/alfresco/にインデックスが作られていて、ここが24GBの頃は最大ヒープサイズ=2GBで大丈夫だったのだが、アップグレード後に37GBに増え、2GBでは足りなくなったようだった。

  • 設定Tips

Read-onlyモード。もちろんAlfrescoにもリポジトリ向けにこのモードがある。Read-onlyは、プロパティファイルに書いてAlfrescoを再起動すれば適用される。

$ vi shared/classes/alfresco-global.properties
追加。
 #Repository read-only mode
 server.allowWrite=false

[tomcat@doc ~]$ bin/shutdown.sh -force
[tomcat@doc ~]$ bin/startup.sh 

最大アップロードファイルサイズ制限。これもプロパティに書いてAlfrescoを再起動する。500MBに制限したい場合はこう書く。

$ vi shared/classes/alfresco-global.properties
追加。
 #Maximum permitted size 500MB for all content
 system.content.maximumFileSizeLimit=524288000

 

以上で、Alfresco Community構築については終わりにする。最初にも書いたが、Alfrescoでは情報収集のために英語で検索することが多く、特に、エラー発生時には英語圏の人々に大変助けられた。日本語でもそれなりの記事は見つかったのだが、残念ながらまだ少ない。そこで、それらを補筆すべくこれらの記事を書いてみた。見知らぬ誰かの役に立ってくれればとても嬉しい。

 

2024/12/05(木)Blog 14