与http-8080-4等相比,是否有可能使Tomcat重命名它创建的线程以将http请求提供给有意义的事物。
即。 而不是仅仅将线程命名为“http-8080-4”,将线程命名为请求的URL,然后是一些计数器等。说“/ xyz_app / resource_name~1”等。
我试图找到这样的东西的原因是因为当你查看一个探查器/监控工具(比如jvisualvm)时,线程名称“http-8080-4”并没有提供很多细节。
甚至可以在tomcat中使用吗?
答案 0 :(得分:4)
您可以尝试激活 conf / server.xml 中提供线程名称前缀的Executor。
<Executor name="tomcatThreadPool" namePrefix="xyz_app/resource_name"
maxThreads="150" minSpareThreads="4"/>
然后更改连接器以使用此执行者:
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这不适用于所有线程,但应该有助于确定处理请求的内容。
答案 1 :(得分:3)
尝试创建一个处理每个请求的Filter
,并在其doFilter
方法中执行类似的操作:
Thread t = Thread.currentThread();
String oldName = t.getName();
String newName = ...; // whatever you want
boolean isNameChanged = false;
try {
t.setName(newName);
isNameChanged = true;
} catch (SecurityException ignore) {}
try {
chain.doFilter(request, response);
} finally {
if (isNameChanged) {
try {
t.setName(oldName);
} catch (SecurityException ignore) {}
}
}