I have a somewhat outdated Java EE application running on Sun Application Server 8.1 (aka SJSAS, the predecessor of Glassfish). With over 500 concurrent users, the application is becoming unacceptably slow, and I'm trying to help determine where most of the runtime is spent and what can be done to speed it up. So far, we have experimented and measured using LoadRunner, application server logs, Oracle statpack, snoop, configured acceptor and session flows of the (working) application server, adjusted the Hibernate batch size and used the extraction option, etc., But after some initial win we are struggling to improve the situation.
Well, with this introduction to the problem, here is the real question: if you had a slow Java EE application running on a box whose processor and memory never exceeded 20%, and while working with more than 500 users you showed two things: 1) that requesting even static files in the same process of the server JVM process was extremely slow, and 2) requesting a static file outside the application JVM server process, but in the same field was fast, what would you investigate?
My thoughts initially jumped on the application server threads, both acceptor and session threads, assuming that even requests for static files were queued, waiting for the available thread, and if the CPU / memory was not taxed, then more threads were fine. But then we significantly increased both acceptor and session flows, and there was no improvement.
Editing Permissions:
1) Static files should be served by a web server, not an application server. I use the fact that in our case this (unfortunately) is not a configuration, so I can see the performance of the application server for files that it does not execute, therefore eliminating the cost of database performance, etc.
2) I donβt think there is a proxy server between the proxies and the application server, but even if it did not seem to be overloaded, because the static files requested from the same application server, but outside the JVM application instance coming back.
3) The JVM (Xmx) heap size is set to 1 GB.
Thanks for any help!