4

Tomcatが作成するスレッドの名前をhttp-8080-4などと比較して意味のあるものに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 に答える