docker composeで起動した後に、fessコンテナのCPU使用率が激増してクラッシュする

概要

FESSのDocker imagesを使って、コンテナを起動しているのですが、fessコンテナ (コンテナ名fess01)を起動後に一定時間経過するとクラッシュしてしまいます。

何か設定上変更すべき点があるのでしょうか?

詳細な状況

docker logs fess01でのログは次の通りです。

{"@timestamp":"2024-04-17T08:14:39.373Z","log.level": "INFO","message":"Starting Fess service.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"bootstrap","log.logger":"run.sh"}
{"@timestamp":"2024-04-17T08:14:54.742Z","log.level": "WARN","message":"[http://es01:9200][red] node is not available. (ConnectException: Connection refused)", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"FesenNodeManager-1","log.logger":"org.codelibs.fesen.client.node.NodeManager"}
{"@timestamp":"2024-04-17T08:16:05.625Z","log.level": "INFO","message":"No new thumbnails found.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"thumbnail","process.thread.name":"main","log.logger":"org.codelibs.fess.exec.ThumbnailGenerator"}
{"@timestamp":"2024-04-17T08:16:40.678Z","log.level": "ERROR","message":"Fess is not available.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"bootstrap","log.logger":"run.sh"}
{"@timestamp":"2024-04-17T08:16:05.625Z","log.level": "INFO","message":"No new thumbnails found.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"thumbnail","process.thread.name":"main","log.logger":"org.codelibs.fess.exec.ThumbnailGenerator"}
{"@timestamp":"2024-04-17T08:14:54.742Z","log.level": "WARN","message":"[http://es01:9200][red] node is not available. (ConnectException: Connection refused)", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"FesenNodeManager-1","log.logger":"org.codelibs.fesen.client.node.NodeManager"}
{"@timestamp":"2024-04-17T08:16:42.979Z","log.level": "INFO","message":"Starting Fess service.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"bootstrap","log.logger":"run.sh"}
{"@timestamp":"2024-04-17T08:17:05.614Z","log.level": "INFO","message":"No new thumbnails found.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"thumbnail","process.thread.name":"main","log.logger":"org.codelibs.fess.exec.ThumbnailGenerator"}
{"@timestamp":"2024-04-17T08:17:08.037741806Z","log.level":"INFO","ecs.version":"1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"http-nio-8080-exec-2","log.logger":"org.codelibs.fess.helper.ActivityHelper","labels.action":"LOGIN","labels.user":"admin","labels.permissions":"1admin|Radmin|Rguest","labels.ip":"10.81.29.179"}
{"@timestamp":"2024-04-17T08:17:18.729849071Z","log.level":"INFO","ecs.version":"1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"http-nio-8080-exec-6","log.logger":"org.codelibs.fess.helper.ActivityHelper","labels.action":"ACCESS","labels.user":"admin","labels.path":"\/admin\/","labels.execute":"index","labels.ip":"10.81.29.179"}
{"@timestamp":"2024-04-17T08:17:18.741630615Z","log.level":"INFO","ecs.version":"1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"http-nio-8080-exec-7","log.logger":"org.codelibs.fess.helper.ActivityHelper","labels.action":"ACCESS","labels.user":"admin","labels.path":"\/admin\/dashboard\/","labels.execute":"index","labels.ip":"10.81.29.179"}
{"@timestamp":"2024-04-17T08:17:57.347494741Z","log.level":"INFO","ecs.version":"1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"http-nio-8080-exec-2","log.logger":"org.codelibs.fess.helper.ActivityHelper","labels.action":"ACCESS","labels.user":"admin","labels.path":"\/admin\/dashboard\/","labels.execute":"index","labels.ip":"10.81.29.179"}
{"@timestamp":"2024-04-17T08:17:58.153644919Z","log.level":"INFO","ecs.version":"1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"http-nio-8080-exec-4","log.logger":"org.codelibs.fess.helper.ActivityHelper","labels.action":"ACCESS","labels.user":"admin","labels.path":"\/admin\/dashboard\/","labels.execute":"index","labels.ip":"10.81.29.179"}
{"@timestamp":"2024-04-17T08:18:04.504Z","log.level": "INFO","message":"No new thumbnails found.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"thumbnail","process.thread.name":"main","log.logger":"org.codelibs.fess.exec.ThumbnailGenerator"}
{"@timestamp":"2024-04-17T08:18:44.289Z","log.level": "ERROR","message":"Fess is not available.", "ecs.version": "1.2.0","service.name":"fess","event.dataset":"app","process.thread.name":"bootstrap","log.logger":"run.sh"}

Webアプリケーション上でログインしているとセッションがクラッシュするため強制ログアウトし、またdocker exec -it fess01 bashなどでコンテナに入っていると強制的に追い出されます。

利用状況

  • Ubuntu 20.04 LTS
  • Docker version
Client: Docker Engine - Community
 Version:           26.0.1
 API version:       1.45
 Go version:        go1.21.9
 Git commit:        d260a54
 Built:             Thu Apr 11 10:53:25 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.0.1
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.9
  Git commit:       60b9add
  Built:            Thu Apr 11 10:53:25 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.31
  GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • メモリサイズ: 64GB (利用量を監視しても50GB以上は空きがある)
  • スレッド数: 56 (空きがある)
  • vm.max_map_count: 変更済み
  • その他変更点: 端末の8080ポートが利用済みだったため、58080:8080としてlistenするようにマッピングを変更している

見たことない事象ですが、compose.yamlで、ポート以外、標準のものから変更していないのであれば、何かの理由でOS側が終了させているように思うので、OS側のログを確認するのが良いと思います。

1 Like

ご助言ありがとうございます。大変助かります。

ホスト側の一通りの /var/log以下のファイルを確認してみたのですが、それらしいエラーメッセージ (OOMなど)が見つかりませんでした。
仰る通りに、私もOS側から終了しているような気がするのですが、解決材料が見つからないので一旦Pendingとしたいと思います。。

この度は誠にありがとうございました。

調査方法として、コメントしておくと、突然プロセスが死ぬとかでないのであれば、ホスト側からCPUを使っているプロセスが見えると思うので、そのプロセスがJavaであれば、jstackとかでスレッドダンプとかを取れば、何がCPUを使っているのかがわかると思います。

node is not availableが出ているので、Fessというよりは、使っているElasticseachかOpenSearchが先に死んでいそうな気もしますが…。

原因が分かりました。
結果から言いますと、~/.docker/config.jsonに設定しておりましたDockerクライアント用のプロキシサーバーの設定によって、/usr/share/fess/run.sh内で使っているcurl http://localhostの宛先がホワイトリスト型のプロキシサーバーに飛んでしまい、ステータスが403となるためにハートビートが無いと判断してexitしていました。

一応NO_PROXYに対してlocalhostは設定していたのですが、curlでは効果が無いようで気が付かなかった次第です。
コメント頂きました通りhtopでプロセスの動きを監視していましたら、まずrun.shのプロセスが終了している事が分かったので、あたりを付けてシェルスクリプトを眺めていたら解決の糸口になりました!ありがとうございます!!

1 Like