2010-07-03 25 views
6

Tôi có một trường hợp Tomcat được trưng bày các hành vi sau đây:Làm thế nào để điều tra thu thập quá java rác

  • Chấp nhận một http request đến duy nhất.
  • Đưa ra một yêu cầu tới máy chủ phụ trợ và lấy lại khoảng 400kb XML.
  • Chuyển qua XML này và chuyển đổi nó thành khoảng 400kb JSON.
  • Trả lại phản hồi JSON.

Vấn đề là trong quá trình xử lý yêu cầu 400k, webapp của tôi tạo ra khoảng 100mb rác tràn đầy không gian Eden và kích hoạt bộ sưu tập thế hệ trẻ.

Tôi đã cố gắng sử dụng chức năng hprof java được xây dựng để làm các trang web phân bổ hồ sơ nhưng Tomcat dường như không khởi động đúng với điều đó tại chỗ. Có thể là tôi hơi thiếu kiên nhẫn khi tôi hình dung hồ sơ cấp phát bộ nhớ có chi phí cao và do đó việc khởi động tomcat có thể mất một thời gian dài

Các công cụ tốt nhất để sử dụng để làm hồ sơ bộ nhớ java của các đối tượng rất trẻ/rác? Tôi không thể sử dụng đống bãi vì các đối tượng tôi quan tâm là rác.

Trả lời

1

Bạn có thể sử dụng profiler trong jvisualvm trong JDK để làm hồ sơ bộ nhớ.

Ngoài ra, hãy xem Mẫu để lưu bộ nhớ cache biến áp XSLT.

http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/Templates.html

+0

Jvisualvm profiling là khó khăn như máy chủ tomcat của tôi chạy trên Linux và tôi thà tránh ovehead của việc nó chạy trên cửa sổ nơi tôi làm phát triển của tôi hoặc cài đặt một hộp Linux gui. – mchr

+2

Cài đặt JDK tương ứng trên Linuxbox và chuyển hướng jvisualvm để sử dụng máy chủ X11 chạy trên hộp windows của bạn. Xming trực tiếp trên máy, hoặc Knoppix chạy trong một phiên vmware, hoạt động rất độc đáo. –

+2

Cũng lưu ý rằng nếu bạn thêm voodoo thích hợp vào lời gọi JVM Tomcat, jvisualvm có thể kết nối từ Windowsbox của bạn mà không cần thêm adieu. –

0

Bạn sẽ có thể nhận được khối đống để hoạt động bằng cách gỡ lỗi ứng dụng, đặt điểm ngắt tại điểm chính của mã và tạo vùng lưu trữ trong khi ứng dụng bị tạm dừng tại mỗi điểm ngắt.

+0

Tôi nghi ngờ rác là ngắn ngủi trong trường hợp đó sẽ là cực kỳ khó khăn để phát hiện những bit nếu bộ nhớ mới được phân bổ. Tôi lý tưởng muốn một cái gì đó như profiling bộ nhớ hình ảnh vm mà tôi có thể chạy một lần nữa quá trình tomcat của tôi trên máy chủ Linux của tôi. – mchr

0

Bạn có thể muốn thử LambdaProbe, đó là một hồ sơ cho Tomcat. Nó hỗ trợ như sau:

Tổng quan Lambda Probe

(trước đây là Probe Tomcat) là một tự cung tự cấp ứng dụng web, giúp hình dung thông số khác nhau của Apache Tomcat dụ trong thời gian thực. Lambda Probe được thiết kế để làm việc đặc biệt với Tomcat vì vậy nó có thể truy cập nhiều thông tin hơn mà thường có sẵn cho các tác nhân JMX. Dưới đây là danh sách các tính năng có sẵn qua Đầu dò Lambda:

  • Mới! Sử dụng bộ nhớ JVM toàn diện màn hình.
  • JBoss tương thích
  • hiển thị các ứng dụng được triển khai, tình trạng của họ, thì số phiên, phiên đếm đối tượng, số lượng đối tượng bối cảnh, sử dụng nguồn dữ liệu, vv
  • Bắt đầu, dừng lại, khởi động lại, triển khai và updeploy các ứng dụng
  • Khả năng xem tệp JSP được triển khai
  • Có khả năng biên dịch tất cả hoặc chọn tệp JSP bất kỳ lúc nào.
  • Khả năng biên dịch trước các tệp JSP trên triển khai ứng dụng.
  • Mới! Khả năng xem tự động tạo ra JSP servlet
  • Hiển thị danh sách các phiên cho một ứng dụng cụ thể
  • hiển thị các thuộc tính phiên và giá trị của họ cho một ứng dụng cụ thể. Khả năng xóa thuộc tính phiên.
  • Khả năng xem ngữ cảnh ứng dụng thuộc tính và giá trị của chúng.
  • Khả năng sắp hết hạn phiên được chọn
  • hiển thị đồ họa của nguồn dữ liệu chi tiết bao gồm số lượng tối đa kết nối, số bận rộn kết nối và chi tiết cấu hình
  • Mới! Khả năng nhóm nguồn dữ liệu tính bằng URL để giúp hình dung tác động đối với cơ sở dữ liệu
  • khả năng để thiết lập lại các nguồn dữ liệu trong trường hợp của các ứng dụng bị rò rỉ kết nối
  • Hiển thị thông tin hệ thống bao gồm System.properties, bộ nhớ thanh sử dụng và hệ điều hành các chi tiết về
  • hiển thị của JK tình trạng kết nối bao gồm danh sách các yêu cầu cấp phát thực hiện
  • Real-time bảng xếp hạng sử dụng kết nối và thống kê.
  • Theo dõi cụm theo thời gian thực và biểu đồ lưu lượng truy cập clulster
  • Mới! Thời gian thực sử dụng bộ nhớ hệ điều hành, trao đổi sử dụng và sử dụng CPU theo dõi
  • Khả năng hiển thị thông tin về log tập tin và tải về chọn file
  • Khả năng file đuôi log trong thực thời gian từ một trình duyệt.
  • Khả năng gián đoạn thực hiện các yêu cầu "treo" không có máy chủ khởi động lại
  • Mới! Khả năng khởi động lại Tomcat/JVM qua Java Serview Wrapper.
  • Availability "Kiểm tra nhanh"
  • Hỗ trợ cho DBCP, C3P0 và Oracle datasources
  • Hỗ trợ cho Tomcat 5.0.x và 5.5.x
  • Hỗ trợ Java 1.4 và Java 1,5
2

Như cho vấn đề thực tế: phân tích cú pháp XML có thể rất hoán đổi bộ nhớ khi sử dụng trình phân tích cú pháp dựa trên DOM. Cân nhắc sử dụng trình phân tích cú pháp dựa trên đó SAX hoặc binary XML dựa trên (là một API Java).

Trên thực tế, nếu ánh xạ XML-> JSON là thuần túy 1: 1, thì bạn cũng có thể xem xét chỉ đọc XML và viết dòng thời gian thực JSON bằng cách sử dụng một ngăn xếp nhỏ.


Quay lại câu hỏi: Tôi đề nghị sử dụng VisualVM cho việc này. Bạn có thể tìm thấy here một bài viết trên blog về cách làm cho nó hoạt động với Tomcat.

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