Memory Questions Regarding Tomcat
796254Jun 9 2004 — edited Jun 10 2004
I recently had a problem with a Windoze server hanging up due to memory problems.
I've got Tomcat 4.1.29 installed to run as a service under JDK 1.4.1_05 on a Windows 2000 server. The memory settings on startup are -Xms64m and -Xmx1024m. The server has 256MB of physical RAM installed. The Windoze task manager says Tomcat is sitting at ~128MB of memory. I don't have access to a profiler to see what's going on.
My understanding is that Java's garbage collection will reclaim heap-allocated memory to the JVM, but not necessarily to the OS. Is this true? What this means is that a Windoze server admin could look at the task manager and see a large memory usage for Tomcat, but that doesn't necessarily reflect Tomcat's current usage. It's more like a high water mark on a pier: it'll show the highest value that Tomcat has used, but the real value will be lower if the garbage collector runs and the tide goes out. If you read a lot of objects into session you could end up with a big high water mark.
The application is a JSP front end with a single controller servlet that interacts with an Oracle database. The only data members in the servlet are some read-only map that are initialized on startup. There are some session data that are maintained for certain user requests, but the rest are all stateless request/response.
The server admin is saying that the problem is Windoze memory management. When a new process starts up outside of Tomcat, it could be that memory isn't reachable, and the new process hangs.
We're going to increase the virtual page size on Windoze and change the startup settings for the Tomcat service to -Xms256m and -Xmx1536m.
So my questions are:
(1) Is my understanding of the interaction between the JVM and OS memory management correct?
(2) Are there any other tuning settings for Tomcat that I need to look at?
Thanks - %