Невозможно получить доступ к веб-приложению через несколько дней - PullRequest
0 голосов
/ 17 октября 2019

У меня есть веб-приложение, работающее на локальном сервере Tomcat, которое через несколько дней становится недоступным. Просматривая логи tomcat, я нахожу логи ниже. Есть идеи, что здесь происходит? Простой перезапуск tomcat решает проблемы от нескольких дней до недели

15-Oct-2019 06:34:26.792 SEVERE [http-nio-8080-exec-149] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [default] in context with path [/powersync] threw exception
 java.lang.NullPointerException
    at org.apache.coyote.http11.Http11OutputBuffer.commit(Http11OutputBuffer.java:351)
    at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:658)
    at org.apache.coyote.Response.action(Response.java:167)
    at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:207)
    at org.apache.coyote.Response.doWrite(Response.java:502)
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:375)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:420)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:345)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:405)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:393)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
    at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:999)
    at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:425)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

1 Ответ

0 голосов
/ 17 октября 2019

Вероятно, это связано с HotSwap, который вы, вероятно, используете на своем сервере приложений. Hotswap даст вам возможность свободно вносить изменения в работающее приложение без перезагрузки сервера, если вы вносите изменения в существующие методы. Насколько я понимаю, кажется, что вы поддерживаете сервер, работающий в вашем приложении в течение длительных периодов времени. Обычно это делают разработчики, запускающие свои приложения с использованием таких вещей, как Hotswap или JRebel .

Проблема, с которой вы столкнулись, связана с тем, как Hotswap работает в вашей JVM. Hotswap фактически добавляет ресурсы в JVM, когда вы вносите изменения в свое приложение. Проблема, которая случается, состоит в том, что это в конечном счете вызовет сбой JVM из-за этих изменений. Пока вы используете Hotswap, вам придется регулярно перезапускать JVM по прошествии определенного периода времени.

С другой стороны, JRebel фактически даст вам возможность видеть изменения в вашей JVM без каких-либо изменений. необходимость перезапустить JVM. Причина этого заключается в том, что JRebel не перемещает ресурсы, а перераспределяет ваши загрузчики классов в JVM в файлы, измененные локально через выбранную вами IDE.

Я инженер команды JRebel в Perforce Software. Но проблема, с которой вы сталкиваетесь - это то, с чем я регулярно сталкиваюсь с разработчиками, работающими с Hotswap. Я надеюсь, что это полезно.

...