【问题标题】:renaming tomcat http threads重命名tomcat http线程
【发布时间】:2013-02-15 01:27:29
【问题描述】:

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

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

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

在tomcat中甚至可以吗?

【问题讨论】:

    标签: tomcat tomcat6


    【解决方案1】:

    您可以尝试在 conf/server.xml 中激活Executor,它提供线程名称前缀。

    <Executor name="tomcatThreadPool" namePrefix="xyz_app/resource_name" 
        maxThreads="150" minSpareThreads="4"/>
    

    然后更改您的 Connector 以使用此 Executor

    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    

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

    【讨论】:

      【解决方案2】:

      尝试创建一个 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) {}
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2010-10-02
        • 2012-09-19
        • 2011-08-10
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多