Linux

本体で実行されているWebSphere Application Serverで、”Too Many Open files error”および”スレッドの作成に失敗したためのネイティブOutOfMemory”の問題を解決します

image

WebSphere Application ServerのネイティブのOutOfMemory問題については、かなりの数の問題レコード(PMRs)/サービス要求(SRs)を受け取りますが、最も有名なネイティブOOM問題の1つは、ulimit-u(NPROC)値が
また、Linux上で実行されているWebSphere Application Serverでは、「開いているファイルが多すぎます」エラーのPmrがかなり発生します。
簡単なトラブルシューティングとulimitコマンドのチューニングを使用すると、これらの問題に対してIBMサポートでPMRを開くのを簡単に回避できます。

1)Linuxではulimitとは何ですか?
ulimitコマンドを使用すると、プロセス-データ-サイズ、プロセス仮想メモリ、プロセス-ファイル-サイズ、プロセス数など、システム内のユーザー-リソース制限を制御で

2)このコマンドの設定が正しく設定されていない場合はどうなりますか?
ネイティブのOutOfMemory、開いているファイルが多すぎるエラー、ダンプファイルが完全に生成されていないなど、さまざまな問題が発生します。

3)現在のulimit設定を確認するにはどうすればよいですか?
現在の設定を確認するには、さまざまな方法があります。

a)コマンドプロンプトから
issue ulimit-a
を発行します。
コアファイルサイズ(ブロック、-c)0
データセグサイズ(kbytes、-d)無制限
スケジューリング優先度(-e)0
ファイルサイズ(ブロック、-f)無制限
保留中の信号(-i)32767
最大ロッ-n)1024
パイプサイズ(512バイト、-p)8
posixメッセージキュー(バイト、-q)819200
リアルタイム優先度(-r)0
スタックサイズ(kbytes、-s)10240
cpu時間(秒、-t)無制限
最大ユーザープロセス(-u)50
仮想メv)unlimited
ファイルロック(-x)unlimited
これは表示されます 現在のログインセッションとデフォルトのソフト制限に設定されているすべての現在の設定が表示されます。 限界は柔らかく、懸命にできます。
ハード制限は、設定可能な最大制限です。 ハード制限を増やすことができるのはrootユーザーだけですが、他のユーザーはそれらを減らすことができます。 ソフト制限は他のユーザーが設定および変更できますが、ハード制限を超えることはできません。
特定の制限値を検索する場合は、現在のソフト制限値に対して
ulimit-Sa
を発行します。
ulimit-Ha
現在のハードリミット値の場合。

b)調査対象のWebSphere Application ServerのプロセスID(PID)がわかっている場合は、次のファイルを調べることもできます。
場所:/proc/<PID>
ファイル:limits
このファイルの内容は、”ulimit-a”コマンドの出力に似ています。
このファイルには、指定されたPIDのulimitパラメータとそれに関連する値のリストがあります。C)現在のulimit設定を確認するサーバーのプロセスIDがわかっている場合は、
kill-3<PID>
このJavacoreを任意のテキストエディタ(NotePad++、Ultra Editなど)で開くことができます。)
とulimitを検索すると、ulimitセクションが表示されます。
Javacoreから見たulimit設定の例。
ユーザーの制限(NOFILEおよびNPROCを除くバイト数))
————————————————————–
タイプソフトリミットハードリミット
RLIMIT_AS11788779520無制限
RLIMIT_CORE1024無制限
RLIMIT_CPU無制限
RLIMIT_DATA無制限
RLIMIT_FSIZE無制限
RLIMIT_LOCKS無制限
RLIMIT_MEMLOCK無制限
RLIMIT_NOFILE無制限
RLIMIT_NOFILE無制限
RLIMIT_NOFILE無制限
rlimit_MEMLOCK無制限
RLIMIT_CORE1024無制限
RLIMIT_CPU無制限
RLIMIT_DATA無制限
rlimit_FSIZE無制限
18192 18192
rlimit_nproc79563 79563
rlimit_rss8874856448UNLIMITED
rlimit_STACK33554432unlimited
グローバル設定を検索する場合, linuxで以下のファイルを調べます。
/etc/security/limits.コンフ…
これらのグローバル構成制限ファイルへの変更は、システム管理者が実行する必要があります。
ulimitコマンドの各設定の詳細と、さまざまなOSでのulimitコマンドについては、このtechnote:guidelines for setting ulimits(WebSphere Application Server)

4)ulimit設定が不十分なためにどのようなネイティブOOMが
“スレッドの作成に失敗しました”というメモリ不足のダンプイベントが発生します。
: 以下のメッセージがJavacoreに表示されます。
“systhrow”(00040000)詳細”java/lang/OutOfMemoryError”
“スレッドの作成に失敗しました:retVal-1073741830,errno12″受信しました
errno12は、開始スレッド上の実際のネイティブOOMです。
時には、SystemOutのようなサーバーログにもスレッドの作成に失敗したことが見られます。ログ、SystemErr。ログなど また、FFDCログでは、このエラーは、新しいスレッドの作成中にネイティブのOutOfMemoryが発生したことを示しています。

5)このエラーが発生する理由は何ですか?その理由は、現在のulimit-u(NPROC)値が低すぎるためです。
nproc制限は、通常、この数を決定するためにサーバー上のプロセスのみをカウントします。 WebSphere Application Serverを実行しているLinuxシステムは、特定のケースです。 Linuxのnproc制限は、特定のユーザーのために存在できるすべてのプロセス内のスレッド数をカウントします。 古いバージョンのLinuxのほとんどの場合、この値は2048年頃にデフォルト設定されます。 初期設定のRed Hat Enterprise Linux(RHEL)6では、nprocのデフォルト値は1024に設定されます。
大規模なシステムのこの低いデフォルト設定では、すべてのプロセスで十分なスレッドが許可されません。

6)この問題を修正するには?
WebSphere Application Serverサポートでは、Linuxで実行する場合、ulimit-uまたはnprocを131072の値に設定して、作成可能なプロセス内のフォークされたすべてのスレッドを安全に考慮するこ
ソフトリミットの値を設定する
ulimit-u131072
を設定することにより、現在のセッションのために一時的に増加させることができます。
ソフト制限とハード制限の両方を設定するには、ソフト制限に対して
ulimit-Su131072を発行します。
ulimit-Hu131072ハードリミット用。グローバルに設定するには、Linuxシステム管理者は
/etc/security/limitsを編集する必要があります。conf
これを説明するこのtechnoteがあります:不十分なulimit-u(NPROC)値はネイティブのOutOfMemoryに寄与します

7)”開いているファイルが多すぎます”エラーはどうですか?
このエラーは、プロセスで使用可能なすべてのファイルハンドルが使用されていることを示します(これにはソケットも含まれます)。
例:以下のようなエラーがサーバーログに表示されます。
java.io.IOException:too many open files
prefs W Could not lock User prefs. UNIXエラーコード24。

8)なぜこのエラーが発生するのですか?
現在開いているファイルの数の制限が小さすぎる場合や、アプリケーションの一部によってファイルハンドルが漏洩した結果である場合に発生す

9)これを修正するには?
IBMサポートでは、Linux上で実行されているWebSphere Application Serverのulimit-n値を65536として、ソフト制限とハード制限の両方で設定するオープン-ファイル数を推奨しています。
ulimit-Sn65536
ulimit-Hn65536

10)アプリケーションにファイル記述子リークがある場合はどうなりますか?
Linuxでは、定期的に問題のあるJVMプロセスIDに対してlsofコマンドを使用して以下のデータを取得することで、特定の開いているファイルが一定期間
lsof-p-r>lsof.out
出力は、指定されたPIDの開いているすべてのファイルを提供します。 どのファイルが開かれ、どのファイルが時間の経過とともに成長しているかを判断することができます。
または、次のディレクトリ内のファイル記述子の内容をシンボリックリンクのリストとして一覧表示することもできます。PIDをプロセスID
に置 これは、lsofコマンドにアクセスできない場合に特に便利です。
ls-al/proc/PID/fd
関連technote:Too Many Open Filesエラーメッセージ

11)他に調整するものはありますか?
linuxでpid_maxを使用して調整できる設定がもう1つあります。 大規模な環境を使用していない場合は、この手順を省略できます。
pid_max設定は、システムがサポートする一意のプロセス識別子の最大数の内部制限用です。
デフォルト値は32,768であり、これはほとんどの顧客にとって十分です。
膨大な数のプロセスを持つ大規模な環境では、この制限に達する可能性があり、
ネイティブのOutOfMemoryは、
Javacoreの同様のメッセージで発生し、スレッドerrno11を作成
例:
ダンプイベント”systhrow”(00040000)詳細”java/lang/OutOfMemoryError”
“スレッドの作成に失敗しました:retVal-106040066,errno11″を受け取りました
Linux上で現在のpid_max値を検索します。
cat/proc/sys/kernel/pid_max
それを増やすには、
sysctl-w kernelを発行します。pid_max=<Value>
場合によっては、スレッドリークが原因でデフォルトの32,768に達することがあり、ネイティブOOMが発生します。 この場合、ネイティブOOMを解決するには、このスレッドプールのリークを修正する必要があります。
関連技術:
ネイティブ-メモリーの問題のトラブルシューティング
WebSphere Application Serverスレッド-プールでのネイティブ-メモリーの使用の可能性
概要:
スレッドの作成に失敗したために発生する”too many open files error”および”native out of memory”の問題を回避するために、Linuxで以下のulimit設定を行ってください。
ユーザーの制限(NOFILEおよびNPROCを除くバイト数)
soft_limit hard_limit
RLIMIT_NOFILE65536 65536
RLIMIT_NPROC131072 131072

12) 他に何か確認することはありますか?
IBMサポートでは、これまでに説明した設定を含む、Linux上で実行されているWebSphere Application Serverのすべてのulimit設定について、以下の値を推奨しています。
ユーザー制限(NOFILEおよびNPROCを除くバイト単位)
タイプソフト制限ハード制限
RLIMIT_AS unlimited unlimited
RLIMIT_CORE unlimited unlimited
RLIMIT_CPU unlimited unlimited
RLIMIT_DATA UNLIMITED unlimited
RLIMIT_FSIZE unlimited unlimited
RLIMIT_LOCKS unlimited unlimited
RLIMIT_MEMLOCK unlimited unlimited
rlimit_MEMLOCK unlimited unlimited
rlimit_MEMLOCK unlimited unlimited65536 65536
RLIMIT_nofile65536 65536
RLIMIT_nproc131072 131072

13) 次は何ですか?
DMGr、NodeAgent、AppServersなどのすべてのWebSphere Application Server Jvmに上記の設定があることを確認し、設定がグローバルに行われた場合はJvmを再起動し、現在のセッション(シェル)で変更が行われた場合は同じユーザーでログオフしてログインし直します。

コメントを残す

メールアドレスが公開されることはありません。