4

与 http-8080-4 等相比,是否可以让 Tomcat 将它创建的用于服务 http 请求的线程重命名为有意义的东西?

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

我之所以试图找到这样的东西,是因为当您查看分析器/监控工具(例如 jvisualvm)时,线程名称“http-8080-4”并没有提供很多细节。

在tomcat中甚至可能吗?

4

2 回答 2

4

您可以尝试在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" />

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

于 2013-02-15T02:25:10.313 回答
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) {}
    }
}
于 2013-02-15T04:13:52.130 回答