web-dev-qa-db-ja.com

Solaris10上のTomcatのメモリの問題

Solaris10を実行しているサーバーがあります。70+ GiB空きRAMが報告されます。Java 1.7.0_80 in64を使用してTomcat7.0.68を起動しようとしています。 -ビットモード。

サーバーは、717MiBのRAMを割り当てることができないと主張しています。試すたびにhs_err_pidxxx.logファイルを取得します。それはこれを示唆しています:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 717225984 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space

いいえ。70個のGiBが利用可能で、700個のMiBを割り当てようとしています。

#   In 32 bit mode, the process size limit was hit

64ビットモードです。

# Possible solutions:
#   Reduce memory load on the system

このマシンにはOS以外は何もありません。

#   Increase physical memory or swap space

すでに必要以上に2桁多くなっています。

#   Check if swap backing store is full

番号。

#   Use 64 bit Java on a 64 bit OS

完了。

#   Decrease Java heap size (-Xmx/-Xms)

できればと思います。

#   Decrease number of Java threads

これはどのように行われますか?

#   Decrease Java thread stack sizes (-Xss)

推奨値?デフォルトですが、それが何であるかはわかりません。

#   Set larger code cache with -XX:ReservedCodeCacheSize=

繰り返しますが、デフォルトです。


$ swap -s
total: 48607296k bytes allocated + 18201336k reserved = 66808632k used, 311770552k available
1
Glenn Lasher

無料RAMは、何も保存されていないことを意味します。それは、使用できるという意味ではありません。RAMが無料であると報告される可能性は完全にあります。他のアプリケーションが予約しているため、新しいJVMでは使用できません。いずれの場合も、JVMは、ほとんどのアプリケーションと同様に、RAMではなく、仮想メモリを要求します。これは、システムが抱えている問題、仮想メモリの不足の可能性があります。

このコマンドを使用すると、仮想メモリの使用量を知ることができます。

swap -s

仮想メモリ不足に対する簡単な答えは、メモリ予約のスワップ領域を増やして(または作成して)、バッキングストア領域を持たせることです。

編集:投稿した追加情報を使用して、アプリケーションがより多くの仮想メモリを割り当てることができない理由は、メモリの上限が設定されている非グローバルゾーンで実行しているためです。非グローバルゾーンはコンテナです。つまり、すべて同じカーネルを共有します。ただし、リソースの使用を制限して、1つのゾーンが他のゾーンを妨害しないようにすることができます。

仮想メモリを使用する他のプロセスを停止する以外に、rootとしても、このゾーンからできることは何もありません。グローバルゾーン管理者に ゾーンにより多くの仮想メモリを付与する 、この場合はzone.max-swap設定を依頼する必要があります。

1
jlliagre