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 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам