Tomcat线程准备就绪

3
我在服务器上部署了一个Web应用程序。我创建了一个脚本以对该应用程序执行负载(压力测试)。这个脚本使用10个线程生成不同的请求,产生了以下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个线程处于准备状态。可用内存为34.57 MB,初始分配为1166.43MB。我怀疑由于Tomcat不销毁未使用的准备就绪线程,因此无法释放内存,但我不确定。 有人有其他见解吗? 有人知道如何超时准备就绪线程吗?
谢谢
1个回答

2
这47个线程正坐在Tomcat的线程池中。它们会在您的应用程序运行期间保持活动状态。创建和销毁线程可能耗费时间,因此在线程池中等待工作可以加速您的应用程序,而不是每次收到请求时都创建一个新线程。请参阅Tomcat文档,了解如何配置线程池(例如增加/减少最大线程数)。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxThreads="60" minSpareThreads="4"/>

谢谢您的回复。您认为这会解决内存问题吗?我的意思是,您是否像我一样认为,由于准备好的线程没有被释放,因此内存也没有被释放? - Clint Feher
@Clint Feher,线程本身不会占用太多内存(除非您使用大量的ThreadLocals,这是不太可能的)。 您需要查看服务器的其他部分以找到内存使用情况,例如:请参见:https://dev59.com/8XVC5IYBdhLWcg3wykQt - krock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接