7

負荷が高い場合、JSP ファイルを GZipping して解凍すると、多くのスレッドがロックされます。スレッド ダンプは次のようになります。サイズが 14Kb の「header.jsp」から来ているようです。

http-0.0.0.0-8080-304" daemon prio=3 tid=0x0000000008bcc000 nid=0x302 runnable [0xfffffd7de7bc2000]
   java.lang.Thread.State: RUNNABLE
    at java.util.zip.Deflater.deflateBytes(Native Method)
    at java.util.zip.Deflater.deflate(Deflater.java:306)
    - locked <0xfffffd7e589078e8> (a java.util.zip.ZStreamRef)
    at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:159)
    at java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:118)
    at java.util.zip.GZIPOutputStream.write(GZIPOutputStream.java:72)
    - locked <0xfffffd7e58524d28> (a java.util.zip.GZIPOutputStream)
    at java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:91)
    at com.pinksheets.common.web.cache.ServletOutputStreamWrapper.write(ServletOutputStreamWrapper.java:24)
    at java.io.OutputStream.write(OutputStream.java:99)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
    at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
    - locked <0xfffffd7e58524d48> (a java.io.OutputStreamWriter)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
    at java.io.BufferedWriter.write(BufferedWriter.java:170)
    - locked <0xfffffd7e58524d48> (a java.io.OutputStreamWriter)
    at java.io.PrintWriter.write(PrintWriter.java:382)
    - locked <0xfffffd7e5824bd80> (a java.io.BufferedWriter)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:119)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:326)
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342)
    at org.apache.jsp.include.header_jsp._jspService(header_jsp.java:2032)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
4

1 に答える 1

3

いくつかの必然的なリンク:

同様の問題が発生しています。これまでのところ、Java コード (または、基盤となる zlib バッキング ライブラリの使用方法) によって、スレッドがこのようにスペースにスピンオフする可能性があるというのが最善の理論です。これまでのところ、これを防ぐことができた唯一の方法は、GZip 応答を行わないことです。ただし、GZIP しないよりも、100% の CPU コストを支払うことをお勧めします (他のスレッドは依然として非常に応答性が高いため)。投稿してから数か月が経ちました。他に共有する情報はありますか?

于 2012-02-27T18:44:36.350 に答える