2012-07-02 24 views
9

Chúng tôi có vấn đề sau: Trên số của máy Linux, ứng dụng Java sử dụng thư viện tro và G1 GC sẽ gặp sự cố khá nhanh với các thông báo sau:JVM Crash với G1 GC và thư viện trojan

A fatal error has been detected by the Java Runtime Environment: 

SIGSEGV (0xb) at pc=0x00002aaaaaef81d1, pid=31063, tid=1141000512 

JRE version: 6.0_29-b11 
Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64) 
Problematic frame: 
J gnu.trove.impl.hash.TObjectHash.insertKey(Ljava/lang/Object;)I 

Điều gì khiến tôi ở đây là khung có vấn đề, luôn luôn giống nhau. Tôi đã quen với một số thư viện xuất hiện ở đây, nhưng không bao giờ là mã Java. Kỳ lạ thay, một số máy cần phải có một thiết lập giống hệt nhau sẽ không bị ảnh hưởng. Trên Windows, tôi cũng chưa bao giờ thấy điều này. Vấn đề vẫn tồn tại với các phiên bản Java 7 gần đây. Chuyển từ G1 GC sang bất kỳ GC nào khác sẽ giải quyết vấn đề ngay lập tức. Chúng tôi sử dụng thư viện trove như được giải quyết bởi Maven, đã thử một số phiên bản ở đó, bao gồm 3.0.3 - luôn luôn là cùng một vấn đề.

Có ai biết điều gì có thể là lý do cho điều này? Bất kỳ lỗi G1 GC nào đã biết? Là trove biên soạn một cách đặc biệt mà có thể tạo ra vấn đề này?

Cập nhật: ứng dụng khác nhau, máy chủ khác nhau, gần đây nhất Java (7u5), vấn đề tương tự:

A fatal error has been detected by the Java Runtime Environment: 

SIGSEGV (0xb) at pc=0x00002aadb7a38093, pid=14100, tid=46925573367184 

JRE version: 7.0_05-b05 
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode linux-amd64 compressed oops) 
Problematic frame: 
J gnu.trove.map.hash.THashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 

Một lần nữa, chuyển sang một GC khác hơn G1 sẽ giúp. Giữ G1 nhưng thoát khỏi thư viện Trove, và vấn đề cũng sẽ biến mất. Rất tiếc, tôi không thể tạo một bộ thử nghiệm tối thiểu, do đó rất khó để gửi báo cáo lỗi hợp lý. Bất kỳ ý tưởng về nguyên nhân, hoặc bất kỳ ý tưởng nào có thể giúp tôi xây dựng bộ thử nghiệm?

+0

Bạn đang sử dụng VM nào - OpenJDK hoặc Oracle? Có sự khác biệt tùy thuộc vào cái bạn sử dụng không? Có một sự khác biệt trong bitness (64/32 bit) trên những máy này? – berry120

+1

Bạn có thể bao gồm sự cố từ bản cập nhật Java 7 5 để hiển thị sự cố của nó không? –

+0

Tất cả các phiên bản được chúng tôi sử dụng là Oracle 64bit. Phiên bản mới nhất mà chúng tôi thấy vấn đề này là Java 7u4. Rất tiếc, phiên bản này phải được xóa khỏi hệ thống của chúng tôi do lỗi nghiêm trọng được mô tả tại đây: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7166379 và tại đây: https://forums.oracle.com /forums/thread.jspa?messageID=10351215�. Theo tôi hiểu, lỗi này chưa được sửa trong 7u5, điều này hạn chế tối đa chúng tôi. 7u3 ngay bây giờ. Tôi sẽ xem liệu tôi có thể cài đặt 7u5 tạm thời trên một trong các hệ thống bị ảnh hưởng và báo cáo lại hay không. – malamut

Trả lời

3

Dường như đây thực sự là lỗi JDK, https://bugs.openjdk.java.net/browse/JDK-8023472, được sửa bởi bản cập nhật Java 7 65+.

+0

Chúng tôi chưa bao giờ sử dụng bản phát hành Java cụ thể đó, nhưng tôi có thể xác nhận rằng sự cố được khắc phục trong Bản cập nhật Java 8 45. Vì vậy, tôi đoán đó thực sự là thủ phạm. Cuối cùng! :) – malamut

3

G1GC không phải là "sẵn sàng để sử dụng" trong Java 6; Nó chỉ trong Java 7u4 mà cuối cùng nó đã trở thành sản xuất đã sẵn sàng. Xem http://phosphor-escence.blogspot.com/2012/05/java7u4-enables-g1gc-without.html để biết ghi chú trên đó và tất nhiên là có nhiều hơn trên Google.

+2

"Sự cố vẫn tiếp diễn với các phiên bản Java 7 gần đây". – berry120

+0

Bleah, bạn nói đúng - tôi đã bỏ lỡ điều đó trong bài đăng gốc. Vâng, tôi sẽ gửi một lỗi về trình theo dõi lỗi của oracle, và ... sử dụng một GC khác, tôi đoán, hoặc sử dụng một cái gì đó khác hơn là trove. Tôi đoán khi tôi nhìn thấy JRE 6 trong đó, nó không xảy ra với tôi rằng ai đó sẽ * thích * 6 trên 7 trừ khi họ bị mắc kẹt trên đó. –

+0

Chắc chắn, có thể điều tốt nhất cần làm là chuyển sang một GC khác trong thời gian này và gửi một lỗi với Oracle. Mặc dù vấn đề thú vị. – berry120

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