Jstack and Not enough storage is available to process this command
Asked Answered
N

5

28

I'm trying to run jstack command on my java application. Application is rather big, running inside jboss AS occupying about 4gb of memory. OS is Windows Server 2003 Standard edition. Every time i get an error "Not enough storage is available to process this command". There is enough ram, 16gb, and disk space. So, any ideas?

Ninette answered 25/5, 2009 at 12:52 Comment(3)
That appears to be a windows error message.Handwriting
I have it on a Tomcat that's taking 280 mb.Loadstar
Also looked at this question - #222608 It doesn't help as jconsole doesn't see the application.Loadstar
E
44

I ran into this recently on Win2008r2 and thought I'd share my solution since it took a while to figure out. Rob's comment about psexec -s is what did it for me.

It appears that on Vista and later jstack doesn't work against services because of the user context. It has nothing to do with memory. I suspect this is the same reason people have seen this problem on 2003 via remote desktop, unless you use the /admin or /console switch on mstsc. As of Vista the tightened security is probably what broke it.

Starting my app from a cmd window worked fine, but that doesn't help me debug our standard install. Enabling the java debug port (for VisualVM, Eclipse or most any Java debugger) requires an app restart, so you lose the state you're probably trying to capture if you don't already have debugging enabled. Starting the service under my user credentials did not work - I was a little surprised at that. But psexec -s runs jstack from the system context, which worked like a charm. Oh, and you'll need to run psexec from an elevated cmd prompt, if UAC is on.

Eloyelreath answered 11/6, 2010 at 21:24 Comment(1)
psexec can be found on the Microsoft website: technet.microsoft.com/en-us/sysinternals/bb897553.aspxMarcomarconi
R
7

In the past I have seen this when the JVM is running as a Windows Service on Windows 2003.

First, check to see if this is an issue with the TMP directory.

Second, jstack (or the other utilities like jconsole) will not connect to the local process unless it is running in the same session. If the service is running as a specific user, you may be able to connect by logging into the same session. If you are using Remote Desktop, you can connect using "mstsc /admin" (used to be /console) and try to run jstack again. Definitely check to make sure the TMP directory is set properly if this doesn't fix the problem.

If the service is running as LocalSystem, the above procedure probably will not help much. I don't know if there is a way to log into the same session as LocalSystem.

Some other alternatives may be to set the process up for remote monitoring and use jvisualvm (from the server itself or another machine) to connect over a port and do a thread dump.

Rhoades answered 4/11, 2009 at 22:57 Comment(1)
Solution if it runs as Local System: Connect using "mstsc /admin" using a login account (not sure exact permissions it needs to have, mine was in the Administrators group) and use the Sysinternals psexec tool as follows: psexec -s "%JAVA_HOME%\bin\jstack.exe" PID >stack.txt Where PID is the process ID of your process. You may also have to substitute the actual path to your JDK depending upon your specific environment.Rhoades
O
3

We had problems running JStack on a Windows machine with even a modest application (1GB). We ended up doing our stack and heap analysis using Netbeans. This seemed to cope with the parsing of dump files a lot better. YMMV.

Give Netbeans a try for profiling - its very good. Note that VisualVM is a cutdown NB profiler and comes with 6u7.

Outrange answered 25/5, 2009 at 23:1 Comment(0)
P
2

psexec -s jstack PID >> c:\jstack.log perfectly works on the same machine. For the first time it took some time but again I executed with the redirect to file option, it completed with in few seconds.

Perorate answered 29/8, 2012 at 13:29 Comment(0)
Q
0

This is an error message from the underlying O/S. There's not much you can do in your code to deal with this other than catch the exception which is thrown. Boo to Windows for being so limited.

http://technet.microsoft.com/en-us/library/cc978735.aspx

Quezada answered 5/3, 2010 at 19:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.