2010-09-05 24 views
8

Tôi có một ứng dụng máy chủ java cơ bản có 100 chuỗi công việc thực hiện các yêu cầu HEAD đơn giản trên các url. Tôi đang sử dụng HttpClient 4.x cho việc này.Không thể tải kết xuất chuỗi? Bất kỳ ý tưởng nào tại sao ứng dụng của tôi chặn?

Một vài phút chạy chương trình của tôi chỉ bị đóng băng trong một vài phút và tôi không thể hiểu tại sao. Kiểm tra ảnh chụp màn hình của báo cáo theo dõi hình ảnh vm nào. Bạn có thể thấy nó phẳng. Trong thời gian này tôi không thể có được một kết xuất thread tốt và vm trực quan chỉ đóng băng cho đến khi nó được bỏ chặn. Có ai có bất kỳ ý tưởng về những gì tôi có thể làm để thử và bắt đầu gỡ lỗi anh chàng này?

Visual VM: http://tinypic.com/view.php?pic=2i915bs&s=7

Đây là kết quả khi tôi đã cố gắng để có một bãi chứa jstack trong khi nó đã đông lạnh:

jstack -F 4325 
Attaching to process ID 4325, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 16.3-b01 
Deadlock Detection: 

No deadlocks found. 

Thread 4557: (state = BLOCKED) 
Error occurred during stack walking: 
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:152) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet(LinuxDebuggerLocal.java:466) 
    at sun.jvm.hotspot.debugger.linux.LinuxThread.getContext(LinuxThread.java:65) 
    at sun.jvm.hotspot.runtime.linux_amd64.LinuxAMD64JavaThreadPDAccess.getCurrentFrameGuess(LinuxAMD64JavaThreadPDAccess.java:92) 
    at sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaThread.java:256) 
    at sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaThread.java:218) 
    at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:76) 
    at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45) 
    at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) 
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) 
    at sun.jvm.hotspot.tools.JStack.main(JStack.java:86) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.tools.jstack.JStack.runJStackTool(JStack.java:118) 
    at sun.tools.jstack.JStack.main(JStack.java:84) 
Caused by: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet0(Native Method) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$800(LinuxDebuggerLocal.java:51) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1GetThreadIntegerRegisterSetTask.doit(LinuxDebuggerLocal.java:460) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:127) 
+0

Tôi cũng có vấn đề này và có vẻ như (không bảo đảm) rằng nó xảy ra chủ yếu trên jvms 64 bit. – whiskeysierra

+0

yêu cầu tất cả đi đến cùng một máy chủ? (nghĩa là bạn có chắc chắn đó không phải là máy chủ không phản hồi yêu cầu này không?) –

Trả lời

0

Rất likley do có quá nhiều bộ nhớ sử dụng gây GC. Thêm params để java:

-verbosegc -XX:+PrintGCDetails 

Và xem nếu bạn nhận thấy bất cứ điều gì rõ ràng trong đầu ra/nhật ký

+0

Ảnh chụp màn hình hiển thị ít hơn 100MB được sử dụng và hoạt động 0 GC. –

4

Tôi đã nhìn thấy một số báo cáo lỗi về jstack trên Linux với một dấu vết tương tự:

Bạn có nhận được kết quả tương tự với số kill -3 <pid> không?

0

Điều gì đã hiệu quả đối với tôi khi chạy jstack với tư cách chủ sở hữu quá trình mà không cần-F.

Các vấn đề liên quan