gpt4 book ai didi

Java 线程在 Ubuntu/Jetty 上滞后/长时间 hibernate

转载 作者:太空宇宙 更新时间:2023-11-04 04:29:47 26 4
gpt4 key购买 nike

我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hibernate 很长时间。比如 1 秒甚至更多,有时甚至几个小时。我首先认为这是ajax库(DWR)的错误,然后是Jetty问题,然后是Java错误,但所有怀疑可能都是错误的。我花了几周时间试图解决这个问题。我完全迷失了。我唯一没有尝试的就是在另一个操作系统上运行它,比如Windows。这是通常滞后的线程的堆栈跟踪:

Cancelled at this stacktrace:   at java.lang.Object.wait(Native Method)
at org.mortbay.io.nio.SelectChannelEndPoint.blockWritable(SelectChannelEndPoint.java:279)
at org.mortbay.jetty.AbstractGenerator$Output.blockForOutput(AbstractGenerator.java:544)
at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:571)
at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:997)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:648)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:579)
at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:109)
at org.mortbay.jetty.AbstractGenerator$OutputWriter.write(AbstractGenerator.java:903)
at org.mortbay.jetty.AbstractGenerator$OutputWriter.write(AbstractGenerator.java:752)
at org.mortbay.jetty.AbstractGenerator$OutputWriter.write(AbstractGenerator.java:741)
at java.io.PrintWriter.write(PrintWriter.java:412)
at java.io.PrintWriter.write(PrintWriter.java:429)
at java.io.PrintWriter.print(PrintWriter.java:559)
at java.io.PrintWriter.println(PrintWriter.java:695)
at org.directwebremoting.dwrp.PlainScriptConduit.addScript(PlainScriptConduit.java:93)
at org.directwebremoting.impl.DefaultScriptSession.addScript(DefaultScriptSession.java:239)
at server.comunication.dwr.OneReverseDWRServer.sendLocalBuffer(OneReverseDWRServer.java:385)
at server.comunication.dwr.OneReverseDWRServer.sendMessageLocal(OneReverseDWRServer.java:363)
at server.comunication.dwr.OneReverseDWRServer.sendMessage(OneReverseDWRServer.java:412)
at server.comunication.messaging.SendTask.call(SendTask.java:53)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

当我尝试不同的 jetty 连接选择器时,堆栈跟踪有所不同,但它正在等待一些类似的地方。我尝试了很多版本的Jetty和Java的组合。我以为这可能是NIO bug,但是当我将选择器更改为非nio时,它被堆叠在其他地方。

Linux 上可能有问题吗?我以 root 身份运行它。 ubuntu 中是否有一些设置可以更改以强制等待线程按其应有的方式弱化?请。帮助,我完全迷失在这里。

谢谢

最佳答案

我不确定我是否知道反向 AJAX 是什么,但我假设它是服务器通过浏览器(实际上)发送定期请求来请求请求而向用户浏览器发送请求的地方。

我想发生的情况是浏览器偶尔不发出请求,这会导致服务器端线程偶尔卡住。

这不太可能是 nio 与非 nio、您正在使用的 Java 版本、Jetty 版本或 Linux 中的错误。

这可能是您正在使用的 DWR 库中的一个错误,但它也可能只是您正在做的事情所固有的。例如,如果用户关闭正在运行客户端的浏览器窗口或 Pane ……或者如果出现网络中断……那么浏览器可能根本无法发出请求。然后,服务器线程可能会陷入等待永远不会返回的客户端的状态。如果发生这种情况,那么需要有一些东西来解锁服务器端线程。 (我本以为这是 DWR 的责任,但我不是专家......)。

关于Java 线程在 Ubuntu/Jetty 上滞后/长时间 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com