You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by bc...@mail.liberty.k12.mo.us on 2002/03/11 23:18:41 UTC

tomcat segmentation fault

I'm running a Tomcat/Apache web server and a PostgresQL database 
server.  In the past two months or so, the number of webapps I'm running 
has drastically increased, and it has led to many unexpected problems.  
Please bear with me as a summarize before asking my question; hopefully 
this will prove useful to somebody someday:

machine 1:  dual-933MHz, 512 MB RAM, Linux 2.4 (RedHat 7.1), Apache 
1.3.19, Tomcat 4.0.3, Java 1.4
machine 2:  731MHz, 256 MB Ram, Linux 2.2 (RedHat 6.2), PostgresQL 7.1.3

The first problem I ran into was random crashes of PostgresQL.  That 
apparently was caused by too many open files.  I quadrupled the values 
in /proc/sys/fs/file-max and /proc/sys/fs/inode-max and have not had any 
problems with that machine since.

The second problem turned up in my Tomcat logs:  
java.net.SocketException:  Too many open files.  Once I started seeing 
that, I had to reboot Tomcat.  I upped /proc/sys/fs/file-max, but there 
is no /proc/sys/fs/inode-max, and that didn't seem to help.  "ulimit -n 
90000" seems to have fixed that, but...

Tomcat kept crashing, but now it was throwing 
java.lang.OutOfMemoryError: requested x bytes.  I added -Xms64M -Xmx256M 
to increase the Java heap size, and added some garbage collection 
routines.  That didn't seem to fix it.  Then I noticed this in one of 
the logs:
java.lang.OutOfMemoryError:  unable to create new native thread
	at java.lang.Thread.start
	at org.apache.catalina.connector.warp.WarpConnection.start (159)
	at org.apache.catalina.connector.warp.WarpConnector.run (601)
	at java.lang.Thread.run (536)
Which prefigured an OutOfMemoryError and complete crash of Tomcat by 
minutes.

Doing some research, I found that there was a built-in thread limit in 
glibc.  I got the source RPM off the RedHat 7.1 CD, made the necessary 
changes in linuxthreads, and recompiled.  I copied the new 
linuxthreads.so to /lib/i686, and everything seemed to be working fine.  
No crashes, but it was a weekend and nobody uses it on weekends.  So 
this morning I did a 'make install' on glibc (huge mistake; I feel 
strongly that I had some reason for doing that but I can't remember what 
it was), and wham, Tomcat crashes and won't start up again.  I 
reinstalled the glibc RPMs on the RedHat CD to try to get the system 
back to normal, but Tomcat still won't start up.  Which is where my 
question comes in.

Why won't it start up again?  :)  Using Java 1.4, Tomcat fails to start 
up with a segmentation fault.  I switched to Java 1.3.1, and it fails to 
start up with a "cannot find libhpi.so".  Java 1.2.2 works, but I'm 
using some 1.4 features, so that's only a temporary solution.  I can 
still compile and run programs using 1.4; only Tomcat seems to not be 
working.  What have I done and how can I fix it?

Also, what more do I need to do to get these servers to be able to 
handle the load?  Apache is serving about 400 requests per hour on 
average, as much as 1700 during a busy hour, which doesn't seem to me 
like it should be too much for this server to handle.  I usually have 
between 80 and 120 concurrent database connections during peak hours, 
including sessions which are no longer in use and waiting to expire.

Any help would be very much appreciated.

Thanks,
Ben Carterette
bcarterette@liberty.k12.mo.us


--
To unsubscribe:   <ma...@jakarta.apache.org>
For additional commands: <ma...@jakarta.apache.org>
Troubles with the list: <ma...@jakarta.apache.org>