Hi again.

Now that I have (with your help) established some basic facts, I have a
practical case for analysis.

Before I get into details (because this is quite long), I'd like to explain the reason why I'm asking this. We have been testing a Tomcat application from a vendor. It works very nicely when it is started on a test system, and does what we expect. But the load it imposes on our test Tomcat at startup, makes me a bit insecure about deploying it to a production server, before I really understand what is happening. Not being a Java or Tomcat expert, I'm just trying to collect some pointers, to see if I can do something about what I am observing, or if that's it and we just have to live with it. The main thing is, I don't even know where to start, so I would appreciate some help, even if very basic.
There is quite a bit of data below.

We have an old clunker PC (Pentium II, 512 Mb Ram, average ATA disks),
which we use to test some applications (not only Java/Tomcat).
Its a Linux system, and runs this Tomcat :
Using CATALINA_BASE:   /usr/share/tomcat5.5
Using CATALINA_HOME:   /usr/share/tomcat5.5
Using CATALINA_TMPDIR: /usr/share/tomcat5.5/temp
Using JRE_HOME:       /usr/lib/jvm/java-1.5.0-sun
Server version: Apache Tomcat/5.5
Server built:   Jan 20 2008 12:32:00
Server number:  5.5.20.0
OS Name:        Linux
OS Version:     2.6.18-6-686
Architecture:   i386
JVM Version:    1.5.0_14-b03
JVM Vendor:     Sun Microsystems Inc.

The full command used to start Tomcat is :
/usr/lib/jvm/java-1.5.0-sun/bin/java
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=/var/lib/tomcat5.5/conf/logging.properties
-Djava.awt.headless=true -Xmx256M -server
-Djava.endorsed.dirs=/usr/share/tomcat5.5/common/endorsed -classpath
:/usr/lib/jvm/java-1.5.0-sun/jre//lib/jcert.jar:/usr/lib/jvm/java-1.5.0-sun/jre//lib/jnet.jar:/usr/lib/jvm/java-1.5.0-sun/jre//lib/jsse.jar:/usr/share/tomcat5.5/bin/bootstrap.jar:/usr/share/tomcat5.5/bin/commons-logging-api.jar
-Djava.security.manager
-Djava.security.policy==/var/lib/tomcat5.5/conf/catalina.policy
-Dcatalina.base=/var/lib/tomcat5.5 -Dcatalina.home=/usr/share/tomcat5.5
-Djava.io.tmpdir=/var/lib/tomcat5.5/temp
org.apache.catalina.startup.Bootstrap start

Under Tomcat there, there is an application which we get from outside
and of which we do not have the source. This application is loaded at
Tomcat startup.

When Tomcat has been running for a while, but the system and Tomcat are
basically idle, a "top" with the option "n" (sort by memory usage),
shows this (first few lines only) :

top - 10:15:54 up 162 days, 16:25,  2 users,  load average: 0.19, 0.09, 0.03
Tasks:  82 total,   1 running,  81 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.0%us,  0.3%sy,  0.0%ni, 97.7%id,  0.0%wa,  0.0%hi,  0.0%si,
0.0%st
Mem:    516920k total,   509716k used,     7204k free,    71992k buffers
Swap:  1297564k total,   131340k used,  1166224k free,    95148k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6226 tomcat55  25   0  506m 191m  10m S  0.0 37.9 140:26.15 java
 5937 root      22   0  267m  26m 8056 S  0.0  5.2  25:26.88 java
24608 root      23   0  260m  15m 9332 S  0.0  3.1   0:02.08 java
24638 root      15   0 29564  15m 5984 S  0.0  3.0   0:02.16 apache2
24627 efs       15   0 16964  12m 1968 S  0.0  2.6   0:06.68 MiraLoader.pl
24662 www-data  15   0 29564  10m 1632 S  0.0  2.2   0:02.91 apache2
24668 www-data  16   0 29564  10m 1624 S  0.0  2.2   0:02.50 apache2
24663 www-data  15   0 29564  10m 1620 S  0.0  2.2   0:02.78 apache2
etc..
(the other 2 java processes are separate java daemons, nothing to do
with Tomcat).

At this point Tomcat and this external application are very responsive, at least in single-user mode. We have not really done yet a multi-user test.

Now, if I stop and restart Tomcat, for something like 6 minutes after that, the same top display shows this kind of thing : (There are 4 consecutive snapshots here, taken at more or less regular intervals during the 6 minutes)

I)
top - 12:44:56 up 162 days, 18:54,  3 users,  load average: 0.99, 0.27, 0.08
Tasks:  85 total,   3 running,  82 sleeping,   0 stopped,   0 zombie
Cpu(s): 98.0%us, 2.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem:    516920k total,   351160k used,   165760k free,    54548k buffers
Swap:  1297564k total,    70000k used,  1227564k free,   128152k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2864 tomcat55  25   0  463m  40m  11m R 97.9  7.9   0:25.62 java
 5937 root      16   0  267m  24m 8056 S  0.0  4.9  25:38.84 java
24608 root      23   0  260m  15m 9332 S  0.0  3.1   0:02.17 java
24638 root      15   0 29564  15m 5984 S  0.0  3.0   0:02.16 apache2
24627 efs       15   0 16964  12m 1968 S  0.0  2.6   0:06.74 MiraLoader.pl
24664 www-data  15   0 29692  12m 3428 S  0.0  2.5   0:04.46 apache2
etc...

II)
top - 12:48:07 up 162 days, 18:57,  3 users,  load average: 1.70, 0.96, 0.38
Tasks:  85 total,   2 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s): 95.0%us, 5.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem:    516920k total,   483396k used,    33524k free,    55680k buffers
Swap:  1297564k total,    70000k used,  1227564k free,   138644k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2864 tomcat55  25   0  461m 159m  12m R 99.2 31.5   3:30.88 java
 5937 root      16   0  267m  24m 8056 S  0.0  4.9  25:38.84 java
24608 root      23   0  260m  15m 9332 S  0.0  3.1   0:02.17 java
24638 root      15   0 29564  15m 5984 S  0.0  3.0   0:02.16 apache2
24627 efs       15   0 16964  12m 1968 S  0.0  2.6   0:06.74 MiraLoader.pl
24664 www-data  15   0 29692  12m 3428 S  0.0  2.5   0:04.46 apache2
etc...

III)
top - 12:50:20 up 162 days, 19:00,  3 users,  load average: 1.54, 1.15, 0.53
Tasks:  85 total,   2 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s): 94.4%us, 5.3%sy, 0.0%ni, 0.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem:    516920k total,   509016k used,     7904k free,    51668k buffers
Swap:  1297564k total,    70000k used,  1227564k free,   142828k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2864 tomcat55  25   0  461m 184m  12m R 98.5 36.6   5:40.81 java
 5937 root      16   0  267m  24m 8056 S  0.0  4.9  25:38.84 java
24608 root      23   0  260m  15m 9332 S  0.0  3.1   0:02.17 java
24638 root      15   0 29564  15m 5984 S  0.0  3.0   0:02.16 apache2
24627 efs       15   0 16964  12m 1968 S  0.0  2.6   0:06.74 MiraLoader.pl
24664 www-data  15   0 29692  12m 3428 S  0.0  2.5   0:04.46 apache2
etc...

IV) (Now it's back to idle, and Tomcat is responding)

top - 12:51:48 up 162 days, 19:01,  3 users,  load average: 1.28, 1.19, 0.60
Tasks:  85 total,   1 running,  84 sleeping,   0 stopped,   0 zombie
Cpu(s): 2.0%us, 0.3%sy, 0.0%ni, 97.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem:    516920k total,   490692k used,    26228k free,    43552k buffers
Swap:  1297564k total,    70000k used,  1227564k free,   130936k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2864 tomcat55  25   0  482m 188m  12m S  0.0 37.4   6:46.74 java
 5937 root      16   0  267m  24m 8056 S  0.0  4.9  25:38.86 java
24608 root      23   0  260m  15m 9332 S  0.0  3.1   0:02.17 java
24638 root      15   0 29564  15m 5984 S  0.0  3.0   0:02.16 apache2
24627 efs       15   0 16964  12m 1968 S  0.0  2.6   0:06.75 MiraLoader.pl
24664 www-data  15   0 29692  12m 3428 S  0.0  2.5   0:04.46 apache2
etc...

In other words, while this application is being loaded, our Tomcat and the whole system are totally unresponsive for about 5 minutes. I know that it has to do with this application, for a number of reasons, two of them being : - if I do not start the application at Tomcat startup, Tomcat is responsive after 15 seconds, instead of 5 minutes - the Tomcat logfile shows me where things are not moving anymore during those 5 minutes, and that is at the point of some message from this application - if I stop and restart this application separately with the Tomcat Manager, I get the same 5 minute-freeze as when starting Tomcat - I know also that this application has to read and parse a 25 Mb file of XML data containing some data structure that it needs later on. I don't know how it parses this, just that it does.

Now my questions are of the kind :
Our production servers are ASP servers, where several customers would be using this same application, each customer with its own 25 Mb XML file of data. They are more powerful servers, but if I have 5 customers and these things compete with one another for memory or resources, I could have a server that is unresponsive for a hour maybe at start.

So basically, I am asking if there are any parameters I can vary for the application startup or Tomcat in general, to evaluate the behaviour under different circumstances, or if I should put more RAM in the server, or if I should lower or raise the amount of memory available to Tomcat (and how), etc.. I am also a bit surprised about the amounts I see in terms of memory usage, but not being an expert, I have not really anything to compare them with. It's just that these java applications seem very hungry in memory, if what is shown is really what they are using. For comparison, we have other applications running on that server, of comparable complexity, and they use 10-15 Mb apiece.

Anybody feel like commenting ?



---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to