2013-03-25 2 views
3

두 서버가 에서 실행 중임 Glassfish 2.1 둘 다 동일한 웹 응용 프로그램을 사용합니다.PWC1231 및 PWC6344

두 번이 오류가 발생 서블릿, JSP에 대한의 Servlet.service()를 던졌다 :

이 PWC1231 ... 일부 JSP 페이지가 빈 페이지를 보여주는에만 표시를 중지하고 다음 오류가 로그에 인쇄됩니다 예외 java.io.FileNotFoundException : /path/to/jsp/file/jsp_file.jsp.java (Permission denied) java.io.FileOutputStream.open (네이티브 메소드) at java.io.FileOutputStream (FileOutputStream. java : 179) at java.io.FileOutputStream (FileOutputStream.java:70) at org.apache.jasper.compiler.AntJavaCompiler.getJavaWriter (AntJavaCompiler.java:213) ( ) org.apache.jasper.compiler.Compiler.generateJava (Compiler.java:173) at org.apache.jasper.compiler.Compiler.compile (Compiler.java:409) org.apache.jasper.JspCompilationContext org.apache.jasper.servlet.JspServlet.serviceJspFile에서 .compile org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:344)에서 (JspCompilationContext.java:592) (JspServlet.java:470) at org.apache.jasper.servlet.JspServlet.service (JspServlet.java:364) at javax.servlet.http.HttpServlet.service (HttpServlet.java:831) org.apache.catalina.core.ApplicationFilterChain .servletService (ApplicationFilterChain.java:411) at org.apache.catalina.core에서 org.apache.catalina.core.ApplicationDispatcher.doInvoke org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:703)에서 (ApplicationDispatcher.java:855) org.apache.catalina.core.ApplicationDispatcher.forward에서 .ApplicationDispatcher.processRequest org.apache.catalina.core.ApplicationDispatcher.doForward (ApplicationDispatcher.java:474)에서 (ApplicationDispatcher.java:542) (ApplicationDispatcher.java : 366) at org.apache.struts.action.RequestProcessor.doForward (RequestProcessor.java:1056) at org.apache.struts.tiles.TilesReques org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig (TilesRequestProcessor.java에서 tProcessor.doForward org.apache.struts.action.RequestProcessor.processForwardConfig (RequestProcessor.java:388)에서 (TilesRequestProcessor.java:261) : 316 org.apache에서 org.apache.struts.action.ActionServlet.process (ActionServlet.java:1164 AT) org.apache.struts.action.RequestProcessor.process (RequestProcessor.java:231에서 ) ) .struts.action.ActionServlet.doPost (ActionServlet.java:415) (javax.servlet.http.HttpServlet.service (HttpServlet.java:738) at ) javax.servlet.http.HttpServlet.service (HttpServlet.java:831)) 01시 org.apache.catalina.core에서 23,516,org.apache.catalina.core.ApplicationFilterChain.servletService org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:317)에서 (ApplicationFilterChain.java:411) .ApplicationFilterChain.doFilter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter에서 com.my.app.filtro.FiltroCallcenter.doFilter (FiltroCallcenter.java:90)에서 (ApplicationFilterChain.java:198) (ApplicationFilterChain.자바 : 230) org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:288) 에서 org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:198) 에서 에서 조직도 org.apache.catalina.core.StandardPipeline에서 .apache.catalina.core.StandardContextValve.invokeInternal org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:202)에서 (StandardContextValve.java:271) .doInvoke (StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invok E org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:632)에서 org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:206)에서 (WebPipeline.java:94) org.apache.catalina에서 org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:571) 에서 org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:577)에서 . core.ContainerBase.invoke org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline에서 org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:150)에서 (ContainerBase.java:1080) . 자바 A : 632) org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:571) 에서 org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:577) 에서 에서 조직도 com.sun.enterprise.web.connector에서 .apache.catalina.core.ContainerBase.invoke org.apache.coyote.tomcat5.CoyoteAdapter.service (CoyoteAdapter.java:272)에서 (ContainerBase.java:1080) com.sun.en에서 .grizzly.DefaultProcessorTask.invokeAdapter com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess (DefaultProcessorTask.java:568)에서 (DefaultProcessorTask.java:637) terprise.web.connector.grizzly.DefaultProcessorTask.process 이 com.sun에서 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask (DefaultReadTask.java:341) 에서 (DefaultProcessorTask.java:813). enterprise.web.connector.grizzly.DefaultReadTask.doTask 이 com.sun에서 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask (DefaultReadTask.java:214) 에서 (DefaultReadTask.java:263). enterprise.web.connector.grizzly.TaskBase.run com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run (SSLWorkerThread.java:106)에서 (TaskBase.java:265)

,536,913,632

PWC6344 :이 얹는 10

때때로 파일 /path/to/jsp/file/jsp_file.jsp.java|#에 대한 출력 작가]

단지를 만들 수 없습니다 PWC6344 오류가 인쇄되고 때로는 둘 다 PWC1231 오류 다음에 항상 PWC6344가옵니다 (이는 IOException 발생시 예외가 발생하기 때문에 다소 의미가 있습니다).

글쎄,이 두 번 오류가 발생했습니다, 내가 한 유일한 일은 인스턴스를 중지하고 시작했다. 모든 것이 다시 좋았으며이 오류는 서버 중 하나에서만 발생했습니다.

I :

UPDATES ...

는 무슨 ... 무슨 일이 일어나고 또는 어떻게 내가 대신 정지의 문제를 해결할 수있는이 원인을 진단하고 영원히부터 다시 할 수 있습니다 sbridges가 제안한 것처럼 파일 설명자 문제 일 가능성을 조사했지만, 최대 파일 핸들러 수는 811975이고 한 서버에는 4520 개의 열린 파일, 다른 서버에는 6894 만있는 359532입니다.

그래서 나는 이것이 문제가 아니라고 말하기에 안전하다고 생각합니다!

누군가 다른 이론을 갖고 있습니까? 권한이 잘못 설정하고 디스크에 컴파일 된 JSP 페이지를 쓸 수 없습니다처럼

+0

실행중인 OS는 무엇입니까? 파일/폴더 사용 권한 또는 소유권 설정으로 인해 실패 할 수 있습니다. – Powerslave

+0

하나는 Red Hat이고 다른 하나는 CentOS이지만 권한 또는 소유권을 무작위로 변경하는 방법은 무엇입니까?,이 인스턴스는 매일 다시 시작됩니다. 매일이 오류가 나타나지 않고 다시 시작됩니다. – jsedano

+0

'... jsp.java (Permission denied) at java.io.FileOutputStream.open (네이티브 메소드)': Jasper JSP 컴파일러는 JSP 파일을 컴파일하려고 시도하고, OS가 오픈 콜 파일을 호출하여 Permission denied 오류를 반환합니다. '이것이 문제가 아니라고 말하는 것이 안전하다고 생각한다'- 불행히도 아니오. 권한이없는 사용자는 사용할 수있는 핸들 수가 적습니다 (예 : 1024 세트 /etc/security/limits.conf. http://prefetch.net/blog/index.php/2009/07/31/increasing-the-number-of-available-file-descriptors-on-centos-and-fedora-linux-servers/ 및 https : //bugzilla.redhat.com/show_bug.cgi?id=702670 –

답변

1

/path/to/jsp/file/jsp_file.jsp.java (Permission denied) 

해당 디렉토리/파일에 대한 권한이 올바른지 보인다?

+0

예,이 오류가오고 간다는 것을 기억하십시오. 인스턴스는 아침에 매일 다시 시작되며 때로는 두 서버 중 하나의 일부 JSP 페이지가 시작됩니다. 오류가 발생하고 인스턴스를 중지했다가 다시 시작하면 모든 작업이 정상적으로 작동합니다. – jsedano

+0

아무것도 해당 디렉터리의 사용 권한을 변경하지 않습니다? FileNotFoundException은 열려있는 파일 핸들이 부족하여 발생할 수 있습니다. linux를 사용하는 경우 열려있는 파일 핸들을 보려면 lsof를 사용할 수 있습니다. – sbridges

+0

어떻게 복제 할 수 있습니까 ?? 개발 환경에서 이것을 테스트하기 위해 "열린 파일 핸들이 부족하다"는 뜻입니까? 또한 동일한 서버가 다른 응용 프로그램과 함께 다른 인스턴스를 가지고있어서 문제의 오류가 발생하지 않으며 서버의 한 인스턴스에서만 파일 처리기가 부족할 수 있습니까? 고맙습니다! 그리고 예, Linux에서 실행 중입니다 – jsedano

1

이름 바꾸기 jsp_file.jsp.java to jsp_file.jsp.

+0

파일의 이름은 jsp_file.jsp입니다. 그러나 끝에는 .java로 이름이 표시됩니다. 이유는 모르겠 음 – jsedano

+0

먼저 프로젝트 폴더로 이동하여 모두 삭제하십시오. ** build ** 및 ** dist ** 디렉토리에있는 파일. 그런 다음'jsp_file.jsp.java'의 이름을'jsp_file.jsp'로 변경하십시오. 지금 ** 깨끗하고 빌드 ** 프로젝트. 그런 다음 이전 버전을'glassfish' 서버에 배포 해제하고 새로 만든'war' 파일을'glassfish' 서버에 배포합니다. – Bishan

+0

우리가 생산을위한 전쟁을 일으킬 때마다 똑같은 과정을 거칩니다. – jsedano

1

PWC6344 : 파일 /path/to/jsp/file/jsp_file.jsp.java|#]

기본 운영 체제가 완전히 소모 된 경우이 또한 발생할 수에 대한 출력 라이터를 만들 수 없습니다 읽기 또는 쓰기를 위해 파일을 여는 데 필요한 파일 핸들러/디스크립터 나는 CentOS에 대해 잘 알고 있지 않지만, Google은 검색 결과에 관련된 많은 문제를 감안할 때 1024의 "상대적으로 낮은"한계를 가지고 있음을 암시합니다. 결과 중 당신은 같은 following blog, 그것은을 증가하는 방법에 관한 질문/답변을 많이 볼 수 있습니다 :

Increase the number of file descriptors on Centos and Fedora Linux

가에 CentOS/페도라에 일반 사용자를위한 파일 기술자의 수를 올리기/레드햇은 놀랍게도하는 법을 배우기가 어렵습니다. 웹에는 불완전한 워크 스루가 많이 있고 일부에는 오타 및 기타 문제가 있습니다.

  1. 루트, /etc/sysctl.conf 파일로

    과 줄을 추가 : 여기

    는 65535 1024 (기본값)에서 열린 파일 설명자 제한을 높이기 위해 나를 위해 일한 단계는 다음과 같습니다

    배쉬 프롬프트에서
    fs.file-max = 512000 
    
  2. , 실행

    $ sysctl -p 
    

    settin의 원인이됩니다 그 gs가 적용됩니다. cat 512000 > /proc/sys/fs/file-max도 가능하지만 재부팅 할 때 재설정 될 수 있습니다.

  3. /etc/security/limits를 편집하십시오.conf의는 다음을 추가 :

    * - nofile 65535 
    

    은 그 수행하고 당신이 선호하는 경우가 더 제한하는 방법을 무엇에 대한 자세한 내용은 인라인 주석을 참조하십시오. 루트로

  4. $ ulimit -n 65535 
    

    를 실행하고 오류가 없는지 확인합니다. 다시 확인하려면 ulimit -n을 실행하고 응답이 65535인지 확인하십시오.

  5. SSH에 대해 PAM 인증이 설정되어 있는지 확인하거나 일반 사용자로 연결하려고하면 새 제한이 표시되지 않습니다. 편집은/etc/SSH/sshd_config를하고 있는지 확인 :

    UsePAM yes 
    

    다시 시작 SSH /sbin/service sshd restart 어떤 변경이있는 경우. & 쉘 및 실행 새로운 SSH 세션을 가진 일반 사용자로

  6. 로그인 :

    $ ulimit -n 65535 
    

    ulimit -n 다시 확인하는 실행과 행운을 빕니다!

+0

고맙습니다. 프로덕션 서버를 담당하는 부서에 cat/proc/sys/fs/file-max 및 lsof 명령을 실행하도록 요청했습니다. wc -l, 나는 결과를 기다리고있다. – jsedano