Mattermostでいきなり504エラーが出てきだしたと思ったら、ファイルディスクリプター不足だった話


毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

社内のMattermostを運用し始めてからそろそろ2年ですが、快適に使えておりました。
しかし、突然 504エラーが発生しはじめたのでございます。

10.XX.YY.ZZ - - [19/Oct/2020:05:16:03 +0900] "GET /api/v4/users/me/teams/g8wt6k198p87fb5t69n4skknqc/channels/members HTTP/2.0" 504 569 "-" "k3xaqkwfefgxdnkcpd1gupi83o" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/4.5.3 Chrome/78.0.3904.130 Electron/7.3.2 Safari/537.36" "-" "61.503"
10.XX.YY.ZZ  - - [19/Oct/2020:05:16:03 +0900] "GET /api/v4/users/me/teams/g8wt6k198p87fb5t69n4skknqc/channels?include_deleted=true HTTP/2.0" 504 569 "-" "k3xaqkwfefgxdnkcpd1gupi83o" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/4.5.3 Chrome/78.0.3904.130 Electron/7.3.2 Safari/537.36" "-" "61.504"

リソースには余裕があり、メモリー/CPUの問題ではありませんでした。

しかし、Mattermostのログを見ると以下のログが大量に出力されておりました。

{"level":"error","ts":1603052014.4308474,"caller":"http/server.go:3088","msg":"http: Accept error: accept tcp [::]:8065: accept4: too many open files; retrying in 10ms","source":"httpserver"}

見事にサボっていたファイルディスクリプターに引っかかっておりました。

1. ulimitを増やす

一番簡単なのがsystemdのserviceを直す事でしょう。

以下を参考にしました。
https://github.com/mattermost/mattermost-docker-preview/issues/32#issuecomment-405083050

sudo vi /etc/systemd/system/mattermost.service

以下の下線部分を追記します。

LimitNOFILE=65535

TimeoutStartSec=3600 も追加する人もいるようです。

systemdをリロードします。

sudo systemctl daemon-reload

2. まとめ

反省.
手を抜くといかんですね...。

その他にも /etc/sysctl.conf も直すと良いかもです。

High Availability Cluster (E20) — Mattermost 5.29 documentation
https://docs.mattermost.com/deployment/cluster.html#mattermost-server-configuration