Я реализовал веб-сервис, используя компонент Jetty Camel через Akka (конечная точка), который перенаправляет полученные сообщения в пул актеров с настройкой:
def receive = _route()
def lowerBound = 5
def upperBound = 20
def rampupRate = 0.1
def partialFill = true
def selectionCount = 1
def instance() = Actor.actorOf[Processor]
И Processor - это класс, который обрабатывает полученное сообщение и отвечает с результатом процесса. Приложение работало нормально и безупречно на моем локальном компьютере, однако после его развертывания на микроэкземпляре EC2 (512 м памяти - CentOS, как ОС) ОС (oom-killer) убивает процесс из-за OutOfMemory (не JVM OOM) после того, как 30 звонков или около того (независимо от частоты звонков).
Профилирование приложения локально не показывает каких-либо значительных утечек памяти, если они вообще существуют. Из-за некоторых трудностей я не смог выполнить правильное профилирование на удаленной машине, но, наблюдая за выводом «top», я заметил кое-что интересное: свободная память остается около 400 МБ после инициализации приложения, после чего она отскакивает от 380 МБ до 400 МБ, что кажется довольно естественно (gc, и т. д.). Но интересно то, что после получения 30-го или около того звонка он внезапно переходит оттуда к 5 Мб свободной памяти, а бум убивается. Журнал oom-killer в / var / log / messages подтверждает, что это было сделано ОС из-за нехватки памяти / свободного обмена.
Теперь это не совсем относится к Akka, но я наконец решил, что должен посоветоваться с вами, ребята, после 3 дней безнадежной борьбы.
Спасибо за любые предложения.