Назад | Перейти на главную страницу

EC2, Tomcat, Amazon Linux и нехватка памяти

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

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

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

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

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

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

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

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

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