AWS Elastic Beanstalkを使用して、Tomcat 8.5とJava 8でアプリケーションを実行します)64ビットで実行Amazon Linux。私はt3.smallを使用します。これは、仕様によれば、2vCPIと2.0GBのメモリを備えています。私の構成は次のようになります。
しばらくすると(2日)、アプリケーションのメモリが不足します。システムログは次のことを示しています。
[ 4627.110117] [ pid ] uid tgid total_vm rss nr_ptes nr_pmds swapents oom_score_adj name
[ 4627.204880] [ 8096] 0 8096 191163 10071 105 4 0 0 aws
[ 4627.209125] [ 8466] 91 8466 1132802 432642 998 8 0 0 Java
[ 4627.217630] [ 8540] 48 8540 328251 999 98 4 0 0 httpd
[ 4627.221861] [ 8541] 48 8541 328285 1158 98 4 0 0 httpd
[ 4627.226172] [ 8542] 48 8542 328280 1265 98 4 0 0 httpd
[ 4627.234663] [ 8655] 0 8655 134228 5330 81 3 0 0 cfn-hup
[ 4627.273722] [ 8738] 48 8738 328280 1297 98 4 0 0 httpd
.......
[ 4627.299082] Out of memory: Kill process 8466 (Java) score 865 or sacrifice child
[ 4627.303727] Killed process 8466 (Java) total-vm:4531208kB, anon-rss:1730568kB, file-rss:0kB, shmem-rss:0kB
T3.smallではメモリの問題なしにサーバーを実行するには不十分であるか、Javaアプリでメモリリークが発生していますか?構成を変更して修正できますか?
2GBのマシンで1.5GBを必要とするアプリを実行したい-システム、ディスクキャッシュ、その他のプロセスなどにあまり残されていないので、かなりのストレッチです。たとえそれがあったとしても、素晴らしいパフォーマンスは期待できません。クラッシュしませんでした。
t3.medium
で実行し、それでもクラッシュするかどうかを確認します。もしそうなら、あなたはメモリリークを持っているかもしれません。そうでない場合は、アプリがt3.small
が提供できる以上のRAM)を必要としていることを意味します。
それでもt3.small
を使用することを主張する場合は、適切なメモリサイズが提供されていなくても、スワップスペース(2GBなど)を追加してみてください。これにより、アプリが割り当てることができるメモリの量が増えますが、ディスク上にあるため、一部は非常に遅くなります。アプリが割り当てられたメモリをどのように使用するかによって、問題になる場合と問題にならない場合があります。
また、T2/T3インスタンスが使用するCPUクレジットにも注意してください。高速処理の期間が経過すると、速度が低下する場合があります。ここで説明します:t2とt3の作業条件を明確にすることについて?
結論は次のとおりです。適切なサイズのインスタンスを使用します。特に本番環境では、CPUパワーのメモリが不足することは望ましくありません。
お役に立てば幸いです:)