重命名Tomcat的HTTP线程

4

是否有可能让Tomcat将创建的用于服务HTTP请求的线程重新命名为与http-8080-4等相比更有意义的名称。

例如,不仅仅将线程命名为“http-8080-4”,而是将线程命名为请求的URL,后跟一些计数器等,例如“/xyz_app/resource_name〜1”等。

我尝试寻找这样的内容的原因是当您查看分析器/监视工具(例如jvisualvm)时,“http-8080-4”线程名称并不能提供很多细节。

在Tomcat中是否有可能实现这一点呢?

2个回答

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" />

这并不适用于所有的线程,但应该有助于识别处理您请求的内容。


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) {}
    }
}

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