2009-10-15 21 views
6

先週、JBoss(v 4.2.2)Webアプリケーションにアクセスする際に問題が発生しました。ホーム・ページに行くと、java.lang.NullPointerExceptionエラー・ページが表示されます。 JBossのログ出力を見ると、あまりにも多くのファイルが開いているようですので、これらのファイルを閉じるにはどうすればいいですか?ここではJBossのログからの出力は次のとおりです。あなたが何のファイル(複数可)を決定したいすべてのJBoss多すぎるファイルオープンエラー

ERROR [[jsp]] Servlet.service() for servlet jsp threw exception 
    java.io.FileNotFoundException: /usr/local/jboss-4.2.2.GA/server/default/work/jboss.web/localhost/catissuecore/org/apache/jsp/pages/content/home/Error_jsp.java (Too many open files) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70) 
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:152) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:306) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:447) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292) 
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:423) 
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:270) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:619) 
ERROR [[localhost]] Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/pages/content/home/Error.jsp] 
    org.apache.jasper.JasperException: Unable to compile class for JSP 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:574) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:447) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292) 
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:423) 
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:270) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:619) 
    Caused by: java.io.FileNotFoundException: /usr/local/jboss-4.2.2.GA/server/default/work/jboss.web/localhost/catissuecore/org/apache/jsp/pages/content/home/Error_jsp.java (Too many open files) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70) 
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:152) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:306) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566) 
    ... 21 more 

答えて

11

まず開いたままになります。あなたはJBoss'es PID

ps ax | grep something-that-makes-your-jboss-process-unique 

を知っていればあなたはその時点で開いているファイルの素敵なリストを取得するために

ls -l /proc/jbosspid/fd 

を行うことができますので、私は、あなたのサーバーは、Linuxを実行しますと仮定しています。あなたが次に何をするつもりだ何

はあなたがここで見るものに少し異なります。

  1. サーバーがulimitのでビットを開くことができるファイルの数は、(また、システム全体を見てちょうど必要があるかもしれませんサーバー上の限界)
  2. 多分あなたはあなたのアプリケーションが
  3. を閉じるのを忘れてファイルの数を見つける....

しかし、あなたがする必要があります開いているファイルを取り除く/これらのファイルを閉じるにはJBossを再起動するインスタンス。

+4

ulimitを増やす前にリークをチェックするための+1。 –

5

Linux(または他の* NIX)で動作していると仮定すると、プロセスあたり1024のファイル記述子の制限があります。 Unixでは、すべてがファイルです - ソケット、デバイスなどを含みます。これを見てみると、lsofコマンド(rootとしてのみ)を実行するだけです。開いているすべてのファイル記述子が表示されます。

これを修正するには、/etc/security/limits.confのファイルを編集し、次の行を追加してjbossを再起動してください。

jboss   soft nofile   16384 
jboss   hard nofile   16384 

(あなたのJBossは、 "JBossの" ユーザーによって実行されたと仮定した場合)

3

私は(Linuxの場合)も、この問題を抱えていました。 私がやった:

  1. チェックの制限:ulimitの出力に
  2. チェック2行を-a:(あなたの.bash_profileになど)の両方のパラメータを設定し
 
    open files      (-n) 1024 
    max user processes    (-u) 1024 
 
    ulimit -n 100000 
    ulimit -u 100000 

私の場合は、問題を解決するために両方のパラメータを変更する必要がありました。

関連する問題