私は実稼働環境のwebappにメモリの問題があります。Linux Ubuntu Tomcatベストプラクティスでメモリが不足するのを避けるため
AWS EC2 t2.mediumインスタンス(2コアのCPU 64ビット+ 4GB RAM)でTomcatを実行しています。
これはjavamelodyからいくつかの情報です:
OS: OS Linux, 3.13.0-87-generic , amd64/64 (2 cores)
Java: Java(TM) SE Runtime Environment, 1.8.0_91-b14
JVM: Java HotSpot(TM) 64-Bit Server VM, 25.91-b14, mixed mode
Tomcat "http-nio-8080": Busy threads = 4/200 ++++++++++++
Bytes received = 8.051
Bytes sent = 206.411.053
Request count = 3.204
Error count = 70
Sum of processing times (ms) = 540.398
Max processing time (ms) = 12.319
Memory: Non heap memory = 130 Mb (Perm Gen, Code Cache),
Buffered memory = 0 Mb,
Loaded classes = 12,258,
Garbage collection time = 1,394 ms,
Process cpu time = 108,100 ms,
Committed virtual memory = 5,743 Mb,
Free physical memory = 142 Mb,
Total physical memory = 3,952 Mb,
Free swap space = 0 Mb,
Total swap space = 0 Mb
Free disk space: 27.457 Mb
そして、私のアプリケーションは、に行く:Javaランタイム環境が継続するためのメモリが不足してい
。 ネイティブメモリ割り当て(mmap)が予約済みメモリをコミットするために12288バイトをマップできませんでした。
次の設定オプションを適用しましたが、もう一度失敗したようです。
輸出JAVA_OPTS = " - Dfile.encoding = UTF-8 -Xms1024m -Xmx3072m -XX:PermSizeを= 128メートル-XX:MaxPermSizeを= 256メートル"
は私のLinux構成のために[OK]を、この設定ですか?
詳細については、私のデータベースとファイルシステムが別のt2.mediumインスタンス(Windows 2コアのCPU + 4GB RAM)で動作しています。
ありがとう、ごめんなさい、私の英語です。
EDITED:
まだ問題が起こっています。最も奇妙なことは、ログには実行中の大きなプロセスがなかったことと、それが過ぎた時が午前中だったことです(アプリケーションに接続された人がほとんどいない)。
私は過去にWindows環境でこのアプリケーションを使用していましたが、これは実現しませんでした。私はLinuxのインスタンスが良いと思ったが、私は夢中になっている。
ログ:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f2d80000, 43515904, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 43515904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ubuntu/hs_err_pid20233.log
今私の設定がsetenv.shでこれです:
輸出CATALINA_OPTS = -
"-server Dfile.encoding = CP1252 -Xms2048m -Xmx2048m"そして、hs_errファイルにはこの行があるかどうかわかりません:
メモリ:4kページ、物理4046856k(102712k無料)、スワップ0k(0kフリー)
を使用する代わりに、(これは、shutdownコマンドを含め、JVMのいずれかの開始のために使用されます)
JAVA_OPTS
を設定する必要はありません実行している唯一の大きなプロセスは、アプリケーションを持つTomcatです。私はPermGenを削除したので、Java 8はそれを削除しました(そのアドバイスのおかげで)。 しかし、何かが間違っていると思います。「トップ」コマンドではメモリとプロセスを監視しており、「フリー」メモリは大きな数字から始まり、減少と減少を開始します。なぜか分かりませんが、使用されるメモリのようなものですneversは再利用されます。 –明示的に3072mに拡大することを許可します。この点に達するまでは、再利用の必要はありません。そのため、すべてのメモリを一度に割り当てる必要があります。十分なメモリがあるかどうかをすぐにご確認いただけます。 –
同じxmsとxmxを明示的に追加します。次に、Tomcatが割り振ったメモリを解放しないと言っていますか?たとえそれを使用していないとしても? –