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?
Суть в следующем: используйте экземпляр правильного размера. Вы не хотите исчерпать память процессора, особенно не в производстве.
Надеюсь, это поможет:)