如何在Heroku上使用jetty-runner增加Jetty线程池大小?

Jon*_*nik 2 java spring jetty heroku threadpool

我有一个在Heroku上运行的Java(Spring MVC)webapp.它使用本文中描述的设置: Heroku上的Spring MVC Hibernate入门

看起来Jetty默认只使用一个线程.鉴于Heroku和jetty-runner的设置,增加线程池大小的最简单方法是什么

注意:我没有任何与Jetty相关的自定义代码(所以我不清楚我是如何应用这些建议的,例如:如何在Jetty中使用setThreadPool()).如果可能的话,我宁愿保持这种方式.与Jetty相关的所有东西现在都在Procfile和pom.xml中(见下文).

我可以使用一些jetty-runner参数或配置选项设置线程池大小吗?如果我需要创建Jetty配置文件,我如何让Heroku/jetty-runner使用它?

Procfile:

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT target/*.war
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Jon*_*nik 7

是什么解决了它(一个春天,而不是Jetty问题)

我在问题中写这篇文章时错了:

看起来Jetty默认只使用一个线程.

结果证明这纯粹是一个Spring问题.在applicationContext.xml中,我改变了

<task:annotation-driven/>
Run Code Online (Sandbox Code Playgroud)

<task:annotation-driven scheduler="scheduler-pool"/>
<task:scheduler id="scheduler-pool" pool-size="5"/>
Run Code Online (Sandbox Code Playgroud)

... @Scheduled现在,不同的任务很快就会在像scheduler-pool-1或等的单独线程中运行scheduler-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>
Run Code Online (Sandbox Code Playgroud)

然后,告诉jetty-runner将该配置文件与--config交换机一起使用.例如,在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 
Run Code Online (Sandbox Code Playgroud)

如果你也碰巧使用的码头- Maven的插件,你可以告诉它通过增加这个下使用自定义码头的配置<configuration>pom.xml:

<jettyConfig>target/classes/jetty.xml</jettyConfig>
Run Code Online (Sandbox Code Playgroud)

  • @Luke,你可以在/etc/jetty.xml中找到相对于jetty目录的默认最小/最大线程池大小.10/200是默认值 (2认同)