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