Apacheとjava / tomcatに「開いたファイルが多すぎます」プロセス固有の制限を設定するには?

Apacheとjava / tomcatに「開いたファイルが多すぎます」プロセス固有の制限を設定するには?

この問題は、現在ノードサーバー(コンパクト)とSpring Boot Javaサーバー(ジョブ)を実行している本番Ubuntuシステムで2回発生しました。最初にこのようなことが起こったとき、私のサーバーがダウンしてファイルの/proc/sys/fs/file-max808286が私にとって完全に合理的だと思いましたが、とにかく値を増やし、2097152その後何をしたのか覚えていませんでした(数年前は良いことでした)。その頃? )しかし、おそらくサーバーを再起動するか、少なくとも私のサービスを再起動すると問題が解決します。今日は私をいじめるためにまた来ました。 Javaサービスを再起動すると問題が一時的に解決されましたが、今後はこのような状況を避けるために何が起こったのかを知りたいと思います。

  • /etc/security/limits.confこのファイルはUbuntuインストールのデフォルト値なので、コメントファイルにすぎず、ここで再現する必要はありません。
  • Javaサービスはユーザーによって実行されますtomcat
  • Apacheはによって実行されますroot。これにより、ノードまたは Spring Boot サービスにトラフィックが転送されます。

私のシステムでいくつかの関連コマンドの結果...

$ ulimit -Sn
1024

$ ulimit -Hn
1048576

$ sudo su tomcat

$ ulimit -Sn
1024

$ ulimit -Hn
1048576

追加の質問、なぜ私のハード制限がありますか?半分/proc/sys/fs/file-max?に設定された値

ところで、プロセスごとの制限を見てみると、次のような結果が出てきます。

$ cat /proc/<tomcat_java>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 4096                 files

$ cat /proc/<root_apache>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            8192                 8192                 files     

$ cat /proc/<my_random_process>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 1048576              files     

どうしたの?私が設定したfile-maxに興味を持つ唯一のプロセスは私自身のプロセスです。 (上記で使用した「ランダム」プロセスはbashシェルです。)ApacheとJavaのこれらの制限はどこから来ますか?上記の4096制限を超えていることは確かにわかりますが(これは私の問題かもしれません)、システムが設定した制限を使用する方法を知りません。

これにご協力いただきありがとうございます。

答え1

あなたの問題は次のとおりですsystemdを使用してサービス制限を設定するには?- Apache Tomcatサーバーの起動スクリプトで開かれたファイル制限の問題を解決する必要があります。例:Ubuntuシステムがsystemdを使用していると仮定すると、次のように起動スクリプトファイルを編集して、tomcat javaプロセスのオープンファイル制限を65000に増やすことができます。

/etc/systemd/system/tomcat.service:

[Unit]
Description=Tomcat Service
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
LimitNOFILE = 65000      <---------
....
[Install]
WantedBy=multi-user.target

デーモンを再ロードしてTomcatサーバーを再起動します。

systemctl daemon-reload
systemctl restart tomcat

確認してみてください。

pstree -pu |grep tomcat
       |-java(23638,tomcat)-+-{java}(23645)
grep open /proc/23638/limits
Max open files            65000                65000                files

関連情報