16

私はtomcat7とjava1.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        

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

4

3 に答える 3

21

ulimit -n 8192catalina.sh内に行を配置しただけなので、catalina start実行すると、javaは上記の指定された制限で実行されます。

于 2012-12-30T14:56:54.257 に答える
11

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

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

于 2013-09-11T06:27:04.970 に答える
1

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

于 2016-02-25T20:39:13.157 に答える