与 http-8080-4 等相比,是否可以让 Tomcat 将它创建的用于服务 http 请求的线程重命名为有意义的东西?
即,不仅仅是将线程命名为“http-8080-4”,而是将线程命名为请求的 URL,然后是一些计数器等,例如“/xyz_app/resource_name~1”等。
我之所以试图找到这样的东西,是因为当您查看分析器/监控工具(例如 jvisualvm)时,线程名称“http-8080-4”并没有提供很多细节。
在tomcat中甚至可能吗?
您可以尝试在conf/server.xml中激活提供线程名称前缀的Executor 。
<Executor name="tomcatThreadPool" namePrefix="xyz_app/resource_name"
maxThreads="150" minSpareThreads="4"/>
然后更改您的连接器以使用此Executor:
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这不适用于所有线程,但应该有助于识别正在处理您的请求的内容。
尝试创建一个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) {}
}
}