2013-04-24 28 views
1

在我的項目之一,我用電梯2.5 M4和Scala 2.10.0。在這個項目中,我使用的是Jetty 8.1.10.v20130312。 但是,通過mvn碼頭運行項目時,我收到意想不到的異常。「打開的文件過多」的異常,同時運行MVN org.mortbay.jetty:碼頭 - Maven的插件:運行

我已經在pom.xml中配置插件碼頭下面的方法:

<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:碼頭 - Maven的插件:運行

2013-04-24 06:49:39.216:WARN:oeja.AnnotationParser:EXCEPTION java.io.FileNotFoundException:/ home/ayush/scala-lift/knolgame/target/classes/com/knolgame/lib/TransactionStatus $ $ anonfun $找到$ 1.class(打開的文件太多) 在java.io.FileInputStream.open(本機方法) 在java.io.FileInputStr (FileInputStream.java:106) at org.eclipse.jetty.util.resource.FileResource.getInputStream(FileResource.java:286) at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:754 ) at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747) at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747) at org.eclipse.jetty.annotations .AnnotationParser.parse在org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:747)(AnnotationParser.java:747)

,但是當我使用碼頭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

回答

2

「打開的文件太多」通常意味着你的java進程不允許打開更多的文件描述符。 但是,如果這發生在碼頭的啓動沒有任何大量的連接打開了奇怪的事情正在發生。

首先,你可以通過執行檢查的允許打開的文件(或filedescriptors)配置的軟限制的:$ ulimit -a在你的命令行。

如果您需要更多訪問權限,請將結果粘貼到此處。

然後你可以使用工具,如lsof檢查哪些文件,你的java程序與給定異常上面開設了當時失敗。 $ lsof -p <pid>其中pid是你的java/jetty進程的processId應該給你一些提示。

如果您的軟限制太小,請嘗試通過遵循因特網中找到的衆多教程之一來提高它,例如:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/(我發現的第一個結果),以將限制提高到適當的值。適合您的應用程序的價值主要取決於您要提供的併發打開連接數量。

+0

感謝您的回覆。我檢查了我的ulimit。它已經是無限的。 – 2013-04-25 17:42:51

+0

那麼請您使用上述檢查什麼的文件是由JVM時出現此錯誤打開lsof的。 – 2013-04-26 11:33:55

+0

我遇到了類似的問題,從jetty 6升級到8。似乎jetty 8做了一些可以打開大量文件的東西(雖然看起來並不慢)。我採取了以下兩個步驟來解決問題:1)刪除作爲jetty 8的一部分嵌入的默認webapps和上下文2)軟文件限制4096,硬文件限制爲10240 – Taylor 2013-08-13 16:54:21

相關問題