Я использую 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 ГБ) - это увеличит объем памяти, который приложение сможет выделить, но некоторые из них будут очень медленными, потому что они находятся на диске. Это может иметь значение, а может и не иметь значения, зависит от того, как приложение использует выделенную память.
Также помните о CPU Credits , которые используют экземпляры T2 / T3 - вы можете столкнуться с замедлением через некоторое время. быстрой обработки. Это описано здесь: При выяснении условий работы t2 и t3?
Суть в следующем: используйте экземпляр подходящего размера . Вы же не хотите, чтобы у ЦП закончилась память, особенно при производстве.
Надеюсь, что это поможет :)