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

时间:2013-04-24 04:49:59

标签: maven jetty 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>

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

2013-04-24 06:49:39.216:警告:oeja.AnnotationParser:EXCEPTION java.io.FileNotFoundException:/home/ayush/scala-lift/knolgame/target/classes/com/knolgame/lib/TransactionStatus$$anonfun$find$1.class(打开的文件过多)     at java.io.FileInputStream.open(Native Method)     在java.io.FileInputStream。(FileInputStream.java:106)     at 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>

任何人都可以帮我解决这个问题吗?我必须在我的应用程序中使用最新的Lift,Scala和jetty版本。

提前致谢。

此致 AYUSH

1 个答案:

答案 0 :(得分:2)

“打开的文件太多”通常意味着不允许您的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/(我发现的第一个结果)将限制提高到适当的水平。适合您的应用程序的价值主要取决于您将要服务的并发打开连接数量。