2

Heroku で Java (Spring MVC) Web アプリケーションを実行しています。この記事で説明されているセットアップを使用します: Heroku での Spring MVC Hibernate の開始

デフォルトでは、Jetty は 1 つのスレッドのみを使用するようです。この Heroku と jetty-runner のセットアップを考えると、スレッドプールのサイズを増やす最も簡単な方法は何ですか?

注: Jetty 関連のカスタム コードはありません (したがって、アドバイスをどのように適用するかは不明です。たとえば、 Jetty で setThreadPool() を使用する方法)。できれば、そのままにしておくのがいいと思います。Jetty 関連のすべてが Procfile と pom.xml に含まれるようになりました (以下を参照)。

一部の jetty-runner パラメーターまたは構成オプションでスレッドプールのサイズを設定できますか? Jetty 構成ファイルを作成する必要がある場合、Heroku/jetty-runner でそれを使用するにはどうすればよいですか?

プロファイル:

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT target/*.war

pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.7</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-runner</artifactId>
                        <version>8.1.10.v20130312</version>
                        <destFileName>jetty-runner.jar</destFileName>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>
4

1 に答える 1

7

私にとってそれを解決したもの(Jettyの問題ではなくSpringの問題)

質問にこれを書いたとき、私は間違っていました:

デフォルトでは、Jetty は 1 つのスレッドのみを使用するようです。

これは純粋に春の問題であることが判明しました。applicationContext.xmlで、私は変更しました

<task:annotation-driven/>

の中へ

<task:annotation-driven scheduler="scheduler-pool"/>
<task:scheduler id="scheduler-pool" pool-size="5"/>

...そして、さまざまなタスクが、や@Scheduledのような別々のスレッドでうまく実行されるようになりました。scheduler-pool-1scheduler-pool-3

Jetty スレッドプール構成を微調整する方法 (jetty-runner を使用)

(私の問題が Jetty の問題ではないことに気付く前に、私はすでに Jetty スレッドプールがどのように構成されているかを調べていました。それをここに文書化します。誰かにとって役立つかもしれません。)

jetty.xml構成ファイルを作成し(src/main/resourcesコンパイル対象のディレクトリにコピーされるような場所に)、好みに合わせてカスタマイズします。

例(おそらく悪いもの):

<?xml version="1.0"?>

<!-- For some reason, must use org.eclipse classes, 
 even though we depend on org.mortbay Jetty... -->

<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <Set name="ThreadPool">
        <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <Set name="minThreads">3</Set>
            <Set name="maxThreads">5</Set>
        </New>
    </Set>

</Configure>

次に、--configスイッチでその構成ファイルを使用するように jetty-runner に指示します。たとえば、Heroku では、次のようProcfileに追加し--config target/classes/jetty.xmlます。

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --config target/classes/jetty.xml --port $PORT target/*.war 

jetty-maven-pluginも使用している場合は、これを<configuration>inの下に追加して、カスタムの Jetty 構成を使用するように指示できますpom.xml

<jettyConfig>target/classes/jetty.xml</jettyConfig>
于 2013-04-18T15:19:53.900 に答える