2012-12-24 29 views
6

Tôi đang sử dụng VisualVM để xem ứng dụng của tôi ở đâu chậm. Nhưng nó không hiển thị tất cả các phương thức, có thể không hiển thị tất cả các phương thức làm chậm ứng dụng.Tại sao không phải tất cả các phương thức được hiển thị trong trình lược tả VisualVM?

Tôi có ứng dụng thời gian thực (xử lý âm thanh) và thiếu thời gian trong vài trăm micro giây.

Có thể VisualVM ẩn các phương thức nhanh?

CẬP NHẬT 1

tôi thấy phương pháp chậm bởi sampler và đoán. Đó là phương thức toString() được gọi là từ quá trình ghi nhật ký gỡ lỗi đã bị tắt nhưng tốn thời gian.

Settings đã giúp và bây giờ tôi biết cách xem: tùy thuộc vào tùy chọn Start profiling from.

+0

Bạn đang sử dụng trình lấy mẫu hoặc hồ sơ? Các mẫu, mẫu tốt, tại một khoảng thời gian xác định. Profiler là chính xác hơn nhưng chậm hơn rất nhiều. –

+0

Ghi nhật ký gỡ lỗi tất cả nên được bao quanh với 'if (log.isDebugEnabled()) {' hoặc tương tự để tránh nối chuỗi và những thứ khác diễn ra trong các cuộc gọi nhật ký của bạn. –

+0

Xem thêm https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_1 và https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_2 để biết thêm thông tin về hồ sơ và cách đặt nguồn gốc và bộ lọc định vị. –

Trả lời

5

Tôi không có nó trước mắt, nhưng trước khi bạn bắt đầu lược tả, có một ngăn cài đặt ẩn theo mặc định và cho phép bạn nhập các regex để lọc ra các phương pháp. Theo mặc định, nó lọc ra rất nhiều công cụ JDK cốt lõi.

10

Khác với các bộ lọc được đề cập bởi Ryan Stewart, dưới đây là một vài lý do khác tại sao phương pháp có thể không xuất hiện trong các hồ sơ:

  • hồ sơ lấy mẫu vốn dĩ ngẫu nhiên: một mẫu của chồng hiện tại của tất cả các chủ đề được thực hiện mỗi N ms. Một số phương pháp thực sự được thực hiện nhưng không bị bắt gặp trong bất kỳ mẫu nào trong quá trình chạy của bạn sẽ không xuất hiện. Điều này thường không quá khó hiểu vì thực tế chúng không xuất hiện trong bất kỳ mẫu nào, có nghĩa là với xác suất rất cao, đây là những phương pháp không chiếm phần lớn thời gian chạy của bạn.
  • Khi sử dụng lấy mẫu dựa trên thiết bị đo đạc trong visualvm (được gọi là "cấu hình CPU"), bạn cần xác định điểm vào cho các phương thức lược tả (tùy chọn "Bắt đầu lược tả từ"). Tôi đã tìm thấy điều này không thành công cho các phương thức trong gói mặc định, và cũng sẽ không nhận thời gian trong các phương thức hiện đang chạy khi profiler được đính kèm (trong suốt thời gian gọi hiện tại - nó sẽ nhận được các lời gọi sau này.
  • Lấy mẫu có thể là một vấn đề nghiêm trọng có thể xảy ra với ngăn xếp dựa trên lược tả, đó là các mẫu chỉ được thực hiện tại các điểm an toàn trong mã. Trong một số trường hợp, bạn có thể có một điểm nóng trong mã của bạn mà không có phiếu thăm dò điểm an toàn (phổ biến cho các vòng lặp đơn giản mà JIT có thể đảm bảo chấm dứt sau một số cố định của các lần lặp), xen kẽ với một chút mã mà không có cuộc thăm dò an toàn. Ngăn xếp của bạn sẽ luôn hiển thị quy trình của bạn trong mã điểm an toàn, không bao giờ trong an toàn-poi nt mã miễn phí, mặc dù sau này có thể chiếm phần lớn thời gian của CPU.
+0

Tại sao các vòng lặp lại không làm gì? – Geek

+0

Các vòng có thể đếm được không có các điểm truy cập an toàn, theo mặc định, để giữ chúng nhanh chóng. Xem ví dụ: lỗi này: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6869327 để thêm cờ để tắt hành vi này (nhưng theo mặc định). – BeeOnRope

+0

Bạn cũng có thể thử trả lời [câu hỏi này của tôi] (http://stackoverflow.com/questions/17839933/what-are-safe-points-and-safe-point-polling-in-context-of-profiling? lq = 1) là kết quả của việc đọc câu trả lời của bạn. – Geek

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