Jstack et Pas assez de mémoire disponible pour traiter cette commande
Je suis en train de lancer jstack commande sur mon application java. L'Application est plutôt grand, fonctionnant à l'intérieur de jboss COMME une occupation de 4 go de mémoire. OS est Windows Server 2003 Standard edition. Chaque fois que je reçois un message d'erreur "Pas assez de mémoire disponible pour traiter cette commande". Il y a assez de ram, 16 go, et l'espace disque. Alors, des idées?
- Qui semble être un message d'erreur windows.
- Je l'ai sur un Tomcat qui prend 280 mo.
- Également penché sur cette question - stackoverflow.com/questions/222108/... Il n'aide pas que jconsole ne pas voir l'application.
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette récemment sur Win2008r2 et j'ai pensé partager ma solution depuis qu'il a pris un certain temps à comprendre. Rob commentaire à propos de psexec -s est ce qu'il a fait pour moi.
Il apparaît que sur Vista et les versions ultérieures jstack ne fonctionne pas contre les services en raison du contexte de l'utilisateur. Il n'a rien à voir avec la mémoire. Je suppose que c'est la même raison pour laquelle les gens ont vu ce problème sur 2003 via le bureau à distance, sauf si vous utilisez le /admin ou commutateur /console sur mstsc. Comme de Vista le resserrement de la sécurité est sans doute ce qui l'a cassé.
Démarrage de mon application à partir d'une fenêtre cmd a bien fonctionné, mais cela ne veut pas m'aider à déboguer notre installation standard. L'activation de la java debug port (pour VisualVM, Eclipse ou plus Java débogueur) nécessite une application de redémarrer, donc vous perdez l'état, vous êtes probablement en train de capturer si vous n'avez pas de débogage activé. Démarrage du service sous mes informations d'identification utilisateur n'a pas de travail, j'ai été un peu surpris. Mais psexec -s s'exécute jstack à partir du contexte du système, qui a travaillé comme un charme. Oh, et vous aurez besoin pour exécuter psexec à partir d'une élévation de l'invite de cmd, si l'UAC est activé.
psexec
peuvent être trouvés sur le site web de Microsoft: technet.microsoft.com/en-us/sysinternals/bb897553.aspxDans le passé, j'ai vu cela lorsque la JVM est en cours d'exécution en tant que Service Windows sur Windows 2003.
Tout d'abord, vérifiez pour voir si c'est un problème avec le répertoire TMP.
Deuxième, jstack (ou les autres services publics, comme les jconsole) ne se connecte pas au processus local, sauf si elle est en cours d'exécution dans la même session. Si le service est exécuté en tant qu'utilisateur spécifique, vous pouvez être en mesure de se connecter en vous connectant à la même session. Si vous utilisez le Bureau à Distance, vous pouvez vous connecter à l'aide de "mstsc /admin" (utilisé pour être /console) et essayez d'exécuter jstack de nouveau. Certainement assurez-vous que le répertoire TMP est correctement réglé si cela ne résout pas le problème.
Si le service est exécuté en tant que système local, la procédure ci-dessus ne sera probablement pas aider beaucoup. Je ne sais pas si il existe un moyen de se connecter dans la même session que LocalSystem.
Certains autres solutions de rechange peuvent être de définir le processus de suivi pour la surveillance à distance et l'utilisation jvisualvm (à partir du serveur lui-même ou sur une autre machine) pour se connecter sur un port et faire un thread dump.
Nous avons eu des problèmes pour exécuter JStack sur une machine Windows, même avec une faible demande (1 GO). Nous avons fini par faire notre pile et le tas de l'analyse à l'aide de Netbeans. Cela semblait faire face à l'analyse de fichiers de vidage de beaucoup mieux. YMMV.
Donner Netbeans un essai à des fins de profilage - son de très bonne qualité. Notez que VisualVM est un cutdown NB de profils et est livré avec 6u7.
psexec -s jstack PID >> c:\jstack.log
fonctionne parfaitement sur la même machine. Pour la première fois, il a fallu un certain temps mais encore une fois j'ai exécuté avec le rediriger vers un fichier option, il a achevé avec en quelques secondes.C'est un message d'erreur de la base O/S. Il n'y a pas beaucoup que vous pouvez faire dans votre code pour faire face à cette autre que de prendre l'exception qui est levée. Boo de Windows pour être si limité.
http://technet.microsoft.com/en-us/library/cc978735.aspx