PWC1231 и PWC6344

У меня два сервера, работающих на Glassfish 2.1, на обоих установлено одно и то же веб-приложение.

Эта ошибка возникала дважды: на некоторых страницах jsp перестает отображаться только пустая страница, а в журналах печатаются следующие ошибки ...

Далее следует:

PWC6344: невозможно создать средство записи вывода для файла /path/to/jsp/file/jsp_file.jsp.java|#]

Иногда печатается только ошибка PWC6344, а иногда и то, и другое, за ошибкой PWC1231 всегда следует PWC6344 (что отчасти имеет смысл, поскольку это исключение выдается при возникновении исключения IOException).

Что ж, оба раза эта ошибка произошла, единственное, что я сделал, это остановил и запустил экземпляр, и все снова было хорошо, также эта ошибка произошла только на одном из серверов.

Что происходит? ... Или как мне диагностировать причину этого, чтобы я мог исправить проблему, вместо того, чтобы останавливаться и начинать заново ...

ОБНОВЛЕНИЯ:

Я изучал возможность того, что это проблема дескриптора файла, как было предложено sbridges, но !, максимальное количество обработчиков файлов составляет 811975 с 4520 открытыми файлами на одном сервере и 359532 с только 6894 на другом.

Итак, я думаю, можно с уверенностью сказать, что проблема не в этом!

Есть ли у кого-то другая теория?

Похоже, права установлены неправильно и вы не можете записать скомпилированную страницу jsp на диск,


person jsedano    schedule 25.03.2013    source источник
comment
Один из них - Red Hat, а другой - CentOS, но как разрешения или права собственности могут изменяться случайным образом? Эти экземпляры перезапускаются ежедневно, и не каждый день появляются эти ошибки, и они исчезают после перезапуска.   -  person Powerslave    schedule 17.04.2013
comment
'... jsp.java (Permission denied) at java.io.FileOutputStream.open (Native Method)': Jasper JSP-компилятор пытается скомпилировать ваш JSP-файл, делает собственный вызов ОС для открытия файла, который возвращает ошибку Permission denied. «думаю, можно с уверенностью сказать, что проблема не в этом» - к сожалению, нет; у непривилегированных пользователей меньше доступных дескрипторов, например 1024 устанавливается в /etc/security/limits.conf. См. prefetch.net/blog/index.php/2009/07/31/ и bugzilla.redhat.com/show_bug.cgi?id=702670   -  person jsedano    schedule 17.04.2013
comment
Да, помните, что эта ошибка появляется и исчезает, экземпляры перезапускаются каждый день утром, и иногда некоторые страницы jsp только одного из двух серверов начинают выдавать ошибки, и мы просто останавливаемся и запускаем экземпляр, и все снова работает нормально   -  person Glen Best    schedule 18.04.2013


Ответы (3)


Правильны ли разрешения для этого каталога / файла?

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

Переименуйте

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

person sbridges    schedule 16.04.2013
comment
ничего не меняет разрешения для этих каталогов? FileNotFoundException также может быть вызвано исчерпанием открытых дескрипторов файлов, если вы используете Linux, вы можете использовать lsof, чтобы увидеть, какие дескрипторы файлов открыты - person jsedano; 16.04.2013
comment
Как я могу это воспроизвести ?? Я имею в виду, что у вас заканчиваются дескрипторы открытых файлов, чтобы проверить это в среде разработки? Кроме того, на том же сервере есть другой экземпляр с другим приложением, где ошибки в вопросе никогда не возникают, могут ли обработчики файлов работать только на одном экземпляре сервера? Спасибо !, и да, я работаю на Linux - person sbridges; 17.04.2013
comment
вам, вероятно, потребуется отладка на рабочем сервере, попробуйте выполнить lsof | wc -l периодически на сервере, на котором возникают проблемы, сохраняет вывод в файл и проверяет, растет ли количество открытых файлов. Если это так, посмотрите, какие файлы утекают. - person jsedano; 17.04.2013
comment
Производственные серверы находятся в ведении другого отдела, я попрошу их выполнить следующие команды на обоих серверах: cat / proc / sys / fs / file-max и lsof | wc -l и отправьте обратно результаты. В настоящее время я исследую утечку файлового дескриптора. Это отправная точка! Благодарность!! docs.oracle.com/cd/E19879-01/ 820-4343 / abejj / index.html Я отправлю обратно результаты, возможно, обновлю свой вопрос - person sbridges; 17.04.2013
comment
В конце концов, это были права доступа к файлам !! Оказывается, на одном сервере в другой области было одно приложение, которое отслеживало бы наш, но им нужны были права доступа к файлам, поэтому каждый раз, когда эта другая область изменяла разрешения, появлялась ошибка !!, а затем, когда мы вызываем запрос на перезапуск сервера, они бы это сделали, но как root! так что разрешения не были проблемой ... - person jsedano; 17.04.2013
comment
Файл называется jsp_file.jsp, но ошибка отображает имя с расширением .java в конце, я не знаю, почему тоже - person jsedano; 18.04.2013

PWC6344: невозможно создать средство записи вывода для файла /path/to/jsp/file/jsp_file.jsp.java|#]

person Bishan    schedule 16.04.2013
comment
Сначала перейдите в папку своего проекта и удалите все файлы в каталогах build и dist. Затем переименуйте _1_ в _2_. теперь Очистите и создайте свой проект. Затем отмените развертывание старой версии на _3_ сервере и разверните вновь созданный _4_ файл на _5_ сервере. - person jsedano; 16.04.2013
comment
Каждый раз, когда мы создаем войну за производство, мы делаем ту же самую процедуру. - person Bishan; 16.04.2013
comment
Игнорируйте эту линию анализа. Не переименовывайте файл. Веб-контейнер компилирует файлы JSP в сервлеты, добавляя расширение .java. Во время выполнения нет файлов JSP - только скомпилированные классы сервлетов. - person jsedano; 16.04.2013
comment
Спасибо, я попросил отдел, отвечающий за производственные серверы, запустить эти команды cat / proc / sys / fs / file-max и lsof | wc -l, жду результатов. - person Glen Best; 18.04.2013

Это также может произойти, если в базовой операционной системе закончились обработчики / дескрипторы файлов, которые необходимы для открытия файла для чтения или записи. Я не очень хорошо знаком с CentOS, но Google намекает, что у него есть относительно низкий лимит в 1024, учитывая множество проблем, связанных с ним в результатах поиска. Среди результатов вы увидите множество вопросов / ответов о том, как его увеличить, например следующий блог:

Увеличить количество файловых дескрипторов для обычного пользователя в CentOS / Fedora / Redhat на удивление сложно. В сети много незавершенных проверок, некоторые с опечатками и другими проблемами.

Какая у вас ОС? Может быть, права доступа к файлу / папке или настройки владельца приводят к сбою ...

Вот шаги, которые помогли мне поднять предел дескриптора открытого файла с 1024 (по умолчанию) до 65535:

От имени root отредактируйте /etc/sysctl.conf и добавьте строку:

  1. В командной строке bash запустите:

     fs.file-max = 512000
    
  2. После этого настройки вступят в силу. Вы также можете cat 512000 > /proc/sys/fs/file-max, но это может быть сброшено при перезагрузке.

     $ sysctl -p
    

    Отредактируйте /etc/security/limits.conf и добавьте следующее:

  3. См. Встроенные комментарии для получения более подробной информации о том, что это делает и как сделать это более ограничительным, если вы предпочитаете.

     * - nofile 65535
    

    Как root, запустите

  4. и убедитесь, что у вас нет ошибок. Чтобы дважды проверить, запустите ulimit -n и убедитесь, что ответ 65535.

     $ ulimit -n 65535
    

    Убедитесь, что для SSH включена аутентификация PAM, иначе при попытке подключиться как обычный пользователь вы не увидите новые ограничения. Отредактируйте / etc / ssh / sshd_config и убедитесь, что у вас есть:

  5. Если вы внесли какие-либо изменения, перезапустите /sbin/service sshd restart SSH.

     UsePAM yes
    

    Войдите в систему как обычный пользователь с новым сеансом SSH и оболочкой и запустите:

  6. Запустите ulimit -n еще раз, чтобы проверить и удачи!

     $ ulimit -n 65535
    

    Увеличьте количество дескрипторов файлов в Centos и Fedora Linux

person BalusC    schedule 17.04.2013
comment
PWC1231: Servlet.service () для сервлета jsp выдал исключение java.io.FileNotFoundException: /path/to/jsp/file/jsp_file.jsp.java (Permission denied) в java.io.FileOutputStream.open (собственный метод) в java .io.FileOutputStream. (FileOutputStream.java:179) в java.io.FileOutputStream. (FileOutputStream.java:70) в org.apache.jasper.compiler.AntJavaCompiler.getJavaWriter (AntJavaCompacher.java:213) в org.apache.java:213). 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.serv (JspServlet.java:364) в javax.servlet.http.HttpServlet.service (HttpServlet.java:831) в org.apache.catalina.core.Applicati onFilterChain.servletService (ApplicationFilterChain.java:411) по адресу org.apache.catalina.core.ApplicationDispatcher.doInvoke (ApplicationDispatcher.java:855) по адресу org.apache.catalina.core.ApplicationDispatcher.invoke (org.apache.catalina.core.ApplicationDispatcher. .apache.catalina.core.ApplicationDispatcher.processRequest (ApplicationDispatcher.java:542) в org.apache.catalina.core.ApplicationDispatcher.doForward (ApplicationDispatcher.java:474) в org.apache.catalina.core.ApplicationDispatcher.ApplicationDispatcher. .java: 366) в org.apache.struts.action.RequestProcessor.doForward (RequestProcessor.java:1056) в org.apache.struts.tiles.TilesRequestProcessor.doForward (TilesRequestProcessor.java:261) в org.apache.struts. action.RequestProcessor.processForwardConfig (RequestProcessor.java:388) в org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig (TilesRequestProcessor.java:316) в org.apache.struts.action.ReceestProcessor.processor. ss (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.servjavasservice: ApplicationinfilterChain.servjletService: 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.internalDoFilter2hain (ApplicationFilterChain.internalDoFilter: java: .apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:198) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:288) в org.apache.catalina.ContextValve.Standardindex.catalina. .java: 271) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:202) на org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:632) на org.apache.catalina. core.StandardPipeline.doInvoke (StandardPipeline.java:577) на com.sun.enterprise.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.StandardEngineValve.invoke (StandardEngineValve.java:150) в org.apache.catalina.core.StandardPipeline.doInvoke .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.coyote.tomcat5.CoyoteAdapter.service (CoyoteAdapter.java:272) в com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter java: 637) на com.sun.enterprise.web.connector.grizzly.DefaultProcessorTa sk.doProcess (DefaultProcessorTask.java:568) в com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process (DefaultProcessorTask.java:813) в com.sun.enterprise.web.connector.grizzly.DefaultReadTask.exe ( 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) - person jsedano; 17.04.2013