2009-10-15 11 views
6

Sadece geçen hafta bir JBoss (v 4.2.2) web uygulamasına erişim konusunda sorun yaşıyorum. Ana sayfaya gittiğimde bir java.lang.NullPointerException hata sayfası alıyorum. JBoss log çıkışına baktıktan sonra, çok fazla dosyanın açık olduğu anlaşılıyor, bu yüzden bu dosyaları nasıl kapatacağım? Her şeydenJBoss Çok Fazla Dosya Açık Hata

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 

cevap

11

İlk ne dosya (lar) belirlemek açık olarak kalmak istiyorum: Burada JBoss kaydından çıkıştır. Ben sunucu linux çalışan farz ediyorum, bu yüzden JBoss'es PID

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

kez hani

ls -l /proc/jbosspid/fd 

o anda açık olan dosyaların bir güzel listesini almak için yapabilirsiniz.

  1. sadece sunucu da tüm sistemin bakmak (ulimit ile biraz açabilirsiniz dosya sayısı kadar gerekebilir:

    Bundan sonra ne olacak burada gördüklerinizi bağlıdır.Örneğin sunucunuzda limitler)
  2. belki dosyaları bir dizi nokta sizin uygulaması gerekecek açık dosyaları kurtulmak/....

  • kapatmak için Fakat bu dosyaları kapatmak için unuttum JBos'u yeniden başlat örneği.

  • +4

    +1. –

    5

    Linux (veya diğer * NIX) üzerinde çalıştığınızı varsayarsanız, işlem başına 1024 dosya tanıtıcı sınırı vardır. Unix'te her şey bir dosya - bir soket, cihaz vb. Buna bakmak için bir wat lsof komutunu çalıştırmaktır (sadece root olarak) - size tüm açık dosya tanımlayıcılarını gösterecektir.

    Bunu düzeltmek için, dosyayı /etc/security/limits.conf dosyasında düzenleyin ve aşağıdaki satırları ekleyin ve jboss'unuzu yeniden başlatın.

    jboss   soft nofile   16384 
    jboss   hard nofile   16384 
    

    I (linux üzerine) de bu sorun vardı

    3

    (sizin jboss "jboss" kullanıcı tarafından çalıştırılan varsayarak). Yaptıklarımı:

    1. Kontrol limitleri: Ulimit çıktı
    2. onay 2 satırları -a: (sizin .bash_profile dosyasına örneğin) her iki parametreyi ayarlayın
     
        open files      (-n) 1024 
        max user processes    (-u) 1024 
    
     
        ulimit -n 100000 
        ulimit -u 100000 
    

    Benim durumumda, sorunu çözmek için her iki parametreyi de değiştirmek zorunda kaldım. Ulimit'i arttırmadan önce sızıntı olup olmadığını kontrol etmek için

    İlgili konular