我已经通过 Akka(端点)使用 Camel 的 Jetty 组件实现了一个 Web 服务,它将接收到的消息转发到具有以下设置的参与者池:
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 微型实例(512m 内存 - 类似 CentOS 的操作系统)上后,操作系统(oom-killer)由于 OutOfMemory(不是 JVM OOM)而终止了进程30个左右的电话(不管电话的频率如何)。
在本地分析应用程序不会显示任何显着的内存泄漏(如果存在的话)。由于一些困难,我无法在远程机器上执行正确的分析,但监视“top”的输出,我观察到一些有趣的事情,即应用程序初始化后可用的可用内存保持在 400mb 左右,之后它在 380mb 到 400mb 之间反弹,这似乎很自然(gc等)。但有趣的是,在接到第 30 个左右的电话后,它突然从那里变成了 5mb 的可用内存,然后砰的一声,它被杀死了。/var/log/messages 中的 oom-killer 日志验证这已由操作系统完成,因为缺少内存/空闲交换。
现在这并不是完全与 Akka 相关,但经过 3 天的无望摔跤后,我终于决定向你们寻求一些建议。
感谢任何线索。