web-dev-qa-db-ja.com

開いているファイルが多すぎます(ulimitは既に変更されています)

私はTomcat 7とJava 1.7でdebianサーバーに取り組んでいます。これは、いくつかのTCP接続、それぞれTCP接続は、Javaプロセスによって開かれたファイルです。

/proc/pid of Java/fdを見ると、開いているファイルの数が1024を超える場合があることがわかりました。これが発生すると、catalina.outスタックトレース_SocketException: Too many open files_

このエラーについて私が見つけたすべてのこと、人々はulimitを参照していますが、私はすでにこのことを変更しており、エラーが発生し続けます。これが設定です:

/etc/security/limits.conf

root    soft    nofile  8192
root    hard    nofile  8192

/etc/sysctl.conf

fs.file-max = 300000

ulimit -aコマンドは以下を返します。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 8192
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

しかし、Javaプロセスの制限を確認すると、1024しかありません

/proc/pid of Java/limits

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             32339                32339                processes 
Max open files            1024                 1024                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       32339                32339                signals   
Max msgqueue size         819200               819200               bytes     
Max Nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        

JavaプロセスのMax open filesの数を増やすにはどうすればよいですか?

14
slacker

ulimit -n 8192 catalina.sh内にあるので、catalina start、Java上記の指定された制限で実行されます。

19
slacker

Ulimit値はセッションの起動時に割り当てられるため、/ etc/security/limits.confを変更しても、すでに実行中のプロセスには影響しません。非ログインプロセスは、環境変数の継承と同様に、親からulimit値を継承します。

/etc/security/limits.confを変更した後、ログアウトしてログインし(セッションに新しい制限が設定されるようにする)、アプリケーションを再起動する必要があります。そうして初めて、アプリケーションは新しい制限を使用できるようになります。

10
telcoM

Tomcat/httpdが処理するワークロード/トラフィックによっては、ulimitを高く設定する必要はまったくないかもしれません。 Linuxはソケット接続ごとにファイル記述子を作成するため、Tomcatがmod_jk/ajpプロトコルをコネクターとして使用するように構成されている場合、許可される最大接続が高すぎるか、connectionTimeoutまたはkeepAliveTimeoutが高すぎるかを確認する必要があります。これらのパラメーターは、OSファイル記述子の消費に大きな役割を果たします。 Tomcatがリバースプロキシの前にある場合は、Apache httpd/nginx接続の数を制限することも可能です。ゲートラッシュシナリオ中に受信リクエストを抑制するために、httpdのserverLimit値を一度減らしました。結局のところ、ulimitを調整することは、システムが消費する可能性があるため、実行可能なオプションではない可能性があります。この問題を解決するには、全体的な計画を立てる必要があります。

1
ChaitanyaBhatt