2012-02-06 33 views
7

Tôi đang sử dụng hồ sơ web Glassfish 3.1.1 trong môi trường sản xuất và nó đang ăn quá nhiều CPU. Đây là cài đặt máy chủ: Windows Server 2008 R2 64 bit, Intel Xeon 8core @ 3,2GHz, 8GB ram. Tôi đang sử dụng JDK 1.7u2 64bit. thiết lập Glassfish JVM:Glassfish - sử dụng CPU cao

<jvm-options>-XX:+UseCompressedOops</jvm-options> 
<jvm-options>-Xmn1g</jvm-options> 
<jvm-options>-Xss128k</jvm-options> 
<jvm-options>-XX:+UseParallelOldGC</jvm-options> 
<jvm-options>-XX:ParallelGCThreads=4</jvm-options> 
<jvm-options>-Xmx3g</jvm-options> 
<jvm-options>-XX:+DisableExplicitGC</jvm-options> 
<jvm-options>-d64</jvm-options> 
<jvm-options>-XX:PermSize=256m</jvm-options> 
<jvm-options>-Xms3g</jvm-options> 
<jvm-options>-XX:MaxPermSize=256m</jvm-options> 
<jvm-options>-XX:+AggressiveHeap</jvm-options> 

Tôi cũng điều chỉnh một số tùy chọn theo http://jfarcand.wordpress.com/2009/11/27/putting-glassfish-v3-in-production-essential-surviving-guide/ Chạy cho vài giờ hoặc 1 ngày Glassfish sử dụng 15% đến 40% CPU, someties 90% và ứng dụng doesnt đáp ứng.

[#|2012-02-03T10:30:46.837+0100|WARNING|glassfish3.1.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=43;_ThreadName=Thread-2;|GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(32).|#] 

[#|2012-02-03T10:30:55.074+0100|WARNING|glassfish3.1.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=41;_ThreadName=Thread-2;|GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(41).|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;|java.nio.channels.ClosedChannelException 
    at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:249) 
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:440) 
    at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:108) 
    at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:76) 
    at com.sun.grizzly.http.SocketChannelOutputBuffer.flushChannel(SocketChannelOutputBuffer.java:326) 
    at com.sun.grizzly.http.SocketChannelOutputBuffer.flushBuffer(SocketChannelOutputBuffer.java:398) 
    at com.sun.grizzly.http.SocketChannelOutputBuffer.realWriteBytes(SocketChannelOutputBuffer.java:282) 
    at com.sun.grizzly.tcp.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:898) 
    at com.sun.grizzly.tcp.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:167) 
    at com.sun.grizzly.tcp.http11.filters.GzipOutputFilter$FakeOutputStream.write(GzipOutputFilter.java:223) 
    at java.util.zip.GZIPOutputStream.finish(GZIPOutputStream.java:169) 
    at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:238) 
    at com.sun.grizzly.tcp.http11.filters.GzipOutputFilter.recycle(GzipOutputFilter.java:186) 
    at com.sun.grizzly.http.SocketChannelOutputBuffer.recycle(SocketChannelOutputBuffer.java:417) 
    at com.sun.grizzly.http.ProcessorTask.finishResponse(ProcessorTask.java:817) 
    at com.sun.grizzly.http.ProcessorTask.postResponse(ProcessorTask.java:750) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:726) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:249)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:440)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:108)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:76)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.SocketChannelOutputBuffer.flushChannel(SocketChannelOutputBuffer.java:326)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.SocketChannelOutputBuffer.flushBuffer(SocketChannelOutputBuffer.java:398)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.SocketChannelOutputBuffer.realWriteBytes(SocketChannelOutputBuffer.java:282)|#] 

[#|2012-02-03T10:30:56.665+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.tcp.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:898)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.tcp.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:167)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.tcp.http11.filters.GzipOutputFilter$FakeOutputStream.write(GzipOutputFilter.java:223)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at java.util.zip.GZIPOutputStream.finish(GZIPOutputStream.java:169)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:238)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.tcp.http11.filters.GzipOutputFilter.recycle(GzipOutputFilter.java:186)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.SocketChannelOutputBuffer.recycle(SocketChannelOutputBuffer.java:417)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.ProcessorTask.finishResponse(ProcessorTask.java:817)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.ProcessorTask.postResponse(ProcessorTask.java:750)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:726)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.ContextTask.run(ContextTask.java:71)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)|#] 

[#|2012-02-03T10:30:56.681+0100|SEVERE|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=138;_ThreadName=Thread-2;| at java.lang.Thread.run(Thread.java:722)|#] 

[#|2012-02-03T10:31:00.440+0100|WARNING|glassfish3.1.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=40;_ThreadName=Thread-2;|GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(38).|#] 

[#|2012-02-03T10:33:49.170+0100|WARNING|glassfish3.1.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=40;_ThreadName=Thread-2;|GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(11).|#] 

[#|2012-02-03T10:33:57.235+0100|WARNING|glassfish3.1.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=43;_ThreadName=Thread-2;|GRIZZLY0023: Interrupting idle Thread: http-thread-pool-80(16).|#] 

Chỉnh sửa: Tôi đã giải quyết được vấn đề, có lỗi trong nén gzip Glassfish, vì vậy tôi đã tắt. http://www.java.net/forum/topic/glassfish/glassfish/glassfish-301-gzip-problem-threads-apparently-spinning-100-cpu-use

Thay vào đó tôi sẽ sử dụng quyền này: http://www.servletsuite.com/servlets/gzipflt.htm để nén nội dung.

Trả lời

0

Chúng tôi gặp sự cố tương tự, mặc dù chúng tôi không sử dụng GZIP. Sau một thời gian (và dưới tải cao) các bản ghi của chúng tôi sẽ lấp đầy với

GRIZZLY0023: Interrupting idle Thread: http-thread-pool-28080(34)

Chúng tôi quản lý để giải quyết này cho Glassfish 3.1.1 bằng cách nâng cấp lên một phiên bản xám Bắc Mỹ tìm thấy trong Glassfish 3.1.2.2. Đọc thêm về nó tại http://thumbtribe-it.blogspot.com/2012/10/grizzly0023.html

+0

Vâng, tôi cũng nhận được hành vi nuốt chửng CPU trên máy tính dev của mình. Điều thú vị là, ví dụ GF không được tải. Trong thực tế, tôi có thể để nó chạy với các ứng dụng NO được triển khai, và nó sẽ làm điều này sau một khoảng thời gian nhất định (xin lỗi, tôi chưa thử thời gian). Liên kết này MIGHT có liên quan đến một số: http://gregorbowie.wordpress.com/2012/05/03/java-glassfish-v3-high-cpu-and-memory-usage-locked-threads-death/ – demaniak

1

Đây rõ ràng là lỗi trong GlassFish 3.1.1 và 3.1.2. JIRA issue for it chứa các bản vá có thể hữu ích.

0

Điều này có thể do vòng lặp vô hạn trong mã Java được tham chiếu bởi biểu thức trong chế độ xem. Take a tread dump của máy chủ ứng dụng khi máy đang chạy và gặp sự cố này và tìm kiếm (các) chuỗi có sự cố như số http-thread-pool-80(32)http-thread-pool-80(41) - nếu máy chủ ứng dụng của bạn dành toàn bộ thời gian trên một phần mã ứng dụng của bạn, là một vòng lặp vô hạn (hoặc cái gì đó khác khiến cho mã đó chạy thường xuyên hơn mức cần thiết).