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