公式パッケージのtd-agentではファイルデスクリプタ上限が設定済みだった件

こんにちは、先週末は暖かく散歩日和だったので北大内を散策してみました。

少しづつ紅葉が進んでいて、冬がやってくるなぁと実感しました。

先週末の北大大野池の様子

先週末の北大内の紅葉

はじめに

td-agentをインストールする時のプラクティスとしてファイルデスクリプタ数の上限を変更しておくことが知られています。 この設定は公式のドキュメントにも書かれていて、その他の多くのウェブ上の記事でも紹介されています。

この記事は、この設定について業務の中で「ファイルデスクリプタの設定しなきゃいけないみたいだけど、今どうなってるの?調べて!」と振られて調べた時のメモです。

公式のパッケージを使う場合は起動スクリプトの中で上限が設定されている

(タイトルの出落ち感が激しいのは置いておいて)

上記の調査をしていて気づいたのですが公式で配布されているパッケージを使う場合は起動スクリプト内で上限が設定されているので、変更は不要です。

コードはこちらで確認できます(rpm, deb)

この辺はtd-agentをよく使っている方には常識なのかもしれないですが、web上では設定をしなければいけない、という記事はあっても、設定しなくていいよ、という記事がなかったので自分としては意外でした。

td-agentプロセスのファイルデスクリプタの上限を確認する方法

とはいえ、実際に設定が変わっているのか確認しないと気が済まなかったので、次の方法で確認しました。

/proc/<pid>/limits/Max open files の各値が65536になっていることがわかります。

# td-agentプロセスのpidを調べる
[ec2-user@ip-172-31-22-137 ~]$ ps axu | grep td-agent
td-agent  2797  0.0  2.4 226992 25100 ?        Sl   09:04   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
td-agent  2800  1.4  3.6 257196 36980 ?        Sl   09:04   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
ec2-user  2815  0.0  0.1 110468  2020 pts/0    S+   09:04   0:00 grep --color=auto td-agent
# /proc/<pid>/limits の内容を確認する
ec2-user@ip-172-31-22-137 ~]$ cat /proc/2797/limits | grep "Max open files"
Max open files            65536                65536                files

まとめ

今回の調査では結局設定しなくてよかった、という結論で、稼働しているサーバの設定を変更する必要などはなかったのですが、なんでも自分で調べてみるのは重要だなと改めて感じました。