Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 命名Tomcat工作线程_Java_Multithreading_Tomcat_Monitoring - Fatal编程技术网

Java 命名Tomcat工作线程

Java 命名Tomcat工作线程,java,multithreading,tomcat,monitoring,Java,Multithreading,Tomcat,Monitoring,有没有一种简单的方法可以更改Tomcat为其工作线程提供的默认名称?理想情况下,我希望与某个web应用程序相关联的所有线程都以其名称命名,可能作为前缀。例如,如果我部署app1.war和app2.war,我希望app1的所有线程的名称中都有app1;一个简单的方法,将每个线程重命名为请求URI,在本例中: public class ThreadNameFilter implements javax.servlet.Filter { public void doFilter(Servl

有没有一种简单的方法可以更改Tomcat为其工作线程提供的默认名称?理想情况下,我希望与某个web应用程序相关联的所有线程都以其名称命名,可能作为前缀。例如,如果我部署app1.war和app2.war,我希望app1的所有线程的名称中都有app1;一个简单的方法,将每个线程重命名为请求URI,在本例中:

public class ThreadNameFilter implements javax.servlet.Filter { 

    public void doFilter(ServletRequest req, ServletResponse resp, 
        FilterChain fc) throws IOException, ServletException { 

        HttpServletRequest httpReq = (HttpServletRequest)req; 
        final Thread curThr = Thread.currentThread(); 
        final String oldName = curThr.getName(); 

        // change the name of the current thread to something related
        // to the application (e.g. URI)
        try { 
            curThr.setName(httpReq.getRequestURI()); 
            fc.doFilter(req, resp); 
        } finally { 
            curThr.setName(oldName); 
        } 
    } 
} 

线程只与特定的webapp临时“关联”

我无法想象为什么这会是一件有用的事情:

  • 日志记录应包括上下文信息(例如,日志记录的组件)
  • 分析可以很容易地显示正在执行的代码(从而显示正在“运行”的webapp)
  • 异常包括完整堆栈跟踪,可以显示正在执行的代码(从而显示“正在运行”的webapp)
  • 可以通过线程转储检查长时间运行的线程(从而显示长时间运行请求中“正在运行”的webapp)

我正在研究运行多个Web应用程序的系统上的堆转储。堆转储不包含任何关于线程的信息,除了线程由Java对象表示之外,因此命名线程(即使是暂时的)不会向堆转储添加任何有用的信息。