重命名tomcat http线程

时间:2013-02-15 01:27:29

标签: tomcat tomcat6

与http-8080-4等相比,是否有可能使Tomcat重命名它创建的线程以将http请求提供给有意义的事物。

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

我试图找到这样的东西的原因是因为当你查看一个探查器/监控工具(比如jvisualvm)时,线程名称“http-8080-4”并没有提供很多细节。

甚至可以在tomcat中使用吗?

2 个答案:

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