J'ai un comportement très étrange chez JBoss, et j'aimerais profiter de la Sagesse collective de la foule SO.Fuite de mémoire dans JBoss
Nous utilisons JBoss (4.0.4 je pense) pour traiter les appels SOAP. En fait, il est utilisé comme serveur RPC glorifié, pas plus. Nous manquons de mémoire lorsque plus de 20 clients envoient leurs demandes en même temps. Les requêtes sont constituées de la requête entrante plutôt petite (SOAP correcte) et du paquet de résultat retourné qui est essentiellement une longue chaîne SOAP (et le contenu de la chaîne est XML). Oui, je réalise que c'est sous-optimal. Ne demande pas.
J'ai suivi la fuite vers une instance de org.jboss.axis.message.SAX2EventRecorder qui contient 4 millions d'objets (chaînes et entiers). Maintenant, même la réponse la plus longue ne contient pas 4 Mo de données. Les demandes sont toutes plus petites que 40K. Quelque chose est louche, mais je ne trouve aucune documentation sur le Web. Est-ce que quelqu'un peut me dire à quoi sert l'enregistreur? Et comment puis-je m'en débarrasser? Ou peut-être le configurer pour avoir moins de mémoire? Toute aide est appréciée.
Mise à jour: Pour clarifier - je l'ai fait faire vidage de la mémoire, et la décharge montre un tableau ou 4,000,000+ objets, cordes et Entiers. Le tableau est la propriété d'une org.jboss.axis.message.SAX2EventRecorder qui est à son tour détenue par ces gars-là:
[email protected] (141 octets): enregistreur de champ de org.jboss .axis.message.RPCParamElementImpl @ 0x19c32260 (123 octets): enregistreur de champ [email protected] (121 octets): enregistreur de champ [email protected] (124 octets) : enregistreur de terrain [email protected] (67 octets): enregistreur champ [email protected]98 (24 octets): champ $ this 0
Les structures de données de notre propre application sont quete gonflé, mais pas à ce degré.
Autre mise à jour: les puissances qui ont trouvé une solution "power-that-be-solution": nous passons à la mémoire 64 bits. Hourra.
@Arkadiy: Ne supposez pas qu'il y a un bug dans JBoss; Supposons que le bug est dans votre code. Vous avez déjà identifié une condition "sous-optimale" de votre logiciel. Pourquoi ne peut-il y en avoir plus? –
Ma question est: que faites-vous en cours d'exécution une telle ancienne version de JBoss? Il a 2,5 ans. Vous trouverez souvent chez les gens une hésitation ou même une réticence des gens à aider avec des logiciels obsolètes. – cletus
@Gortok - J'ai assumé notre propre faute, mais ce damné tableau est responsable de la moitié de la version utilisée, et cela n'a rien à voir avec nous. Et, de la façon dont il est tenu (voir mise à jour), il peut être alloué pour chaque requête en cours, ce qui explique pourquoi nous échouons seulement lorsqu'un certain nombre de demandes sont en cours. – Arkadiy