2

apache-tomcat-6.0.37 をインストールして、非常にシンプルな Web アプリを作成しました。次に、次のように jsp を作成しました。

<%@   page   contentType="text/html;   charset=GB2312"   %> 

<%

    System.out.println("begin" + Thread.currentThread().getName());

    System.out.println(Thread.currentThread().getName() +":" +  session.getId());

    Thread.sleep(30000);

    System.out.println("end" + Thread.currentThread().getName());
%>

Firefox で複数のタブを開きました。各タブでこの jsp にアクセスしましたが、要求を実行するために生成されたスレッドは 2 つだけでした。

私の質問は、Tomcat がリクエストを処理するために 2 つのスレッドしか生成しなかったのはなぜですか? どうすれば同時実行性を改善できますか?

4

2 に答える 2

0

非常に簡単に言うと、
Tomcat はスレッドプールを使用して各リクエストを処理し、現在のリクエストを処理するスレッドがプールにない場合にのみスレッドが作成されます。

そのため、スレッド プールにスレッドがある場合、Tomcat は新しいスレッドを作成せず、スレッド プールからそれを使用します。あなたの場合、最初のタブでリクエストを処理したスレッドがプールに戻った可能性があるため、新しいスレッドが作成されなかった可能性があります。

maxThreadsの属性を変更することで、作成されるスレッドの最大数を増やすことができます<Connector>。詳細については、こちらのリンクを参照してください。

また、常にスレッドプールにあるスレッドの数はminSpareThreads、http コネクタの属性によって決定され、Tomcat-7 のデフォルトは です10

構成について詳しく知るには、公式ドキュメントHTTP Connectorよりも優れたものがあります。

于 2013-08-06T06:03:00.580 に答える
0

実験をしてみましょう
まず、私が修正した次のコードを試してみてください。

long begin = System.currentTimeMillis();
System.out.println("begin---" + Thread.currentThread().getName()+ "  "+begin);
System.out.println(Thread.currentThread().getName() +":" +  session.getId());
Thread.sleep(30000);
long end = System.currentTimeMillis() - begin;
System.out.println("end----" + Thread.currentThread().getName()+"  "+end);

tomcat がリクエストの受信を遅らせていることがわかります。
したがって、パフォーマンスは Tomcat には関係ありません。

次に、URL を変更し、いくつかのパラメーターを追加しました。
このjspにアクセスして、各タブにいくつかの異なるパラメータ(/?param1、など/?param2)を追加すると、リクエストを実行するために多くのスレッドが生成されました。

回答:
特定のブラウザーは、異なるウィンドウからアクセスすると、同じ URL への要求をシリアル化します。

解決?私はあなたが見ることを知っています。

于 2013-08-06T06:03:47.240 に答える