是否有可能让Tomcat将创建的用于服务HTTP请求的线程重新命名为与http-8080-4等相比更有意义的名称。
例如,不仅仅将线程命名为“http-8080-4”,而是将线程命名为请求的URL,后跟一些计数器等,例如“/xyz_app/resource_name〜1”等。
我尝试寻找这样的内容的原因是当您查看分析器/监视工具(例如jvisualvm)时,“http-8080-4”线程名称并不能提供很多细节。
在Tomcat中是否有可能实现这一点呢?
<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" />
这并不适用于所有的线程,但应该有助于识别处理您请求的内容。
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) {}
}
}