请教tomcat的性能问题

05-12-17 kartwall

tomcat4版本,设置了JAVA_OPTS="-server -Xms64m -Xmx512m",启动我的web application后,会出现一段时间后IE无法打开网页的情况。就是IE也不显示“该页无法打开”,就是进度条一直在走,页面始终无法打开(连静态页面也打不开)。

我测试了两台机器,一台是双CPU,Xeon 3.0G的,2G内存,这台机器上跑就一直没出过问题,另外一台是双PIII CPU,512M内存的,tomcat跑在这台机器上,基本上一个星期就会出现一次上述的情况,实际使用系统的用户数大概在30人左右。

我search了一下论坛,发现这个问题是不是因为tomcat用于响应request的线程被耗尽的缘故?也就是说,我的代码里有一些线程没有正确返回,我不明白的是线程没有正确返回这句话该怎么理解?

我的web app基于struts,一个request触发一个action servlet,action servet会调用一个Singleton的Logic class,然后logic class填充一个实体类返回给客户端。整个应用对数据库的操作不多,大部分是向后台的程序发送UDP的网络请求,也就是说,数据大多是从网络上读取来,而不是从数据库来的。数据库方面,用了tomcat的mysql连接池,不过我想问题不应该出在数据库方面,因为对数据库操作的比较少。

我想是不是因为我的logic class都是singleton模式的而导致上面的问题呢?因为singleton模式下,我的这些类实例都不会被释放直到tomcat关闭。

请教各位大侠了,谢谢!

kartwall
2005-12-17 13:54

BTW: 内存方面问题不是太大,tomcat刚启动时,内存用量在64m左右,将我的web app的所有功能都执行一遍后,内存涨到120m左右,然后基本上就不增长了,因为那些singleton的logic class的类实例都生成了,我想是这样。

kartwall
2005-12-17 15:18

还有一个奇怪的现象:当出现上述问题后,我只能重启tomcat。不过当我运行了shutdown.sh后,我发现8080端口确实没有程序监听了,但是tomcat的进程,也就是名为java的进程还在,我必须用kill命令才能把这个进程杀掉。

banq
2005-12-20 09:32

不要老是怀疑Tomcat,100%是你的应用系统问题,要测试Tomcat,必须找一个公用的应用系统来测试。