运行 mvn org.mortbay.jetty:jetty-maven-plugin:run 时出现“打开文件过多”异常

Ayu*_*hra 5 jetty maven maven-jetty-plugin jetty-8

在我的一个项目中,我使用了 Lift 2.5 M4 和 Scala 2.10.0。在这个项目中,我使用的是Jetty 8.1.10.v20130312。但是在通过 mvn jetty 运行项目时,我遇到了意外的异常。

我已经通过以下方式在 pom.xml 中配置了 jetty 插件:

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>8.1.10.v20130312</version>
            <configuration>
                <systemProperties>
                    <systemProperty>
                        <name>org.apache.cocoon.log4j.loglevel</name>
                        <value>WARN</value>
                    </systemProperty>
                </systemProperties>
                <connectors>
                    <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                        <port>9090</port>
                        <maxIdleTime>30000</maxIdleTime>
                    </connector>
                </connectors>
                <webApp>
                    <contextPath>/</contextPath>
                </webApp>
                <scanIntervalSeconds>0</scanIntervalSeconds>
                <stopKey>stop</stopKey>
                <stopPort>9999</stopPort>
            </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我在运行命令时遇到以下异常:- mvn org.mortbay.jetty:jetty-maven-plugin:run

2013-04-24 06:49:39.216:警告:oeja.AnnotationParser:异常java.io.FileNotFoundException:/home/ayush/scala-lift/knolgame/target/classes/com/knolgame/lib/TransactionStatus$$anonfun$在 java.io.FileInputStream.open(本机方法) 处找到 $1.class (打开的文件太多) 在 java.io.FileInputStream.(FileInputStream.java:106) 处 org.eclipse.jetty.util.resource.FileResource.getInputStream (FileResource.java:286)在org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:754)在org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747)在org.eclipse。 jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747) 在 org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747) 在 org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:第747章)

但是当我使用jetty 6.1.25时,它工作正常。

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.25</version>
            <configuration>
                <systemProperties>
                    <systemProperty>
                        <name>org.apache.cocoon.log4j.loglevel</name>
                        <value>WARN</value>
                    </systemProperty>
                </systemProperties>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>9090</port>
                        <maxIdleTime>30000</maxIdleTime>
                    </connector>
                </connectors>
                <contextPath>/</contextPath>
                <scanIntervalSeconds>0</scanIntervalSeconds>
                <stopKey>stop</stopKey>
                <stopPort>9999</stopPort>
            </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?我必须在我的应用程序中使用最新的 Lift、Scala 和 jetty 版本。

提前致谢 。

问候, 阿尤什

Tho*_*ker 4

“打开的文件太多”通常意味着您的java进程不允许打开更多的文件描述符。然而,如果这种情况发生在码头启动时,没有打开任何大量的连接,就会发生一些奇怪的事情。

首先,您可以通过在$ ulimit -a命令行上执行以下命令来检查允许打开的文件(或文件描述符)的配置软限制。

如果您需要进一步访问,请将结果粘贴到此处。

然后,您可以使用诸如lsof检查 java 进程因上述给定异常而失败的文件当时打开了哪些文件。$ lsof -p <pid>其中 pid 是 java/jetty 进程的 processId 应该会给您一些提示。

如果您的软限制太小,请尝试按照互联网上找到的众多教程之一来提高它,例如: http: //www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open- files/(我发现的第一个结果)将限制提高到适当的值。什么值适合您的应用程序主要取决于您将服务的并发打开连接的数量。