2011-08-23 27 views
13

Như tôi đã đăng trong Performance drop after 5 days running web application, how to spot the bottleneck?, tôi gặp sự cố với một ứng dụng bị chậm sau khi chạy trong một thời gian.Làm thế nào để sử dụng VisualVM để phát hiện các nút cổ chai/vấn đề

Tôi đã chạy VisualVM và tạo ảnh chụp nhanh giữa các thời điểm khác nhau. Bây giờ ứng dụng thực sự chậm, nhưng tôi không có ý tưởng làm thế nào để phát hiện các nút cổ chai. Họ không có nhiều sự khác biệt giữa nhau và điều duy nhất phát triển một chút là Heap, đó là rác thải thành công được thu thập sau một thời gian.

Có ai có thể cho tôi một số gợi ý không?

Dưới đây là các bức ảnh chụp (ứng dụng):

[1] http://www.2shared.com/file/W4XJ6HtE/application-1314108550032.html

[2] http://www.2shared.com/fadmin/22521338/f512f97e/application-1314097232727.apps.html

Cảm ơn bạn!

EDIT: Nhìn gần hơn, tôi đã nhận thấy rằng CPU thậm chí không được sử dụng nhiều .. và hệ thống thực sự chậm!

+0

Trong ảnh chụp thứ hai (mà đi hơn một giờ trong khi người đầu tiên đi qua 4 giây chỉ) có một số tải trên CPU và gần không tải tạo bởi GC. Nếu CPU là nút cổ chai, bạn nên cố gắng để cấu hình những phương pháp đang gây ra điều này. Bạn cũng có thể làm điều này trong jvisualvm. – ziggystar

+0

Máy chủ ứng dụng đang chạy ứng dụng nào? Nó đằng sau một máy chủ web front-end? Nếu có, làm thế nào là 2 kết nối (mà mô-đun). – atrain

Trả lời

4

Thực ra, có một số công cụ tốt hơn so với VisualVM.

Bạn có thể thử JProfiler, đó là một hồ sơ đẹp (nhưng trả tiền)

Và bạn có thể thử các hồ sơ Netbeans, đó là miễn phí và hoạt động tuyệt vời

Với VisualVM bạn sẽ chỉ nhìn thấy tình trạng thực tế ứng dụng của bạn (bộ nhớ và cách sử dụng CPU, JMX, các lớp được tải, v.v.).

+3

Có các công cụ tốt hơn; nhưng điều này không có nghĩa là bạn cần chúng trong trường hợp này (những gì tôi hiện không thể đánh giá). JvisualVM cũng bao gồm một profiler (cả dụng cụ và lấy mẫu) và một bộ nhớ hồ sơ. Ngoài ra, bạn có thể cài đặt các plugin bổ sung. – ziggystar

+0

@ziggystar Điều cần biết, không biết điều đó! –

6

Bước đầu tiên tôi đề nghị xác định chính xác những gì chậm. Liệu nó thực hiện một số công việc từ từ? Hoặc thể hiện thông lượng thấp về xử lý công việc từ các khách hàng khác nhau?

Tài nguyên nào không đủ điều kiện?

  • Nếu bạn đang sử dụng một số dịch vụ bên ngoài (như cơ sở dữ liệu hoặc máy chủ RPC) luôn đăng nhập thời gian đáp ứng của họ và kiểm tra xem nó trước khi thực hiện bất kỳ bước tối ưu hóa khác.
  • Có thể do thiếu bộ xử lý. Chỉ cần nhìn vào cách sử dụng CPU.
  • Có thể thiếu bộ nhớ. Sử dụng ghi nhật ký gc để phát hiện các loại sự cố như vậy. Có một số good topic về nó.
  • Có thể do thiếu tốc độ ổ cứng. Sử dụng iostat và biết giới hạn hiệu suất HDD của bạn.
  • Có thể do thiếu thông lượng mạng. Kiểm tra mức sử dụng kênh mạng.
  • Cũng có thể bạn đã hết một số giới hạn dành riêng cho hệ điều hành, như số lượng tệp đã mở và/hoặc ổ cắm mạng. Kiểm tra xem bạn có báo cáo đúng tất cả ngoại lệ cấp hệ điều hành vào các tệp nhật ký hay không.

Vì bạn đã xác định tài nguyên nào không đủ và một phần chương trình của bạn gặp phải vấn đề này, bạn có thể thử tìm đoạn mã để tối ưu hóa. Lấy một công cụ ngẫu nhiên và chạy ứng dụng của bạn thông qua nó mà không biết phải tìm kiếm cái gì thì không có ý nghĩa gì cả.

Từ kinh nghiệm cá nhân của tôi, trường hợp rất hiếm khi bạn chỉ có một phương pháp chậm, có thể được tìm thấy với một hồ sơ.Nhiều khả năng nó là một IO bất ngờ và/hoặc đồng bộ hóa một nơi nào đó trong thuật toán của bạn hoặc lược đồ cơ sở dữ liệu xấu.

0

Tôi sẽ không giả sử quyền sử dụng ứng dụng của bạn, Nếu hệ thống cửa sổ dựa trên máy quét vi-rút, bất kỳ trình lập lịch cập nhật nào đang chạy vào thời điểm đó.

Đảm bảo nhật ký của bạn đang được cuộn và gỡ lỗi được lọc đúng cách để chúng không bị mất kiểm soát.

Kiểm tra ảnh chụp nhanh sql cho bất kỳ truy vấn chạy dài nào. Kiểm tra tải DB và DB đống.

Nếu bạn có Visual VM chạy trong một thời gian đảm bảo rằng bạn có một số chủ đề sẵn sàng chấp nhận công việc/kết nối sẽ hiển thị dưới dạng màu vàng (không hoạt động).

Một shot trong bóng tối Eclipse Memory Analyzer

Hãy đống đổ khi bạn nhận thấy một sự suy giảm và chạy nó thông qua việc phân tích.

Nếu bạn sử dụng mô tả tập tin kiểm tra hệ thống dựa trên unix, hãy đảm bảo rằng quá trình java chưa tối đa.

Kiểm tra các thiết lập giới hạn TCP NO Delay và Nagle trên máy chủ

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