Les Fuites de mémoire à l'aide d'Exécuteurs testamentaires.newFixedThreadPool()

Je suis en utilisant Spring3.1 seul env.

(ce problème qui n'est pas nécessaire liée au Printemps. c'est se comporter de la même également autonome env.)

J'ai implémente un auditeur qui reçoit des messages de Sujet. les messages de taux est très élevé (en parlant de 20/30 m/s).

certains messages peuvent prendre plus de temps de traitement puis de l'autre.

L'auditeur travaille avec la même instance qui signifie que si un message en cours de traitement trop long, il frappe nos performances assez bien.

Nous avons pensé faire notre propre piscine d'objets au lieu d'utiliser le même port d'écoute de l'instance, mais ensuite j'ai découvert le Exécuteurs(java.util.de façon concomitante.Les exécuteurs testamentaires).

Donc, pour chaque message reçu sur un autre fil de discussion sera alloué. cela fera en sorte que notre auditeur instance sera libre de traiter les messages en parallèle.

private ExecutorService  threadPool = Executors.newFixedThreadPool(100);
    @Override
    public void onMessage(final Message msg)
    {
        Runnable t = new Runnable()
        {
            public void run()
            {
                onSessionMessage(msg);
                log.trace("AbstractSessionBean, received messge");
            }
        };
        threadPool.execute(t);
    }

Qui semble résoudre notre problème de performance. mais après le contrôle de l'application avec jconsole nous face maintenant d'énormes fuites de mémoire.

Le segment de l'utilisation de la mémoire en cours a augmenté de manière significative dans le temps.

J'ai donc essayé de "jouer" un peu avec le FixedThreadPool nombre de taille. encore une grande utilisation de la mémoire:

Les Fuites de mémoire à l'aide d'Exécuteurs testamentaires.newFixedThreadPool()

Aucune idée de comment puis-je résoudre ce problème? d'autres idées pour résoudre mon problème de clé?

Les Fuites de mémoire à l'aide d'Exécuteurs testamentaires.newFixedThreadPool()

Les Fuites de mémoire à l'aide d'Exécuteurs testamentaires.newFixedThreadPool()

Après l'exécution de heap dump j'ai deux problème suspects:

Les Fuites de mémoire à l'aide d'Exécuteurs testamentaires.newFixedThreadPool()

grâce,
ray.

Ce qui se passe au fil du temps? Le souvenir obtenir des remises en état ou êtes-vous confrontés OOM?
Salut Andrew fait, je n'ai pas fait de test de mon programme que loin.. car il semble que le OOM est à venir..
Aussi, si vous êtes déjà profilage: Pouvez-vous faire un heapdump pour voir ce que les objets sont vraiment consommer de l'espace?
ce param pourraient être prises à partir de jconsole? ou Dois-je besoin d'un outil spécifique pour cela?
Vous pouvez utiliser visualvm pour prendre un tas de vidage

OriginalL'auteur rayman | 2012-12-17