Solaris 10で実行されているjavaプロセスは、約200〜300人の同時ユーザーに対応しています。管理者は、プロセスによって使用されるメモリが時間とともに大幅に増加すると報告しています。数日で2GBに達し、決して成長を止めません。Javaプロセスメモリが無限に増加しています。メモリーリーク?
ヒープをダンプし、Eclipse Memory Profilerを使用して解析しましたが、そこから普通のものを見ることはできませんでした。ヒープサイズは非常に小さかった。
メモリ統計ログを追加した後、管理者が使用する「トップ」ユーティリティによって報告されたメモリ使用量と、MemoryMXBeanおよびランタイムライブラリによって報告された使用量との間に不一致が見つかりました。
ここには両方の出力があります。
Memory usage information
From the Runtime library
Free memory: 381MB
Allocated memory: 74MB
Max memory: 456MB
Total free memory: 381MB
From the MemoryMXBean library.
Heap Committed: 136MB
Heap Init: 64MB
Heap Used: 74MB
Heap Max: 456MB
Non Heap Committed: 73MB
Non Heap Init: 4MB
Non Heap Used: 72MB
Current idle threads: 4
Current total threads: 13
Current busy threads: 9
Current queue size: 0
Max threads: 200
Min threads: 8
Idle Timeout: 60000
PID USERNAME NLWP PRI NICE SIZE RES STATE TIME CPU COMMAND
99802 axuser 115 59 0 2037M 1471M sleep 503:46 0.14% java
これはどのようにすることができますか? topコマンドは、はるかに多くの使用法を報告します。私は、RESがヒープ+非ヒープに近いはずだと予想していました。
のpmap -xは、しかし、ヒープメモリのほとんどを報告します。
Address Kbytes RSS Anon Locked Mode Mapped File
*102000 56 56 56 - rwx---- [ heap ]
*110000 3008 3008 2752 - rwx---- [ heap ]
*400000 1622016 1621056 1167568 - rwx---- [ heap ]
*000000 45056 45056 45056 - rw----- [ anon ]
誰もがこの上でいくつかの光を当てるていただけますか?私は完全に失われています。
ありがとうございました。
更新
これは、Linux上の問題ではありません。
また、Peter Lawreyの回答に基づいて、pmapによって報告される「ヒープ」は、Javaヒープではなくネイティブヒープです。
このアプリケーションで使用されているネイティブライブラリはありますか? – JimmyJames
pmapによって報告される「ヒープ」は、Javaヒープではなくネイティブヒープになる可能性があります。ネイティブスペースでアプリケーションが使用できるリソース –
確かに、わからない。アプリケーション処理REST呼び出し内にJettyサーバーがあります。呼び出しに応じて、ojdbcを使用してデータベースに対して選択/挿入/削除を実行するか、I/Oを実行することがあります。だから私の推測は、はい、私たちはネイティブライブラリを使用していますが、私は彼らが何であるか確実ではありませんか?私が参照できるネイティブJavaライブラリのリストはありますか? –