2015-05-14 18 views
5

Ứng dụng web của chúng tôi đang chạy trong tomcat7 và chúng tôi đang sử dụng java 1.7.0_55 .... Trong quá khứ khi chúng tôi gặp sự cố, chúng tôi đã có thể gỡ lỗi trong môi trường phát triển bằng Eclipse và profiler (tên trốn thoát tôi vào lúc này).Làm thế nào để gỡ lỗi một lỗi OutOfMemory heap java trong một môi trường sản xuất?

Bây giờ chúng tôi đang nhận được ngoại lệ OutOfMemory trong môi trường sản xuất của mình. Tôi khá ngại khi chạy một profiler trong môi trường sản xuất nên câu hỏi của tôi là ... Có cách nào để gỡ rối vấn đề này trong môi trường sản xuất mà không cần sử dụng profiler hay không. nó trong sản xuất?

Trả lời

2

Chỉ cần lấy một đống lưu trữ của máy chủ sản xuất & phân tích nó bằng công cụ phân tích bộ nhớ Eclipse. Bạn có thể sao chép heapdump vào địa phương của bạn. Eclipse Memory Analyzer là công cụ tốt nhất cho công việc này. Tuy nhiên, cố gắng để có được giao diện người dùng để chạy từ xa là rất đau đớn. Khởi chạy Eclipse và cập nhật giao diện người dùng là một tải phụ trên JVM đã bận rộn phân tích một vùng lưu trữ 30G. May mắn thay, có một kịch bản đi kèm với MAT để phân tích cú pháp khối đống và tạo ra các báo cáo HTML mà không cần phải khởi chạy Eclipse!

Check this out.

-2

Đặt giới hạn Xmx cao hơn.

-Xmx2048M hoặc cao hơn nếu cần.

1

Nếu bạn muốn hồ sơ ứng dụng của mình vào sản xuất, bạn có thể sử dụng jConsole cho biểu đồ thực từ hệ thống sản xuất của bạn. Nếu bạn có thể trả tiền, bạn nên thử jProfiler (https://www.ej-technologies.com/products/jprofiler/overview.html). Nó thực sự hữu ích cho việc bán phá giá dữ liệu của JVM trên môi trường sản xuất.

1

Nếu bạn là rất nhiều mối quan tâm với chạy một hồ sơ trong môi trường sản xuất chạy -histo jmap: live pid

histogram là tóm tắt của heap, trọng lượng rất Lite của nó và sẽ mất rất ít thời gian để tạo ra dữ liệu cho bạn. Điều này sẽ được sử dụng tốt nếu bạn không có HeapDumpOnOutOfMemoryError không được thiết lập.

Nó luôn luôn tốt hơn để có một đống đống trên OOME Java cung cấp một chuyển đổi hệ thống để làm điều này bằng cờ -XX: + HeapDumpOnOutOfMemoryError này sẽ tạo tệp kết xuất đống.

Tệp kết xuất tệp chứa tất cả các thông tin liên quan đến đối tượng trong đó. Nó có thể dễ dàng được phân tích bằng cách sử dụng jhat. Điều này sẽ mở tệp kết xuất và phân tích dữ liệu và nghe một cổng sẽ được hiển thị trong bảng điều khiển.

Nếu nhật ký GC được định cấu hình, hãy xem nhật ký GC và xác định thời gian từ khi mức tiêu thụ bộ nhớ tăng đáng kể. Từ nhật ký, hãy thử xác định các hành động được thực hiện/yêu cầu được xử lý bởi tomcat của bạn, đi qua mã và cố gắng xác định xem có bất kỳ rò rỉ bộ nhớ nào gây ra trong mã không. Bạn có thể sử dụng biểu đồ dưới dạng tham chiếu vì histo cũng cung cấp các đối tượng.

Nếu bạn đang sử dụng một số bộ nhớ cache trong ứng dụng của bạn kiểm tra kích thước tối đa cấu hình cho bộ nhớ cache là gì, hoặc là bộ nhớ cache sẽ bị xóa đều đặn ....

Hy vọng điều này là hữu ích.

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