3

我有两台在Glassfish 2.1上运行的服务器,它们都有相同的网络应用程序。

两次出现这个错误:一些jsp页面停止显示只显示一个空白页面,并且在日志中打印了以下错误...

PWC1231:servlet jsp 的 Servlet.service() 抛出异常 java.io.FileNotFoundException: /path/to/jsp/file/jsp_file.jsp.java (Permission denied) at java.io.FileOutputStream.open(Native Method) at java .io.FileOutputStream.(FileOutputStream.java:179) 在 org.apache.jasper.compiler.AntJavaCompiler.getJavaWriter(AntJavaCompiler.java:213) 在 org.apache.java.io.FileOutputStream.(FileOutputStream.java:70)。 jasper.compiler.Compiler.generateJava(Compiler.java:173) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:409) 在 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470) 在 org.apache.jasper.servlet.JspServlet。service(JspServlet.java:364) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) at org.apache.catalina .core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:855) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:542 ) 在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:366) 在 org.apache.struts.action.RequestProcessor 的 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:474)。 doForward(RequestProcessor.java:1056) 在 org.apache.struts.tiles.TilesRequestProcessor。doForward(TilesRequestProcessor.java:261) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316) at org.apache .struts.action.RequestProcessor.process(RequestProcessor.java:231) 在 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 在 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java :415) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:738) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 在 org.apache.catalina.core.ApplicationFilterChain.servletService( ApplicationFilterChain.java:411) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) 在 com.my.app.filtro.FiltroCallcenter.doFilter(FiltroCallcenter.java:90) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288) at org.apache.catalina.core .StandardContextValve.invokeInternal(StandardContextValve.java:271) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在com.sun.enterprise 的 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)。web.WebPipeline.invoke(WebPipeline.java:94) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) 在 org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:1080) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)。 catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) 在 org.apache.catalina.core。ContainerBase.invoke(ContainerBase.java:1080) 在 org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272) 在 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:第637章) .sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) 在 com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) 在 com.sun.enterprise .web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) 在 com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)在 com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

紧随其后的是:

PWC6344: 无法为文件 /path/to/jsp/file/jsp_file.jsp.java|#] 创建输出编写器

有时只打印 PWC6344 错误,有时两者都打印,PWC1231 错误后面总是跟着 PWC6344(这有点道理,因为发生 IOException 时会抛出该异常)。

好吧,两次都发生了这个错误,我唯一做的就是停止并启动实例,一切又好了,而且这个错误只发生在其中一个服务器上。

发生了什么事?...或者我如何诊断是什么导致了这种情况,这样我就可以解决问题,而不是永远停止并重新开始...

更新:

正如 sbridges 所建议的那样,我正在调查这可能是文件描述符问题,但是!,文件处理程序的最大数量是 811975,其中一个服务器上打开了 4520 个文件,而另一个服务器上只有 6894 个文件处理程序是 359532。

所以,我想可以肯定地说这不是问题!

有人有其他理论吗?

4

3 回答 3

1

PWC6344: 无法为文件 /path/to/jsp/file/jsp_file.jsp.java|#] 创建输出编写器

如果底层操作系统用尽了打开文件进行读取或写入所需的文件处理程序/描述符,也会发生这种情况。我对 CentOS 不是很熟悉,但Google暗示它有一个“相对较低”的限制,即 1024,因为在搜索结果中有很多与之相关的问题。在结果中,您会看到很多关于如何增加它的问题/答案,例如以下博客

在 Centos 和 Fedora Linux 上增加文件描述符的数量

在 CentOS/Fedora/Redhat 上为普通用户增加文件描述符的数量是非常难以学习的。网上有很多不完整的演练,有些有错别字和其他问题。

以下是将打开文件描述符限制从 1024(默认值)提高到 65535 的步骤:

  1. 以 root 身份编辑 /etc/sysctl.conf 并添加以下行:

     fs.file-max = 512000
    
  2. 在 bash 提示符下,运行:

     $ sysctl -p
    

    这将导致设置生效。您也可以cat 512000 > /proc/sys/fs/file-max,但可能会在重新启动时重置。

  3. 编辑 /etc/security/limits.conf 并添加以下内容:

     * - nofile 65535
    

    如果您愿意,请参阅内联注释以了解有关其作用以及如何使其更具限制性的更多详细信息。

  4. 以 root 身份运行

     $ ulimit -n 65535
    

    并确保您没有错误。要仔细检查,请运行ulimit -n并确保响应为 65535。

  5. 确保为 SSH 打开 PAM 身份验证,否则当您尝试以普通用户身份连接时,您将看不到新的限制。编辑 /etc/ssh/sshd_config 并确保您有:

     UsePAM yes
    

    /sbin/service sshd restart如果您进行了任何更改,请重新启动 SSH 。

  6. 使用新的 SSH 会话和 shell 以普通用户身份登录并运行:

     $ ulimit -n 65535
    

    再次运行ulimit -n检查并祝你好运!

于 2013-04-17T15:48:47.200 回答
1

看起来权限设置不正确,无法将编译好的jsp页面写入​​磁盘,

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

该目录/文件的权限是否正确?

于 2013-04-16T02:42:44.060 回答
1

重命名jsp_file.jsp.javajsp_file.jsp.

于 2013-04-16T02:57:50.857 回答