2012-01-10 28 views
25

Tôi có một cá thể tomcat với tham số JMXRemote được định cấu hình. Các VisualVM địa phương có thể lấy mẫu trên CPU, tuy nhiên, không cho bộ nhớ. Nút bộ nhớ chuyển sang màu xám với một bản tóm tắt nói: "Memory lấy mẫu:.. Không có sẵn Không thể kết nối để nhắm mục tiêu ứng dụng Hãy chắc chắn rằng các ứng dụng đang chạy trên một JDK 6 hoặc JDK 7 được hỗ trợ"VisualVM không thể lấy mẫu bộ nhớ

JMXRemote tham số:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9086 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Tomcat JDK phiên bản:

JDK1.6.0.30 

VisualVM phiên bản:

Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e 
System: Windows Server 2008 R2 (6.1) , amd64 64bit 
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode) 
Vendor: Sun Microsystems Inc., http://java.sun.com/ 
Environment: Cp1252; en_US (visualvm) 
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7 
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform 
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm 
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler 

Phiên bản Tomcat:

Tomcat 6.0.32 

Tôi đang chạy cả VisualVM và Tomcat tại máy chủ thắng 2008. Mọi thứ tôi đã làm sai?

+0

cua ... bạn nói đúng, tôi đăng thông tin sai. hãy để tôi kiểm tra nó một lần nữa với cùng một JDK – Reusable

+0

VisualVM là phiên bản rất cụ thể. Tôi cho rằng nó vẫn đang phát triển khá nhanh. –

+0

xem thêm http://stackoverflow.com/questions/726643/get-heap-dump-from-a-remote-application-in-java-using-jvisualvm – rogerdpack

Trả lời

1

Tôi sẽ kiểm tra phiên bản VisualVM chính xác giống với JVM.

VisualVM rất cụ thể cho từng phiên bản. Tôi cho rằng nó vẫn đang phát triển khá nhanh.

(Re gửi như một câu trả lời vì nó có thể là giải pháp)

0

tôi đã phải đối mặt với vấn đề tương tự với JVisualVM, Tôi thậm chí đã hỏi một câu hỏi về nó here

Một vài hiểu biết/tư vấn :

  1. Vì vậy, để lấy mẫu bộ nhớ bạn không cần tùy chọn jmx.
  2. Tôi sẽ kiểm tra lại xem bạn đã cài đặt jvms 64 bit cùng với jdks 32 bit trên cùng một máy (ngay cả khi chúng không chạy và tất cả các biến môi trường được xác định đúng), tôi đã đọc ở đâu đó các JVisualVM điên :) (có tôi biết nó không âm thanh hợp lý với chúng tôi, các nhà phát triển java)

  3. Nếu nó không hoạt động, chỉ cần gỡ cài đặt tất cả các jdks mà bạn có và cài đặt chỉ 1 mà bạn cần. Nó có thể giải quyết vấn đề.

Tôi hy vọng nó sẽ giúp bạn giải quyết vấn đề, sau khi tất cả như Peter nói những điều này là mới và phát triển

+0

1) nếu tôi xóa jmx, địa phương chỉ hiển thị 1 mục "VisualVM" trong bảng điều khiển ứng dụng VisualVM 2) chỉ có 1 JDK 1.6.0_26 và tôi nghĩ máy chủ kết hợp với JRE6 để bắt đầu. tôi đã cài đặt JDK 1.6.0_30 hôm nay để xem JDK mới có giúp được không. 3) tôi sẽ thử điều đó và xem điều gì xảy ra – Reusable

5

This blog post dẫn tôi để tin rằng các thư mục temp của JVisualVM và Tomcat cần phải được tương tự để lấy mẫu bộ nhớ hoạt động. Một trong các nhận xét về bài đăng:

thư mục tạm thời phải được đặt thành thư mục được JVisualVM sử dụng, có thể được tìm thấy từ tab thuộc tính hệ thống VisualVM (java.io.tmpdir). Khi tôi đã đặt thư mục CATALINA_TMPDIR đúng cách, điều này đã hoạt động rất tốt.

+1

để bộ nhớ hồ sơ trên một hộp điều khiển từ xa là ra khỏi câu hỏi? – rogerdpack

+0

Tôi tin rằng chỉ lấy mẫu CPU có thể được thực hiện từ xa. Để lấy mẫu bộ nhớ, bạn có thể thử chạy visualvm trên máy từ xa và sử dụng chuyển tiếp X11 để xem nó, nếu đó là khả năng. –

+0

Tôi đã cố gắng sắp xếp các thư mục tạm thời cho dịch vụ Tomcat Windows và visualvm cho cả C: \ Windows \ Temp nhưng tôi vẫn nhận được thông báo "Không được hỗ trợ cho JVM này" trong giao diện trực quan. –

6

Tôi đã gặp vấn đề tương tự trước đây. Bạn phải tải xuống phiên bản từ trang chủ jvisualvm, phải không? Đừng làm điều đó! Nếu bạn sử dụng jdk mới 1.7, VisualVM đã được đóng gói trong thư mục jdk của bạn. Sử dụng phiên bản này, bạn sẽ không gặp bất kỳ vấn đề nào với mẫu bộ nhớ.

+1

Điều đó đã làm cho tôi. Nếu sử dụng jdk 1.7 visualvm đã là một phần của jdk trong bin /.Điều này làm cho việc lấy mẫu bộ nhớ. – mwhs

0

Đây là giải pháp của tôi cho vấn đề tương tự: https://stackoverflow.com/a/16330238/715483

Bạn có thể giải quyết lỗi này bằng cách

$ ssh -Y user @ remotemachine

$ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_135.zip

$ unzip visualvm_135.zip

$ cd visualvm_135/bin

$ ./visualvm

Trường hợp hình ảnh này sẽ có đầy đủ tính năng, bao gồm bộ nhớ và lấy mẫu CPU.

đọc thêm về nó ở đây: http://shahriarinia.blogspot.com/2013/05/java-cpumemory-heap-usage-monitoring.html

http://mshahriarinia.com/

0

Hãy chắc chắn rằng bạn VirtualVM/JDK là một bản sao 32-bit nếu JRE của bạn. Nếu bạn đang sử dụng Eclipse, hãy kiểm tra JRE đã chọn trên phần JRE đã được cài đặt.

0

Và tôi có cùng một vấn đề.

Tôi luôn khởi chạy tomcat như một dịch vụ và kết nối nó với visualvm thông qua kết nối jmx.

Khi đã sửa catalina.bat:

set JAVA_OPTS=%JAVA_OPTS% 
    -Dcom.sun.management.jmxremote=true 
    -Dcom.sun.management.jmxremote.port=9090 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 

và phóng nó với startup.bat, VisualVM tự động xác định tomcat, và lấy mẫu bộ nhớ là tích cực.

0

Tôi có cùng một vấn đề nhưng với môi trường khác nhau. Máy chủ của tôi là một máy Linux, máy khách Windows 7, nhưng vấn đề là như nhau.

Giải pháp là khởi chạy jvisualvm trong cùng một máy và với cùng một người dùng đang chạy ứng dụng được nhắm mục tiêu. Nếu tôi chạy jvisualvm với người dùng khác (ví dụ: root) thì nút nhớ trở thành màu xám.

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