2010-07-05 92 views
3

我在服务器上部署了一个Web应用程序。 我创建了一个脚本来执行应用程序的负载(压力测试)。压力使用10个线程产生不同的请求。 我到达成以下状态,如图中的Tomcat经理:Tomcat线程就绪

免费存储空间:34.57 MB的内存总量:1166.43 MB最大内存:1166.43 MB

最大线程数:200当前线程数:59当前线程忙:12 最大处理时间:60295419毫秒的处理时间:1.8809264E7的请求数:233217错误计数:8100个接收字节:4.11 MB发送的字节数:7493.59 MB

根据此状态12个线程都很忙的服务,同时请求其他47个线程处于就绪状态。 最初分配的1166.43MB中有34.57 MB可用存储空间。我怀疑,因为tomcat不会销毁未使用的就绪线程,内存不会被释放,但我不确定。 有没有人有任何其他的见解?有谁知道如何超时准备线程?

感谢

回答

2

那些47个一线坐在雄猫thread pool。他们会在申请期间保持活力。创建和销毁线程可能非常耗时,因此让线程在池中等待工作可以加快应用程序的速度,而不是在每次获取请求时创建新线程。请参阅关于how to configure your thread pool的tomcat文档(例如增加/减少最大线程数)。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxThreads="60" minSpareThreads="4"/> 
+0

感谢您的回复。 你认为这会解决内存问题吗?我的意思是你认为我已经这么做了,因为ready线程没有被释放,而且内存不是? – 2010-07-05 10:37:17

+0

@Clint难道线程本身不会占用太多的内存(除非你使用大量的ThreadLocals,这是不太可能的)。您必须查看服务器的其他部分才能找到正在使用的内存,例如请参阅:http://stackoverflow.com/questions/185893 – krock 2010-07-06 12:56:13