私は、Reverse-ajaxベースのWeb用に、UbunuのJetty 6でJava Webサーバーを実行しています。そして、私はブラウザにデータを再送する遅れたスレッドに深刻な問題があります。非常に頻繁にいくつかのスレッドだけで長い時間スリープ状態になります。 1秒以上、場合によっては数時間と同じように。私はそれがJavaのバグであるということよりも、Ajaxライブラリ(DWR)のバグだと思ったのですが、それはJettyの問題だと思っていましたが、すべての疑惑はおそらく間違っています。私はこの問題を解決しようと数週間失った。私は完全に失われています。私が試していないと思うのは、Windowsのような別のOSでそれを実行することだけです。ここでは通常、遅れているスレッドのスタックトレースがある:私は別の桟橋接続セレクタを試みたときJavaスレッドlags/longがUbuntu/Jettyでスリープします
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とJavaの組み合わせの多くのバージョンを試しました。私はそれがNIOバグかもしれないと思ったが、セレクターをnon-nioに変更したときに、別の場所に積み重ねられた。
Linuxでは問題がありますか?私はそれをrootとして実行しています。 ubuntuにいくつかの設定をして、待っているスレッドを強制的に弱くするように変更できますか? Pls。助けて、私はここで完全に失われています。
おかげ
こんにちは、回答ありがとうございますが、明らかにDWRのバグではありません。私はDWRの2つの主要開発者と書いていましたが、DWRのバグではなく、おそらくJettyです。しかし、私はJettyのすべてのバージョンを試しましたが、バグはすべて同じで、Jettyフォーラム。問題は、Jettyは、継続的なmachanismのおかげで最高の解決策であるということです。スレッド数の一定の数だけコネクションを処理できます。他のWebコンテナは、接続モデルごとにスレッドを使用します。そのバグを検索し、 Linux上のNIOとJAVA 6の問題しかし、解決策はありません。 –