EC2, Tomcat, Amazon Linux и Out of memory

Я использую AWS Elastic Beanstalk для запуска своего приложения на Tomcat 8.5 с Java 8 , работающей на 64-битной Amazon Linux . Я использую t3.small , который, согласно спецификации, имеет 2vCPI и 2,0 ГБ памяти. Моя конфигурация выглядит следующим образом:

enter image description here

Через некоторое время (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

Журнал Cloud Watch показывает: enter image description here

Означает ли это, что t3.small недостаточно для работы моего сервера без проблем с памятью, или у меня есть утечка памяти в моем java-приложении? Могу ли я как-нибудь исправить это, изменив конфигурацию?

1
задан 25 January 2019 в 12:05
1 ответ

Вы хотите запустить приложение, которому требуется 1,5 ГБ на машине с 2 ГБ, - это довольно большая нагрузка, поскольку для системы, дисковых кешей, других процессов и т. не ожидал бы высокой производительности, даже если бы он не аварийно завершился.

Запустите его на t3.medium и посмотрите, все ли происходит сбой. Если это так, у вас может быть утечка памяти. Если это не так, значит, вашему приложению просто нужно больше ОЗУ, чем может предоставить t3.small .

Если вы все равно настаиваете на использовании t3.small , даже если он этого не делает » Чтобы обеспечить достаточный объем памяти, вы можете попробовать добавить пространство подкачки (например, 2 ГБ) - это увеличит объем памяти, который приложение сможет выделить, но некоторые из них будут очень медленными, потому что они находятся на диске. Это может иметь значение, а может и не иметь значения, зависит от того, как приложение использует выделенную память.

Также помните о CPU Credits , которые используют экземпляры T2 / T3 - вы можете столкнуться с замедлением через некоторое время. быстрой обработки. Это описано здесь: При выяснении условий работы t2 и t3?

Суть в следующем: используйте экземпляр подходящего размера . Вы же не хотите, чтобы у ЦП закончилась память, особенно при производстве.

Надеюсь, что это поможет :)

2
ответ дан 3 December 2019 в 20:10

Теги

Похожие вопросы