2009-10-13 26 views
11

Tôi đã dành 4 giờ đồng hồ cố gắng thiết lập bộ nhớ TPTP Eclipse lược tả trên một cá thể Tomcat phải chạy từ xa (tức là không ở Eclipse). Điều này có thể được thực hiện theo TPTP và Đại lý Tài liệu điều khiển.Java JVMTI không hoạt động cùng với -Xdebug -Xrunjdwp

Tôi đã cài đặt các thành phần TPTP (4.6.0) vào bàn làm việc Eclipse (Galileo) , cùng với Bộ điều khiển tác nhân theo hướng dẫn trên trang web. Để kích hoạt các đại lý, tôi đã thêm các tùy chọn sau để dòng lệnh mà bắt đầu dụ Tomcat:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true 

và thêm vào các thư mục sau vào phía trước của PATH:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler 
D:\dev\tools\ac\bin 

Khi cố gắng để bắt đầu Tomcat Tôi liên tục nhận được thông báo lỗi sau đây :

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279] 

Tôi đã làm rất nhiều Googling nhưng không tìm thấy gì liên quan nt; Tôi đã thử cài đặt lại TPTP và các phiên bản khác nhau của Trình điều khiển tác nhân.

Cuối cùng vấn đề bật ra được rằng tôi đã bắt đầu Tomcat với tùy chọn "jpda", mà catalina.bat chuyển thành

-Xdebug -Xrunjdwp:transport=..... 

Loại bỏ các "jpda" tranh cãi lệnh gây ra JVMTI để bắt đầu đang làm việc.

SO, câu hỏi là: Tôi không tìm thấy gì trong bất kỳ tìm kiếm nào của tôi tới cho biết rằng đại lý JVMTI không tương thích với gỡ lỗi. Có thể ai đó giải thích những gì đang diễn ra và tại sao JVMTI + JDWP không phải là thiết lập hợp lệ ?

Trả lời

20

Không có câu trả lời nào cho đến nay là chính xác và đây là lần truy cập đầu tiên xuất hiện trên Google nếu bạn truy vấn lỗi được đề cập, vì vậy tôi cảm thấy cần làm rõ.

JVMTI và JDWP làm làm việc cùng nhau, trên thực tế chúng thường phải được sử dụng cùng nhau. Bạn sẽ nhận được ERROR: JDWP unable to get necessary JVMTI capabilities nếu -Xrunjdwp (và/hoặc có thể -agentlib:jdwp) được chỉ định nhiều lần trên dòng lệnh. Để khắc phục, hãy đảm bảo bạn chỉ có một trong số -Xrunjdwp hoặc -agentlib:jdwp trong dòng lệnh của mình.

Để biết thêm chi tiết, hãy đọc tiếp ...

JVMTI (Java Virtual Machine Interface Tool) là sự kế thừa cho JVMDI (Java Virtual Machine gỡ lỗi Interface) và JVMPI (Java Virtual Machine Profiling Interface). Nó kết hợp chức năng của cả hai JVMDI và JVMPI, cả hai đều không được chấp nhận trong Java 5 và bị loại bỏ trong Java 6. Đây là API cho thấy các bên trong của JVM cho các mục đích gỡ lỗi và lược tả.

JDWP (Giao thức dây gỡ lỗi Java) là giao thức mô tả một cơ chế đơn giản để truyền lệnh và phản hồi. Theo như tôi biết, đó là cách duy nhất để một trình gỡ rối ngồi bên ngoài JVM để giao tiếp với nó và để giao tiếp với JVMTI.

JDI (Giao diện trình gỡ lỗi Java) là API phía máy khách (phía trình gỡ lỗi) hiển thị một số tính năng của JVMTI trong khi sử dụng JDWP nhiều hơn hoặc ít minh bạch hơn.

bug được đề cập trong câu trả lời của Bob Dobbs liên quan đến thông báo lỗi gây hiểu lầm và thực tế là JVM sẽ cố tải JDWP một lần cho mỗi lần được chỉ định trên dòng lệnh. Nó không nói bất cứ nơi nào mà JDWP và JVMTI không thể được sử dụng cùng nhau.

Thông tin thêm ở đây: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/jpdebuga.htm

+0

vì vậy, có thể sử dụng gỡ lỗi từ xa với lược tả cùng một lúc không? –

+1

@michael Tôi tin như vậy, nhưng trừ khi bạn đang cố gắng bắt chước một số điều kiện lạ trong nỗ lực tái tạo rò rỉ bộ nhớ hoặc tăng đột biến CPU khổng lồ, không định hình trong khi gỡ lỗi âm thanh như một ý tưởng tồi? –

+0

Câu trả lời hay. Đã nhận được lỗi này. Tôi đã phải vô hiệu hóa chế độ gỡ lỗi trên Sun App Server cổ xưa của tôi trước khi tôi có thể có được cấu hình Profiler YourKit để làm việc với nó. Cảm ơn bạn! – jlpp

3

Tôi đã gặp sự cố tương tự như bạn, nhưng tôi đã đưa ra báo cáo lỗi JVM (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345) đưa ra một số vấn đề về vấn đề này. Về cơ bản, nó đến thư viện agent của Java không bao giờ được dự định nạp hai lần vào cùng một máy ảo. Sucks, nhưng có vẻ như đó là hạn chế cơ bản của hệ thống đại lý mà bạn không thể làm cả hai cùng một lúc.

+0

Cảm ơn thông tin. –

1

Đối với tôi đó là vấn đề tương tự như Mã Bling bưu điện, họ trùng lặp -Xrunjdwp đã không nhận ra đã có một giây -Xrunjdwp như nó đã được giấu trong các biến %JAVA_OPTIONS%, kiểm tra ứng dụng của bạn Tập lệnh bắt đầu của máy chủ.

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