je l'ai mis en place un service Web en utilisant la composante jetée de Camel par Akka (point final) qui transmet les messages reçus à un pool d'acteur avec la configuration de:processus JVM tué par OS
def receive = _route()
def lowerBound = 5
def upperBound = 20
def rampupRate = 0.1
def partialFill = true
def selectionCount = 1
def instance() = Actor.actorOf[Processor]
Et processeur est une classe traite le message reçu et répond avec le résultat du processus. L'application a fonctionné normalement et sans faille sur ma machine locale, mais après l'avoir déployée sur une micro-instance EC2 (512m de mémoire - CentOS comme OS) l'OS (oom-killer) tue le processus en raison de OutOfMemory (pas JVM OOM) 30 appels ou plus (quelle que soit la fréquence des appels).
Le profilage local de l'application n'indique aucune fuite de mémoire significative, s'il en existe. En raison de certaines difficultés je ne pouvais pas effectuer correctement le profilage sur la machine distante mais en surveillant la sortie "top", j'ai observé quelque chose d'intéressant: la mémoire disponible reste autour de 400mb après l'initialisation de l'application, ensuite elle rebondit entre 380mb et 400mb assez naturel (gc, etc). Mais la partie intéressante est que, après avoir reçu le 30e appel, il va soudainement à partir de là à 5 Mo de mémoire libre et de boom, il est tué. Le journal oom-killer dans/var/log/messages vérifie que cela a été fait par le système d'exploitation en raison du manque de mémoire/échange libre.
Maintenant, ce n'est pas tout à fait pertinent, mais Akka-je finalement décidé que je devais demander des conseils de vous les gars, après 3 jours de lutte sans espoir.
Merci pour les pistes.
Avez-vous essayé de réduire la taille du tas JVM? –
Oui, je lui ai fixé une limite dure de 64m, mais étrangement, il est encore tué avant d'atteindre la limite de la JVM. Peut-être que je devrais essayer des quantités plus faibles? – parsa