2009-08-07 39 views
5

Một trong những khách hàng của chúng tôi có một vấn đề mới: ứng dụng sẽ dừng lại. Kết xuất chuỗi cho thấy tất cả các luồng đang treo trên mạng IO trong các cuộc gọi JDBC.Kết nối JDBC treo

Chúng tôi/tôi chưa bao giờ thấy các 'mạng IO' này bị treo. Thông thường một máy chậm với các vấn đề DB có hoặc là một) một hoặc hai truy vấn dài hạn hoặc b) một số loại khóa/bế tắc. Trong một trong các trường hợp này, luồng được treo trên các phương thức khác nhau. Tôi chưa bao giờ thấy tất cả hơn 30 chủ đề treo trên mạng IO.

Dưới đây tôi đã bao gồm một đoạn trích từ kết xuất chuỗi. Tất cả chuỗi HTTP đang treo trên cùng một cuộc gọi java.net.SocketInputStream.read.

Tôi đã nói chuyện với dba và sysadmin của họ. Theo họ 'không có gì thay đổi' trong môi trường gần đây sẽ gây ra vấn đề này.

môi trường db

MSSQL 2005 64-bit Service Pack 2 Driver: sqljdbc.jar: 1,0 809 102

Lưu ý: họ đang chạy một trình điều khiển JDBC cũ. AFAIK họ đã cố nâng cấp từ 1.0 lên trình điều khiển 1.2 nhưng có một số vấn đề khác.

môi trường khác phát

Họ đang chạy cả máy chủ ứng dụng và máy chủ db trong VMWare của VM. Tôi không biết cách thiết lập này ảnh hưởng đến hiệu suất mạng như thế nào.

Rõ ràng đây là ứng dụng duy nhất có vấn đề này. Tôi không biết gì khác về kiến ​​trúc mạng của họ.

Câu hỏi * mọi thông tin chi tiết về vấn đề này? * nếu đó là mạng, mọi bước tiếp theo để phân tích?

Phụ lục A: Trích từ bài viết đổ

Tất cả các kết nối HTTP đang treo trên cùng một phương pháp:

 
"TP-Processor31" daemon prio=5 tid=0x04085b78 nid=0x970 runnable [0x0764d000..0x0764fd6c] 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.IOBuffer.sendCommand(Unknown Source) 
    - locked (a com.microsoft.sqlserver.jdbc.DBComms) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source) 
+0

Tôi đã thấy các nội dung như vậy nếu kết nối đi qua cổng NAT ngớ ngẩn – nos

Trả lời

8

Chúng tôi đã có vấn đề tương tự, và bắt nguồn từ họ trở lại một lỗi JDK cập nhật (1.6.29).

Chúng tôi đã tải xuống 1.6.27 (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR), lại -Thiết lập môi trường JAVA_HOME và chúng tôi đã trở lại đúng hướng.

+2

Cảm ơn bạn rất nhiều vì câu trả lời chính xác. Chúng tôi đã có cùng một vấn đề, chúng tôi theo dõi nó để ping một hồ bơi kết nối JDBC trong Glassfish mà treo mà không có bất kỳ thông báo lỗi. Hoàn nguyên về 1.6.27 giải quyết vấn đề. Cảm ơn bạn –

+0

Chúng tôi đã gặp sự cố tương tự. Hạ cấp sẽ sửa nó. –

2

Đây là những thay đổi đối với JSSE trong phiên bản 1.6 u29. Thay đổi này là để vá một phần CVE-2011-3389CVE-2011-3560.

Nếu không triển khai các ứng dụng và sử dụng java web-start. Bạn có thể chỉ sử dụng 1,6 u27 jsse.jar. Bạn vẫn sẽ có lỗ hổng, nhưng nó sẽ cho phép sqljdbc.jar và sqljdbc4.jar hoạt động.

Các tùy chọn khác để di chuyển sang Java 7, sqljdbc4.jar hoạt động trong môi trường đó.

Bản vá chưa hoàn chỉnh. Vì vậy, mong đợi nhiều thay đổi hơn trong các bản vá lỗi trong tương lai.

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