Lược tả các ứng dụng Java khi sử dụng Rational Application Developer của IBM

Giới thiệu về cách sử dụng chức năng lược tả của Rational Application Developer để lược tả các ứng dụng Java tại chỗ và từ xa

Hướng dẫn này đưa ra cho bạn lời khuyên về cách sử dụng Rational® Application Developer (Nhà phát triển ứng dụng Rational) của IBM® để lược tả các ứng dụng Java của bạn. Đến cuối bài viết này, hướng dẫn này trước tiên sẽ cung cấp nền tảng liên quan đến chức năng tác nhân lược tả Java™ (JVMTI-Giao diện công cụ máy ảo của Java) của Eclipse Test của Performance Tools Project (TPTP-Dự án công cụ hiệu năng và thử nghiệm Eclipse).

Charu Jain, Nhà phát triển phần mềm, IBM

Charu Jain đã là một nhà phát triển phần mềm tại phòng thí nghiệm phần mềm Toronto IBM từ năm 2006. Trong thời gian này tại IBM, cô đã làm việc với một số nhóm phát triển, bao gồm cả Trình biên dịch XL C/C++ của IBM, Nền tảng các công cụ mô tả và thử nghiệm Rational và Phần mềm quản lý nội dung doanh nghiệp của IBM. Cô có bằng Thạc sỹ khoa học máy tính của Đại học Simon Fraser.



Jonathan West, Nhà phát triển phần mềm, IBM

Jonathan West là một nhà phát triển phần mềm với Rational của IBM trong phòng thí nghiệm Toronto IBM và là một phần của nhóm Các công cụ mô tả và thử nghiệm Rational. Anh là một ủy viên của dự án Nền tảng công cụ hiệu năng và thử nghiệm Eclipse (TPTP) và đưa ra khả năng lãnh đạo thành phần và kỹ thuật cho thành phần của Trình điều khiển tác nhân TPTP và tác nhân lược tả Java dựa trên JVMTI. Jonathan có bằng Cử nhân khoa học về Khoa học Máy tính của Đại học Western Ontario.



20 09 2011

Tổng quan

Sự tiến bộ về công nghệ đang diễn ra, trong cả hai công nghệ công suất xử lý và công nghệ lưu trữ, đã đưa lại một số công nghệ mới và thú vị. Những công nghệ này đổi hiệu năng ứng dụng thuần túy lấy các mối quan tâm hạng hai, ví dụ như hiệu quả của lập trình viên hoặc tính linh hoạt của hệ thống. Trong số chúng là các công nghệ như các ngôn ngữ được biên dịch chỉ theo thời gian có thu thập dữ liệu rác như Java™ và sự lan tỏa rộng lớn hơn của công nghệ ảo hóa toàn hệ thống.

Khi công suất và tốc độ xử lý của máy tính nhanh chóng phát triển lớn hơn và các chi phí trên một đơn vị công suất xử lý tiếp tục đi xuống, thì có vẻ dường như là yêu cầu hiệu quả của ứng dụng riêng có vẻ như đang giảm bớt. Tuy nhiên, ngay cả những ứng dụng nhỏ nhất có thể vấp phải các vấn đề hiệu năng khi được áp dụng trên một số lượng người dùng đủ lớn. Ngoài ra, các ứng dụng lớn nhất có thể là nạn nhân của các tình trạng thắt cổ chai khó chịu và các chỗ rò bộ nhớ làm tổn thương đến tính sẵn sàng của ứng dụng, làm yếu khả năng sử dụng do các vấn đề thời gian nạp trang và tiềm ẩn yêu cầu nâng cấp tốn kém ở nơi có đủ các bản vá lỗi mã.

Việc tạo công cụ lược tả của Rational® Application Developer của IBM® và Rational® Software Architect (Kiến trúc sư phần mềm Rational) của IBM® cung cấp các công cụ tinh vi mà các nhà phát triển có thể sử dụng để nhận biết và làm giảm bớt các vấn đề hiệu năng này. Cả hai sản phẩm đóng gói các công cụ lược tả được mô tả trong hướng dẫn này; tuy nhiên, trong khi chức năng và các tính năng đã có sẵn trong cả hai sản phẩm, thì hướng dẫn này tập trung vào Rational Application Developer. Chức năng lược tả dựa vào tác nhân lược tả Java™ JVMTI (Giao diện công cụ máy ảo của Java) của TPTP (Dự án công cụ hiệu năng và thử nghiệm) của Eclipse nguồn mở, có nhiều thông tin có sẵn về chúng trong phần Tài nguyên.

Nền tảng lược tả Rational Application Developer cung cấp ba sự phân tích khác nhau về hành vi của ứng dụng:

  • Phân tích cách sử dụng-bộ nhớ.
  • Phân tích thực hiện mức-phương thức.
  • Phân tích luồng.

Tích hợp cài sẵn với các kiểu khởi chạy của Rational Application Developer hiện có làm cho việc lược tả ứng dụng của bạn cũng dễ dàng như khi chọn biểu tượng lược tả đồng hồ đếm giờ, và sau đó chọn các cấu hình khởi chạy Run/Debug (Chạy/Gỡ lỗi) hiện có từ danh sách khởi chạy. Tuy nhiên, khi ứng dụng được lược tả của bạn đã khởi chạy và dữ liệu đã bắt đầu được thu gom, thì việc biết rõ các thuật ngữ và khái niệm về lược tả ứng dụng sẽ có ích trong việc nhận được nhiều chức năng nhất ngoài chức năng lược tả.

Hướng dẫn này cung cấp cho bạn lời khuyên về cách sử dụng Rational Application Developer để lược tả các ứng dụng Java của bạn. Cuối cùng, hướng dẫn này trước tiên sẽ cung cấp nền tảng liên quan đến chức năng của Các công cụ hiệu năng.


Giao diện và kiến trúc tác nhân của JVMTI

Trình lược tả (profiler) Java của Rational Application Developer bao gồm một tập hợp các tác nhân nguyên gốc được triển khai thực hiện thông qua giao diện JVMTI của máy ảo (Virtual Machine) Java. Giao diện JVMTI là một giao diện chuẩn cho phép các thư viện nguyên gốc (được gọi là các tác nhân) để kiểm soát một máy ảo (VM) đang chạy và thu về thông tin ứng dụng Java đang chạy. Một tác nhân JVMTI thu thập các sự kiện JVM (và nếu cần thiết, cả mã byte của lớp công cụ), để đảm bảo rằng nó được thông báo về tất cả các sự kiện lược tả khi ứng dụng Java chạy trên máy ảo đó.

Trình lược tả đăng ký các hàm nguyên gốc của nó thông qua giao diện JVMTI: các hàm này được máy ảo Java gọi khi các sự kiện đã đăng ký xuất hiện. Với tác nhân lược tả Java của Rational Application Developer, dữ liệu lược tả được tạo ra theo thời gian thực. Đó là do tác nhân không chờ cho đến khi ứng dụng đã chạy xong để cung cấp và đưa ra dữ liệu đó. Sản phẩm này hỗ trợ các tác nhân để thu thập thông tin về ba chiều được liệt kê trước đó.

Một lưu ý quan trọng: Trình lược tả Java JVMTI của Rational Application Developer không phải là một trình lược tả (profiler) dựa theo mẫu và như vậy, tất cả các sự kiện máy ảo Java chưa được lọc bằng các bộ lọc lược tả sẽ được truyền trở lại bàn làm việc. Phương thức lược tả này bảo đảm một mức độ chính xác cao, nhưng phải trả giá bằng chi phí hoạt động lược tả lớn hơn so với lược tả dựa theo mẫu.

Các tác nhân lược tả

Các tác nhân lược tả được thực hiện cùng với máy ảo Java (và bên trong tiến trình của máy ảo Java) khi mà máy ảo Java được chạy với các đối số máy ảo cụ thể-JVMTI. Khi các tác lược tả chạy, chúng thu thập dữ liệu từ máy ảo Java dưới dạng các sự kiện thực hiện, vùng lưu trữ đặc biệt (heap là vùng lưu trữ đặc biệt trong bộ nhớ để lưu giữ các tài liệu quan trọng-sau đây gọi tắt là vùng lưu trữ đặc biệt) hoặc luồng. Trong khu vực lược tả của Rational Application Developer, các tác nhân này được gọi là các tác nhân Phân tích thực hiện, Phân tích Vùng lưu trữ đặc biệt và Phân tích luồng.

  • Tác nhân Phân tích thực hiện (Execution Analysis agent) được sử dụng để thu thập các số liệu thống kê thực hiện, chẳng hạn như thời gian sử dụng trong mỗi phương thức, số lượng các cuộc gọi phương thức và biểu đồ gọi tổng thể.
  • Tác nhân Phân tích Vùng lưu trữ đặc biệt (Heap Analysis agent) được sử dụng để tạo các số liệu thống kê sử dụng bộ nhớ. Nó thu thập các thông tin chi tiết cấp cho đối tượng, ví dụ như các cá thể đang hoạt động và kích cỡ hoạt động trong bộ nhớ.
  • Tác nhân Phân tích luồng (Thread Analysis agent) được sử dụng để thu nhận các thông tin chi tiết về các luồng do các ứng dụng Java sinh ra và để theo dõi việc sử dụng đối tượng giám sát và tranh chấp trong suốt ứng dụng đích.

Để tạo điều kiện thuận lợi cho việc khởi chạy tác nhân và giao tiếp tác nhân-khách, việc tạo công cụ lược tả sử dụng một thành phần thứ hai gọi là Trình điều khiển tác nhân để cho phép các tác nhân giao tiếp với bàn làm việc. Thành phần này được đóng gói sẵn trong Rational Application Developer.

Khi sử dụng trình điều khiển tác nhân, một ứng dụng Java đích có thể cư trú trên một máy khác với máy của bàn làm việc của nhà phát triển. Các hàm của trình điều khiển tác nhân làm phương tiện trung gian, gửi các lệnh và dữ liệu giữa các bàn làm việc và tác nhân lược tả. Hình dưới đây cho thấy một kịch bản lược tả từ xa. Giao tiếp giữa bàn làm việc của nhà phát triển và trình điều khiển tác nhân thông qua các ổ cắm, trong khi giao tiếp giữa trình điều khiển tác nhân và các tác nhân là thông qua các đường ống có đặt tên và bộ nhớ có chia sẻ.

Hình 1. Lược tả từ xa
Một kết nối ổ cắm giữa máy khách và các tác nhân.

Ngoài việc hỗ trợ tác nhân và giao tiếp, trình điều khiển tác nhân cung cấp các dịch vụ bổ sung như khởi chạy, kết thúc và theo dõi quá trình và chuyển tệp. Nó luôn luôn cần thiết cho quá trình của trình điều khiển tác nhân đang chạy trên máy tính đích để sử dụng chức năng lược tả trên máy đó. May mắn thay, có rất nhiều cách để bắt đầu quá trình này.

Khi trực tiếp lược tả các ứng dụng khởi chạy cục bộ tại bàn làm việc của bạn, một Trình điều khiển tác nhân tích hợp (IAC) được khởi động tự động, mà không có sự can thiệp của người dùng, bất cứ khi nào có chức năng bất kỳ yêu cầu kích hoạt nó. IAC sẽ vẫn hoạt động miễn là bàn làm việc được mở và sẽ tắt đi khi bàn làm việc được đóng lại. Các giá trị cài đặt mặc định của IAC có thể được điều chỉnh thông qua khung nhìn cấu hình có sẵn trong Preferences > Agent Controller (Các sở thích > Trình điều khiển tác nhân).

Ngoài việc khởi chạy tại chỗ thông qua IAC, trình điều khiển tác nhân có thể được dùng để khởi chạy các ứng dụng trên bất kỳ máy chủ từ xa được hỗ trợ nào. Một trình điều khiển tác nhân độc lập, được đóng gói theo qui trình của trình tiện ích (daemon) của Rational® Agent Controller (Trình điều khiển tác nhân Rational) của IBM®, có sẵn để tải về cho các hệ thống Linux®, Microsoft® Windows®, IBM® AIX®, Solaris, IBM® z/OS® và Linux on IBM® System z® 32 - và 64-bit. Các hệ thống này cung cấp khả năng cho các ứng dụng được chạy trực tiếp trên một máy chủ ở xa, các tác nhân ở xa tạo dữ liệu bằng cách được truyền trả lại bàn làm việc tại chỗ thông qua một kết nối ổ cắm tới máy tính ở xa.

Xem phần Tài nguyên ở cuối hướng dẫn này để biết nơi tải về Rational Agent Controller.


Điều bạn cần để theo dõi các ví dụ trong hướng dẫn này

Tất cả các ví dụ trong hướng dẫn này đã được lược tả bằng cách sử dụng Phiên bản Rational Application Developer 7.5.4. Các công cụ lược tả có sẵn thông qua hoặc là Rational Application Developer hoặc là Rational Software Architect, hoặc một sản phẩm dựa trên Eclipse được hỗ trợ với các trình cắm thêm TPTP của Eclipse. Xem phần Tài nguyên để biết thêm thông tin.


Giới thiệu về hộp thoại Lược tả

Giới thiệu về hộp thoại Lược tả Để bắt đầu, hãy chuyển sang một khung nhìn phối cảnh dựa trên Java và tìm biểu tượng của hộp thoại lược tả có nút hoạt động màu xanh lá cây (biểu tượng hộp thoại lược tả). Hộp thoại lược tả Profile Configurations (Lược tả các cấu hình) là điểm khởi chạy trung tâm cho tất cả chức năng lược tả trong Rational Application Developer. Cũng có thể truy cập vào hộp thoại này từ hầu hết các khung nhìn phối cảnh khi chọn Run > Profile Configurations (Chạy> Lược tả các cấu hình) từ trình đơn.

Chức năng lược tả trong Rational Application Developer hỗ trợ hầu hết tất cả các kiểu khởi chạy chuẩn:

  • Ứng dụng Eclipse.
  • Java Applet
  • Ứng dụng Java.
  • Thử nghiệm.
  • Java Unit (JUnit)
  • Máy khách của ứng dụng WebSphere® Application Server (Máy chủ ứng dụng WebSphere) của IBM® phiên bản 6.0, 6.1 và 7.0.
  • Và các kiểu khác.

Ngoài ra, sự hỗ trợ được mở rộng bằng hai kiểu trình lược tả cụ thể, Attach to Agent (Gắn kèm tác nhân) và External Java Application (Ứng dụng Java ngoài):

  • Gắn kèm tác nhân cho phép bất kỳ máy ảo Java nào được lược tả bằng ứng dụng, độc lập với việc sử dụng máy ảo Java đó, miễn là sử dụng các đối số máy ảo của tác nhân lược tả JVMTI phù hợp. Vì mục nhập này làm việc với ứng dụng bất kỳ , nên nó có thể được sử dụng cho các cấu hình ứng dụng không được hỗ trợ khác hoặc tại chỗ hoặc từ xa, cho dù chúng đang ở trên một máy chủ ứng dụng hoặc là một ứng dụng độc lập chính thức. Điều này đòi hỏi bạn cấu hình đường dẫn lớp (classpath) thích hợp, các biến môi trường và các tham số của ứng dụng từ dòng lệnh, cùng với các đối số tác nhân lược tả JVMTI cần thiết (được mô tả sau trong hướng dẫn này).
  • Ứng dụng Java ngoài, giống như Gắn kèm tác nhân, hỗ trợ việc lược tả cho máy ảo Java bất kỳ độc lập với việc sử dụng của nó. Không giống như Gắn kèm tác nhân, Ứng dụng Java ngoài yêu cầu bạn xác định đường dẫn lớp (classpath), các biến môi trường, các tham số của ứng dụng và kiểu lược tả tại bàn làm việc (trong trình khởi chạy), chứ không phải từ dòng lệnh. Một điểm nhập khẩu cần lưu ý: tất cả các tệp lớp cần thiết, các tệp lưu trữ Java (JAR) và các phụ thuộc bổ sung phải đã có trên máy chủ đích, vì trình điều khiển tác nhân không hỗ trợ việc chuyển tệp từ xa của các lớp hoặc các tệp để đáp ứng các yêu cầu của ứng dụng.

Thu thập các số liệu thống kê thực hiện mức phương thức

Trong số ba tác nhân lược tả được thảo luận trong hướng dẫn này, có khả năng tác nhân được sử dụng phổ biến nhất là tác nhân phân tích thực hiện mức phương thức, cung cấp một loạt các số liệu thống kê về thực hiện phương thức. Ví dụ sau đây sẽ đưa ra một giải thích đơn giản về chức năng của các số liệu thống kê thực hiện.

  1. Đầu tiên, chọn một ứng dụng Java để lược tả.
  2. Nhấn chuột phải vào các dự án Java và chọn Profile as.
  3. Nếu đây là lần đầu tiên bạn đang lược tả cho dự án này, hộp thoại Profiling được hiển thị. Nếu không nó sẽ tự động trở về cấu hình lược tả đã lưu cuối cùng của dự án được chọn.
  4. Để thay đổi cấu hình lược tả trước đó, hãy sử dụng hộp thoại Profile configurations, như đã mô tả ở trên.

Các tùy chọn lược tả bao gồm Phân tích thời gian thực hiện, Phân tích bộ nhớ và Phân tích luồng, như trong Hình 2.

Hình 2. Các tùy chọn trong hộp thoại cấu hình chỉnh sửa và khởi chạy
UI của các tùy chọn lược tả của hộp thoại lược tả

Trong hộp thoại lược tả bạn sẽ thấy một số tùy chọn lược tả: các tùy chọn lược tả đã nói ở trên trong Java Profiling (Lược tả Java) là chủ đề của hướng dẫn này. Mục thứ tư, Probe Insertion (Chèn đầu dò), mô tả một chức năng bổ sung khi sử dụng công cụ Probekit cho các ứng dụng thiết bị với các đầu dò tùy chỉnh, nhưng nằm ngoài phạm vi của hướng dẫn này.

  1. Từ đây, hãy nhấn vào nút Edit Options (Các tùy chọn chỉnh sửa).

Phân tích thời gian thực hiện có ba tùy chọn:

  • Luồng thực hiện (Execution Flow) cung cấp nhiều khung nhìn dữ liệu lược tả hơn, nhưng làm tăng chi phí lược tả, khối dữ liệu lược tả và cách sử dụng bộ nhớ của bàn làm việc. Điều này có thể không phù hợp với các ứng dụng có bộ dữ liệu lược tả lớn.
  • Số liệu thống kê thực hiện (Execution Statistics) có một chi phí hoạt động và cách sử dụng bộ nhớ của bàn làm việc được giảm đáng kể, nhưng trả giá bằng một số chức năng lược tả. Chỉ có các thông tin chi tiết về số liệu thống kê và Gọi phương thức mới có sẵn.
  • Thu thập thông tin về thời gian CPU của phương thức (Collect method CPU time information): Trong cả hai chế độ trên, trình lược tả có thể thu thập thời gian CPU dành cho việc thực hiện các phương thức được lược tả. Điều này sẽ khác với ở trên, vì thời gian Vào/Ra và thời gian chờ sẽ không được tính vào thời gian của CPU.

Quá trình hành động tốt nhất là bắt đầu với Luồng thực hiện và sau đó chuyển sang Các số liệu thống kê thực hiện (hoặc tập hợp bộ lọc điều chỉnh ) nếu khối dữ liệu trở nên quá lớn.

  1. Đối với ví dụ này, chọn Luồng thực hiện, vì tùy chọn này đưa ra một ví dụ về tất cả các khung nhìn lược tả có sẵn.

Các bộ lọc

Trước khi lựa chọn nút lược tả, điều quan trọng là các bộ lọc phù hợp phải được đặt đúng chỗ. Người ta tạo ra một lượng lớn dữ liệu lược tả như là một phần của quá trình lược tả, vì mọi cuộc gọi phương thức đơn, cấp phát đối tượng hoặc sự kiện luồng đòi hỏi phải tạo ra, gửi đi và xử lý một sự kiện.

Toàn bộ khối dữ liệu lược tả đôi khi có thể đang quá lớn, cả về ứng dụng đang thực hiện và về bàn làm việc riêng của nó. Tuy nhiên, chỉ một phần nhỏ của khối dữ liệu đó sẽ có ích cho các mục đích phân tích. May mắn thay, công cụ lược tả đưa ra một cách để lọc ra các thông tin không liên quan sao cho bạn có thể làm giảm khối dữ liệu tác nhân cho các ứng dụng được lược tả.

Ví dụ, trong việc lược tả một ứng dụng Java, bạn có khả năng chỉ quan tâm đến các phương thức của ứng dụng của mình và không theo thời gian thực hiện của các gói ngôn ngữ Java chuẩn như java.*, sun.* và v.v.. Điều quan trọng là sử dụng các bộ lọc được nhắm cụ thể vào các lớp của các ứng dụng của bạn, để giảm chi phí lược tả từ các lớp bên ngoài càng nhiều càng tốt

  1. Để thiết lập các bộ lọc, nhấn đúp chuột vào mục Java profiling – JRE 1.5 or newer (Lược tả Java - JRE 1.5 hoặc mới hơn). Bạn sẽ thấy một cửa sổ tương tự như cửa sổ được chỉ ra trong Hình 3. Các bộ lọc xác định các gói và các lớp nào cần lược tả; chính các bộ lọc được chứa trong các tập hợp bộ lọc cấu hình.
Hình 3. Chọn các tập hợp bộ lọc và các nội dung của chúng
UI tạo bộ lọc và tập hợp bộ lọc

Trong hộp thoại này, bạn xác định các bộ lọc mới hoặc sửa đổi các bộ lọc hiện có. Một vài bộ lọc có ích trong các kịch bản lược tả chung nhất được cung cấp, như trong Hình 3. Các tập hợp bộ lọc được liệt kê ở khung bên trên còn chính các bộ lọc được liệt kê ở phía dưới. Quyền ưu tiên của bộ lọc là từ trên xuống dưới, có nghĩa là bộ lọc nằm ở vị trí cao hơn trong danh sách này sẽ ghi đè lên bất kỳ bộ lọc đang xung đột nằm ở vị trí thấp hơn trong danh sách. Các bộ lọc và các tập hợp bộ lọc có thể được thêm vào và gỡ bỏ bằng cách sử dụng các nút ở bên phải của hộp thoại.

  1. Với ví dụ này, bạn hài lòng với bộ lọc mặc định và chọn Finish (Kết thúc) để trả về hộp thoại lược tả.
  2. Từ đây, chọn Execution Analysis và nhấn nút Profile. Bàn làm việc sẽ xác nhận một chuyển đổi sang khung nhìn phối cảnh Logging (Đăng nhập) và Profiling (Lược tả) và ứng dụng đã lược tả sẽ bắt đầu chạy trong khung nhìn Profiling Monitor (Giám sát lược tả).
  3. Nhấn Execution Time Analysis để mở khung nhìn Execution Statistics như trong Hình 4.
Hình 4. Một tập hợp dữ liệu nhỏ với một lớp đang được lược tả trong khung nhìn Execution Statistics
Bốn phương thức trong nột bảng, với các dấu sao thực hiện của chúng

Phiếu Session summary (Tóm tắt Phiên làm việc) cung cấp một tổng quan về 10 phương thức hàng đầu có thời gian cơ sở cao nhất. Tuy nhiên, chính từ phiếu Execution Statistics mà tất cả các dữ liệu được tạo sẵn đầy đủ. Tại đây bạn sẽ tìm thấy các thông tin chi tiết về các cuộc gọi các phương thức và các số liệu thống kê của chúng: số lần được gọi, thời gian trung bình được dùng, thời gian tích lũy và v.v..

Một vài định nghĩa chủ yếu sẽ giúp làm rõ các cột trong khung nhìn này:

  • Thời gian cơ sở (Base Time): Thời gian để thực hiện các nội dung của chính phương thức đó, không kể các cuộc gọi đến các phương thức khác. (Trong bảng, trường Thời gian cơ sở tổng hợp tất cả các cuộc gọi của phương thức đó với nhau).
  • Thời gian cơ sở trung bình (Average Base Time): Thời gian trung bình mà một phương thức cụ thể đã dùng để hoàn thành, không kể thời gian của cuộc gọi phương thức với các phương thức khác. (Trong bảng, đây là Thời gian cơ sở được chia cho số lượng các cuộc gọi).
  • Thời gian tích lũy (Cumulative Time): Thời gian để thực hiện các nội dung của chính phương thức đó, bao gồm cả các cuộc gọi đến các phương thức khác.

Các số liệu thống kê này có thể giúp xác định vị trí các tình trạng thắt cổ chai hiệu năng trong một chương trình.

Dựa trên những định nghĩa này, có ba sự xem xét quan trọng:

  • Thời gian cơ sở trung bình (Average Base Time): Đây là thời gian trung bình mà một phương thức đã dùng để hoàn thành. Vì vậy, tính trung bình, đây là khoảng thời gian để kết thúc một cuộc gọi duy nhất của phương thức đó (như đã nói ở trên, việc này không bao gồm thời gian bị mất do phương thức này gọi các phương thức con hay, cụ thể hơn, không kể thời gian của các phương thức con chưa được lọc).
  • Thời gian cơ sở (Base Time): Đây là tổng số thời gian mà một phương thức đã dùng để hoàn thành. Đây là một sự pha trộn của tất cả thời gian đã sử dụng trong phương thức này (không bao gồm các cuộc gọi đến các phương thức khác không được lọc).
  • Thời gian CPU tích lũy (Cumulative CPU Time): Thời gian CPU tích lũy biểu diễn số lượng thời gian CPU đã dùng để thực hiện một phương thức cụ thể. Tuy nhiên, độ chi tiết của các dữ liệu được cung cấp bởi các máy ảo Java về mặt này là thô hơn so với mong đợi. Do đó, thời gian CPU có thể được ghi lại bằng không nếu thời gian này nhỏ hơn một đơn vị nền tảng cụ thể duy nhất được máy ảo Java ghi lại. Ngoài ra, thời gian CPU sẽ không được tính vào các kiểu các tình trạng thắt cổ chai hiệu năng khác, ví dụ như những kiểu có liên quan là kiểu truyền thông và thời gian truy cập vào/ra. Kết quả là, thời gian cơ sở thường được dùng như là một thước đo để giảm bớt tình trạng thắt cổ chai hiệu năng.

Thoạt nhìn, thời gian cơ sở trung bình dường như là một điểm dữ liệu quan trọng trong việc xác định những phương thức nào đang làm chậm hệ thống. Tuy nhiên, khi mà thời gian cơ sở trung bình sẽ xác định rõ các phương thức phải tốn nhiều thời gian để thực hiện, thì nó lại không tính đến số lần một phương thức được gọi. Bạn có thể tự hỏi mình cái nào tồi tệ hơn: một phương thức chạy một lần và mất 5,0 giây hay một phương thức chạy 1000 lần và mất 0,5 giây? Thời gian cơ sở trung bình cho phương thức đầu tiên là 5,0 giây, trong khi thời gian cơ sở trung bình cho phương thức thứ hai sẽ là 0,5 giây.

Tuy nhiên, thời gian cơ sở cho phương thức đầu tiên sẽ là 5,0 giây, trong khi thời gian cơ sở cho cho phương thức thứ hai sẽ là 500 giây. Giảm bớt 500 giây cho một thời gian chạy ứng dụng có ảnh hưởng lớn hơn rất nhiều so với chỉ giảm 5. Vì vậy, bạn có thể nói rõ ràng rằng phương thức thứ hai là mối quan tâm lớn hơn phương thức đầu tiên, do thời gian cơ sở khác nhau. Do đó thời gian cơ sở là mối quan tâm chính để giảm tình trạng thắt cổ chai hiệu năng trong một ứng dụng. Vì thời gian cơ sở biểu diễn một sự kết hợp của việc chạy toàn bộ ứng dụng, nói chung việc giảm thời gian cơ sở tương đương với việc giảm thời gian chạy.

Trong khi thời gian cơ sở chỉ biểu diễn thời gian dùng để thực hiện chính phương thức đó (không bao gồm các cuộc gọi đến các phương thức khác), thời gian tích lũy đại diện cho tổng thời gian dùng để thực hiện một phương thức, bao gồm cả các cuộc gọi phương thức con. Vì vậy, ví dụ, trong một ứng dụng đơn luồng, thời gian tích lũy của phương thức main(…) tương đương với tổng của tất cả các thời gian cơ sở cho tất cả các phương thức khác trong ứng dụng, vì phương thức main(…) là điểm bắt đầu của ứng dụng và do đó là điểm bắt đầu cho tất cả các cuộc gọi phương thức. Vì thế, nó tương đương với tổng thời gian chạy ứng dụng.

Với sự hiểu biết các thông tin chi tiết về các số liệu thống kê thực hiện trong đầu, hãy xem xét cách để tiếp tục đi sâu hơn nữa vào phân tích các vấn đề hiệu năng. Để có được một ý tưởng tốt hơn về cái gì gọi các phương thức cụ thể và các phương thức cụ thể đang được gọi từ đâu, hãy nhấn đúp vào phương thức mong muốn trong tab Execution Statistics (Các số liệu thống kê thực hiện). Việc này sẽ mở phiếu Method Invocation Details (Các thông tin chi tiết cuộc gọi phương thức), như trong Hình 5.

Hình 5. Đào sâu vào chi tiết hơn của các phương thức cụ thể
Tab cuộc gọi phương thức với dữ liệu mẫu

Mở rộng Hình 5.

Phiếu Method Invocation Details là một sự trình diễn khá đơn giản của các số liệu thống kê thực hiện của chúng có liên quan trực tiếp đến phương thức được chọn. Bảng thứ hai trong phiếu được chọn là Selected method is invoked by (Phương thức đã chọn được gọi bởi), trong đó sẽ liệt kê tất cả các phương thức đã gọi phương thức được chọn trong thời gian chạy ứng dụng.

Bảng thứ ba, Selected method invokes (Phương thức được chọn gọi), sẽ liệt kê tất cả các phương thức mà phương thức được chọn gọi. Các số liệu thống kê tương tự từ phiếu Execution Statistics được sao chép ở đây và chọn một phương thức từ bất kỳ một trong các bảng này sẽ cập nhật phương thức được chọn ở trên đầu của khung nhìn.

Phiếu tiếp theo được lưu ý ở đây là phiếu Call Tree (Cây cuộc gọi), chỉ có sẵn khi bạn đang lược tả với tùy chọn lược tả Execution Flow. Phiếu Call Tree ngắt các cuộc gọi phương thức cho tất cả các phương thức được gọi cho một luồng cụ thể. Các mục mức đầu tiên trong bảng là tất cả các luồng đã sinh ra trong lúc chạy ứng dụng. Dưới đây là một cách kết hợp của một trong các cuộc gọi phương thức được thực hiện, với các phương thức từ mức trước đó của cây này gọi các phương thức trên một mức tiếp theo.

Hình 6. Phiếu Call Tree biểu thị các cuộc gọi phương thức từ một khung nhìn phối cảnh tập trung-luồng hơn
Hiển thị một luồng và tất cả các phương thức của nó

Mở rộng Hình 6.

Tại mức trên cùng, Cumulative Time với mỗi luồng biểu diễn tổng thời gian mà luồng đó dùng để chạy ứng dụng. Các luồng của ứng dụng có thời gian tích lũy cao hơn là các ứng cử viên để phân tích và tối ưu hóa.

Trường Percent Per Thread (Tỷ lệ phần trăm cho mỗi luồng) biểu diễn tổng thời gian dùng để thực hiện một phương thức được biểu thị như là tỷ lệ phần trăm của tổng thời gian dùng để thực hiện luồng này. Nó được biểu diễn như là một tổng số thời gian tích lũy của cuộc gọi phương thức mức trên cùng cho luồng đó (là tổng thời gian dùng để thực hiện luồng này). Các số liệu thống kê bổ sung được cung cấp, chẳng hạn như thời gian tối thiểu, thời gian tối đa và thời gian trung bình đã dùng để hoàn thành thực hiện một phương thức trên luồng này, cũng như tổng số các cuộc gọi.

Dưới bảng cây cuộc gọi cao nhất là một bảng các ngăn xếp cuộc gọi phương thức, hiển thị các nội dung của ngăn xếp của mọi cuộc gọi phương thức cho mục được chọn hiện tại trong bảng cây cuộc gọi. Số lượng các ngăn xếp có sẵn sẽ bằng số lượng cuộc gọi được liệt kê. Điều này chứng tỏ có ích để phân tích các cá thể của cuộc gọi phương thức cụ thể.

Cuối cùng, bạn có thể nhấn chuột phải vào mục phương thức và chọn Open Source (Nguồn mở) từ bất kỳ đâu trong các khung nhìn. Nếu tệp Java có liên quan có mặt trong vùng làm việc, thì tệp bàn làm việc sẽ được mở và định nghĩa phương thức sẽ được định vị. Khi các tình trạng thắt cổ chai hiệu năng được xác định, bạn có thể thay đổi chúng và sau đó lược tả lại để thấy sự khác biệt.


Phân tích Vùng lưu trữ đặc biệt: xác định vị trí các chỗ rò bộ nhớ

Mục tiêu chính của các nhà phát triển ứng dụng đang tìm kiếm để lược tả cách sử dụng bộ nhớ có hai vấn đề:

  • Phân tích các nội dung của vùng lưu trữ đặc biệt như là ứng dụng đang chạy (cho phép các số liệu thống kê lớp-với-lớp được tạo ra).
  • Xác định các chỗ rò bộ nhớ bằng cách sử dụng hoặc phân tích vùng lưu trữ đặc biệt đang hoạt động hoặc phân tích vùng lưu trữ đặc biệt sau khi thu gom dữ liệu rác theo yêu cầu của người dùng (để xác định các đối tượng không được hoặc đang được thu gom dữ liệu rác).

Để bắt đầu thu thập thông tin vùng lưu trữ đặc biệt từ ứng dụng của bạn, hãy khởi chạy ứng dụng của bạn từ hộp thoại Profiling, sử dụng kiểu lược tả Memory Analysis (Phân tích bộ nhớ). Tùy chọn của trình lược tả duy nhất có sẵn trong phân tích bộ nhớ là chọn hay không chọn Track Object Allocation Sites (Theo dõi các trang web cấp phát đối tượng). Các trang web cấp phát là các vị trí trong mã, nơi các đối tượng đang được khởi tạo (ngầm định hay rõ ràng). Với tùy chọn này được chọn, bạn có thể chọn các lớp trong khung nhìn Object Allocations (Cấp phát đối tượng) và thấy rõ việc tạo ra các đối tượng của các lớp đó từ các phương thức nào.

Bất lợi duy nhất khi chọn tùy chọn Track Object Allocation Sites là nó sẽ làm tăng đáng kể khối dữ liệu lược tả đang được tạo ra. Nếu hiệu năng của lược tả bị tác động hoặc đáp ứng của bàn làm việc bị ảnh hưởng, hãy xem xét hoặc xóa tùy chọn này hoặc làm giảm số lượng dữ liệu bằng cách sử dụng một tập hợp bộ lọc đã cập nhật.

Ngoài việc cấp phát đối tượng, hãy bảo đảm rằng bạn đã thiết lập các bộ lọc đúng cho ứng dụng của bạn. Việc lược tả vùng lưu trữ đặc biệt có tổng chi phí thiết bị gắn liền với nó lớn hơn là thực hiện hoặc phân tích luồng, mà tự nó đã áp đặt một sự trả giá nặng nề tiềm ẩn cho hiệu năng của ứng dụng. Cuối cùng, khi chọn các bộ lọc: nếu bạn muốn xem, ví dụ, vùng bị các kiểu Java chiếm là String (Chuỗi ký tự) hay Integer (Số nguyên), bạn sẽ cần phải thêm những thứ đó vào bộ lọc. Theo mặc định, chúng được lọc bằng bộ lọc java* *EXCLUDE.

Khung nhìn cấp phát đối tượng

Khi dữ liệu trở nên có sẵn trong ứng dụng được lược tả, nó được hiển thị trong khung nhìn Object Allocation (Cấp phát đối tượng). Khung nhìn cấp phát đối tượng là khung nhìn chính trong đó trình bày tất cả các thông tin được tác nhân lược tả của vùng lưu trữ đặc biệt thu thập.

Các cột cấp phát đối tượng:

  • Live Instances (Các cá thể sống): Số các đối tượng hiện có trong vùng lưu trữ đặc biệt, của lớp cụ thể, hiện đang được sử dụng (vẫn chưa thu gom dữ liệu rác)
  • Total Instances (Tổng các cá thể): Tổng số đối tượng trong vùng lưu trữ đặc biệt đã được tạo ra trong vòng đời của máy ảo Java (bao gồm cả các đối tượng đã thu gom dữ liệu rác).
  • Active Size (bytes) (Kích thước thực): Tổng kích thước của tất cả các cá thể đối tượng, của lớp cụ thể, hiện được máy ảo Java sử dụng (nói cách khác, cá thể đó vẫn chưa thu gom dữ liệu rác). Lưu ý rằng kích thước của đối tượng là sự phụ thuộc của việc thực hiện-máy ảo Java.
  • Total Size (bytes): Tổng kích thước của tất cả các cá thể đối tượng của lớp, bao gồm cả những cá thể đã thu gom dữ liệu rác trước đó trong vòng đời ứng dụng.
  • Average Age: Tuổi trung bình của một đối tượng trước khi nó được thu gom dữ liệu rác, được đo bằng số lượng các thu gom dữ liệu rác mà đối tượng này vẫn tiếp tục tồn tại. Các đối tượng vẫn tiếp tục tồn tại sau một số lượng lớn các lần thu gom dữ liệu rác được coi là một chỗ rò bộ nhớ khi ứng dụng không còn yêu cầu sử dụng chúng nữa

Dữ liệu trong bảng số liệu thống kê bộ nhớ có thể được chuyển giữa mức đóng gói và mức lớp khi sử dụng thanh công cụ khung nhìn. Điều này có thể đặc biệt có ích khi bạn đang giải quyết một số lượng lớn các lớp. Dữ liệu có thể được biểu diễn theo tỷ lệ phần trăm hoặc như là độ lệch của dữ liệu hiện có so với lúc làm mới trước đó. Hình 7 cho thấy các biểu tượng, từ trái sang phải, cho các tùy chọn tạo bản ghi, lọc, khung nhìn đóng gói/lớp và các tùy chọn tỷ lệ phần trăm và độ lệch.

Hình 7. Các biểu tượng trên thanh công cụ khung nhìn cấp phát đối tượng
Các biểu tượng tiêu đề của khung nhìn các cấp phát đối tượng

Nếu bạn đã chọn tùy chọn lược tả Object Allocation, thì việc nhấn đúp vào bất kỳ các mục nào trong bảng Memory Statistics sẽ chuyển sang phiếu Allocation Details (Các thông tin chi tiết về cấp phát). Phiếu này trình bày một bảng của tất cả các vị trí trong chương trình nơi mà các đối tượng của kiểu đó đã được cấp phát. Khi một kiểu cụ thể đã được xác định khi đang biểu diễn trong vùng lưu trữ đặc biệt, thì việc sử dụng dữ liệu trong khung nhìn đó có thể đặc biệt có ích cho bạn để xác định nơi mà các đối tượng đó đang được cấp phát, cho phép nhận biết và loại bỏ các đối tượng dư thừa.

Sử dụng chức năng này để nhận biết các vấn đề của vùng lưu trữ đặc biệt

Khi bàn làm việc đã bắt đầu thu thập dữ liệu lược tả từ ứng dụng đích, bạn có thể tham chiếu khung nhìn Object Allocation bất kỳ lúc nào để xác định nội dung hiện tại của vùng lưu trữ đặc biệt. Bảng này sẽ phản ánh, theo thời gian thực, tất cả các sự kiện cấp phát và ngừng cấp phát đối tượng khi chúng xuất hiện. Việc này cung cấp một khung nhìn theo từng thời điểm của các nội dung bộ nhớ, được biểu diễn hoặc theo tỷ lệ phần trăm của tổng hoặc theo các số hạng tuyệt đối (theo các byte).

Bằng cách phân loại bảng dữ liệu và chọn các lớp có kích thước thực tế lớn nhất, các nhà phát triển có thể nhắm vào các vùng vấn đề cần cải thiện. Sau đó các thông tin cấp phát chi tiết cho các lớp đó cung cấp một danh sách các nguồn tạo đối tượng, mà sau đó bạn có thể, theo từng nguồn một, loại trừ hoặc kiểm tra nguồn đó như là một nguyên nhân gây ra các vấn đề kích thước vùng lưu trữ đặc biệt.

Ví dụ này trình bày một ứng dụng Web phòng trò chuyện trực tuyến (chat) đơn giản cho phép những người dùng đăng nhập và giao tiếp với nhau. Người trò truyện trực tuyến trong phòng được chuyển đến tất cả những người tham gia và sau đó tất cả các cuộc trò chuyện được ghi vào một tệp ghi nhật ký trên máy chủ. Tuy nhiên, khi sử dụng các khả năng lược tả của Vùng lưu trữ đặc biệt của Rational Application Developer, bạn đã xác định được một chỗ rò bộ nhớ nghiêm trọng (có thể bao gồm một lớp cụ thể).

Trong khung nhìn Memory Statistics với tổng tỷ lệ phần trăm được liệt kê, bạn có thể thấy lớp ChatlineMessage đại diện cho gần 98% của các đối tượng hiện tại được cấp phát trong vùng lưu trữ đặc biệt, chiếm 61% tổng số các nội dung của vùng lưu trữ đặc biệt theo kích thước. Đây sẽ là một dấu hiệu cảnh báo nghiêm trọng cho các nhà phát triển ứng dụng rằng một hoặc nhiều lớp được biểu diễn quá mức trong các nội dung của vùng lưu trữ đặc biệt và đang đóng góp vào chỗ rò bộ nhớ trong ứng dụng.

Hình 8. Xem thông tin bằng cách đóng gói với tùy chọn độ lệch đã chọn
Danh sách lớp với lỗi xấu nhất được tô sáng

Mở rộng Hình 8.

Khung nhìn Profiling Monitor (Giám sát lược tả) cũng cho phép bạn yêu cầu thu gom dữ liệu rác trên máy ảo Java. Khi được sử dụng kết hợp với bảng độ lệch, khung nhìn này đặc biệt có ích trong việc xác định có bao nhiêu vùng lưu trữ đặc biệt được chứa trong các đối tượng của vùng lưu trữ đặc biệt không thể sửa chữa được, các đối tượng này là một kiểu khác của chỗ rò bộ nhớ.

Trước khi chọn thu gom dữ liệu rác, hãy chọn biểu tượng Show Delta Columns (Chỉ ra các cột độ lệch) từ thanh Object Allocations (Các cấp phát đối tượng). Biểu tượng này giới thiệu bốn cột độ lệch mới, là các kiểu độ lệch của các cột hiện có và phản ánh những thay đổi trong các giá trị này từ khi bạn đã chọn trước nút Refresh (Làm mới) (xem Hình 9, ở dưới). Khi bạn đang ở trong bảng độ lệch, hãy nhấn vào biểu tượng Run Garbage Collection (Chạy thu gom dữ liệu rác) mũi tên hoạt động màu xanh lá cây với một biểu tượng thùng rác(mũi tên hoạt động màu xanh lá cây với một thùng rác) trên thanh công cụ Profiling Monitor để kích hoạt việc thu gom dữ liệu rác của máy ảo Java. Các kết quả của thu gom rác sẽ được phản ánh trong bảng Memory Statistics (Các số liệu thống kê bộ nhớ) ngay khi bạn chọn nút refresh, như trong Hình 9, dưới đây.

Các lớp đó đã đóng góp nhiều nhất vào các nội dung của vùng lưu trữ đặc biệt được thu gom dữ liệu rác có thể được xác định bằng cách phân loại cột của bảng Delta: Active Size (Độ lệch: Kích thước thực). Đây là các lớp đã giảm kích thước nhiều nhất trong lúc thu gom và có đóng góp nhiều nhất cho tổng nhóm đối tượng chưa sử dụng.

Khi máy ảo Java thực hiện thu gom dữ liệu rác, nó tìm kiếm các đối tượng được cấp phát trong vùng lưu trữ đặc biệt bị bỏ rơi (có nghĩa là, chúng không được bất kỳ đối tượng nào khác trong vùng lưu trữ đặc biệt tham chiếu đến, mà chính nó cũng không được đối tượng vùng lưu trữ đặc biệt bất kỳ tham chiếu). Khi sử dụng cùng một ví dụ ứng dụng trò chuyện trực tuyến như được thảo luận ở trên, bây giờ bạn đã chỉ dẫn cho máy ảo Java thực hiện thu gom dữ liệu rác thông qua bàn làm việc. Bạn có thể thấy rằng kết quả ban đầu là sự sụt giảm lớn trong cả hai số lượng đối tượng ChatlineMessage được cấp phát, cũng như tổng kích thước của vùng lưu trữ đặc biệt.

Hình 9. Các cột độ lệch cung cấp các số liệu thống kê theo từng thời điểm về thu gom đối tượng
Garbage collection is decreasing live objects

Mở rộng Hình 9.

Ảnh chụp màn hình này cho thấy các nội dung của khung nhìn Memory Statistics tại thời điểm sau khi bạn đã yêu cầu thu gom dữ liệu rác. Các nội dung của vùng lưu trữ đặc biệt đã bị giảm đáng kể, với ít hơn 22.079 cá thể sống và tỷ lệ phần trăm giảm tương ứng. Trong khoảng năm hoặc sáu giây, tỷ lệ phần trăm của Live Instances (Các cá thể sống) giảm xuống gần bằng không. Trong ứng dụng này, bạn thấy rằng các đối tượng ChatlineMessage đang được cấp phát, chỉ sử dụng một thời gian ngắn, rồi bỏ đi.

Khi sử dụng phân tích vùng lưu trữ đặc biệt, các cột độ lệch và thu gom dữ liệu rác, bạn có thể xác định các đối tượng đang được cấp phát nhưng không được thu gom dữ liệu rác hoặc không được tham chiếu bởi đối tượng khác bất kỳ trong vòng đời ứng dụng và đang đóng góp vào việc thu gom rộng lớn các đối tượng bị bỏ rơi. Các nhà phát triển ứng dụng có thể phân tích và giảm tất cả dấu vết trong ứng dụng của họ và có thể có khả năng giảm các lỗi trao đổi hệ thống, cải thiện thời gian đáp ứng và giảm các yêu cầu và chi phí hệ thống ứng dụng.


Phân tích luồng: theo dõi hành vi của luồng

Người đọc phần này là những người dùng muốn xác định và sửa chữa bất kỳ các vấn đề nào có liên quan đến luồng trong ứng dụng của họ. Đối với các luồng cụ thể đáng chú ý, bạn có thể sử dụng các công cụ lược tả này để kiểm tra xem các luồng cụ thể này thường bị chặn bao lâu (và bởi ai) và để hiển thị trực quan các đặc tính luồng của ứng dụng của bạn.

Với các mối quan tâm chung, chẳng hạn như với các mối quan tâm hiệu năng của cá thể ở nơi hoạt động luồng có tiềm năng bị treo, mục tiêu là xác định các vấn đề luồng chung có thể ảnh hưởng đến hiệu năng ứng dụng. Mục tiêu chính của một nhà phát triển ứng dụng, nhưng người muốn lược tả hoạt động luồng là để tìm ra các luồng sẽ chạy sớm hơn hoặc nhanh hơn khác, vẫn là các đặc điểm luồng và nguồn lực của ứng dụng đã sửa đổi.

Để bắt đầu thu thập thông tin luồng từ ứng dụng đích, hãy khởi chạy ứng dụng từ hộp thoại Profiling bằng cách sử dụng kiểu lược tả Thread Analysis (Phân tích luồng). Khung nhìn Thread Analysis của Rational Application Developer là khung nhìn trung tâm cho tất cả các thông tin được thu thập bởi tác nhân lược tả luồng.

Khung nhìn Thread Analysis được chia thành ba phiếu:

  • Thread Statistics (Các số liệu thống kê luồng): Một bảng các số liệu thống kê cho mỗi luồng được ứng dụng khởi chạy, cả quá khứ lẫn hiện tại. Thông tin được liệt kê bao gồm trạng thái luồng, tổng thời gian chạy, thời gian chờ và thời gian bị chặn, cũng như số lượng các lần chặn và các lần khóa chết cho mỗi luồng.
  • Monitor Statistics (Các số liệu thống kê giám sát): Cung cấp thông tin chi tiết về các số liệu thống kê lớp giám sát, bao gồm cả các số liệu thống kê lần chặn và chờ với các lớp giám sát riêng.
  • Threads Visualizer (Trình hiển thị trực quan các luồng): Cung cấp một biểu diễn hình ảnh của tất cả các luồng đã lược tả trong ứng dụng đích, theo trạng thái.

Các luồng trong tất cả các khung nhìn được tổ chức theo nhóm luồng. Dữ liệu trong khung nhìn phân tích luồng sẽ chỉ cập nhật mỗi khi nhận được dữ liệu bổ sung từ ứng dụng được lược tả. Đây là một điểm quan trọng: các bảng và biểu đồ sẽ chỉ được cập nhật khi nhận được một sự kiện liên quan đến luồng từ trình lược tả của ứng dụng đích. Nếu nó xuất hiện cứ như là dữ liệu chưa được cập nhật, điều này là do không có các sự kiện luồng mới đã được thu nhận và dữ liệu vẫn còn ở trạng thái trước đó.

Tên luồng đã liệt kê là tên được đưa vào hàm tạo Thread(String name) hoặc được thiết lập với phương thức Thread.setName. Có thể có ích khi gọi phương thức này trong ứng dụng đích, để cho phép xác định luồng dễ dàng hơn. Các số liệu thống kê luồng được thu thập trên tất cả các luồng Java, trong đó bao gồm các luồng máy ảo và cũng có thể bao gồm các luồng được sử dụng bởi thùng chứa của ứng dụng hoặc khung công tác của ứng dụng. May mắn thay, bạn có thể lọc các luồng không quan tâm ngoài khung nhìn bằng cách chọn biểu tượng bộ lọc luồng ( - ba mũi tên có một mũi tên màu vàng ở giữa đang đi qua vạch xanh lá cây thẳng đứng) và xóa các luồng không mong muốn.

Bảy trạng thái luồng là:

  • Đang chạy.
  • Đang ngủ: một trạng thái trong đó phương thức sleep rõ ràng đã được gọi.
  • Đang chờ: một trạng thái trong đó phương thức wait rõ ràng đã được gọi và đang chờ một cuộc gọi notify hay notifyAll trên đối tượng giám sát của nó.
  • Bị chặn: đề cập đến các trường hợp ở nơi một luồng bị chặn bởi một giám sát đối tượng đang được một luồng khác sử dụng (ví dụ, một luồng đang duy trì một sự giám sát đối tượng trong một câu lệnh đồng bộ).
  • Bị khóa chết: các số liệu thống kê được tập hợp theo một mức cho mỗi luồng, với mỗi luồng trong ứng dụng đích. Khóa chết được cho là đã xảy ra khi có hai hay nhiều luồng giữ tài nguyên mà với nó biểu đồ phụ thuộc tài nguyên khống chế trong một chu kỳ (có nghĩa là, tất cả các luồng bị khóa chết đòi hỏi có tài nguyên bổ sung mà chúng không thể nhận được khi chưa có một luồng bị khóa khác giải phóng tài nguyên cần thiết).
  • Bị dừng lại.
  • Không rõ.

Trong Java, các khóa chết có thể xảy ra trong một loạt các tình huống, ví dụ:

  • Trong hai luồng, khi các phương thức được đồng bộ hóa trong hai lớp đang cố gắng gọi các phương thức được đồng bộ hóa của nhau.
  • Khi một luồng đồng bộ hóa trên tài nguyên A và cố gắng đồng bộ hóa trên một tài nguyên B thứ hai, trong khi một luồng thứ hai đồng bộ hóa trên tài nguyên B và cố gắng đồng bộ hóa trên tài nguyên A.
  • Bất kỳ tình huống nào khác ở nơi mà với hai hoặc nhiều luồng bị khóa chết thì không thể mở khóa và hoàn thành.

Phiếu Thread statistics

Phiếu Thread statistics (Các số liệu thống kê luồng) liệt kê tất cả các luồng hiện đang chạy hoặc đã chạy xong, trong suốt vòng đời của ứng dụng. Các luồng vẫn còn ở trong bảng ngay cả sau khi chấm dứt. Khung nhìn này liệt kê thời gian chạy, thời gian chờ và thời gian bị chặn. Thời gian chạy được định nghĩa là tổng thời gian chạy của luồng trừ đi thời gian mà nó đã đang chờ hoặc bị chặn.Thời gian chờ được định nghĩa là lượng thời gian mà luồng đó dùng để chờ một giám sát và Thời gian bị chặn là lượng thời gian mà luồng đó đã dùng do bị chặn bởi quyền sở hữu của các giám sát bằng các luồng khác. Ngoài ra, có một vài số đếm được ghi lại: Đếm số chặnĐếm số khóa chết là số lần một luồng đã chặn hoặc khóa chết, tương ứng, trong suốt vòng đời của luồng.

Trong ví dụ này, bạn đang lược tả một trình cắm thêm Eclipse. Hình 10 cho thấy các trạng thái hiện tại của tất cả các luồng đang chạy, thời gian chạy, thời gian chờ, thời gian bị chặn và thời gian bị khóa và đếm số lần bị chặn của chúng. Các nhà phát triển ứng dụng có thể tận dụng khung nhìn này hoặc để xem một bức tranh chung về toàn bộ bối cảnh luồng ứng dụng của chúng hoặc đi sâu vào các số liệu thống kê theo từng thời điểm của các luồng cụ thể.

Hình 10. Liệt kê các luồng đang chạy trong một trình cắm thêm Eclipse được lược tả
Chạy các luồng được liệt kê bằng trạng thái hoạt động của chúng

Mở rộng Hình 10.

Thời gian chờ, thời gian bị chặn và thời gian bị khóa chết là các số liệu thống kê quan trọng để xem xét trong bối cảnh của hiệu năng ứng dụng. Các giá trị này nên được xem xét kỹ để đảm bảo rằng chúng phù hợp, nhất là đối với các luồng phụ thuộc thời gian.

Phiếu Monitor statistics

Phiếu thứ hai trong khung nhìn (Phân tích luồng) là Monitor Statistics (Các số liệu thống kê giám sát), như trong Hình 11. Tất cả các đối tượng trong Java có một giám sát tương ứng, là cơ sở cho mọi hoạt động đồng thời trong Java. Các giám sát được gọi khi ở bên trong một khối đồng bộ hóa hoặc khi các phương thức wait hay notify được gọi tương ứng để chờ một sự phụ thuộc một hoặc để báo hiệu một sự sẵn sàng. Tab này cung cấp các số liệu thống kê giám sát trên cơ sở luồng với luồng.

Hình 11. Tab các số liệu thống kê giám sát của khung nhìn Thread Analysis
Các lớp và các số liệu thống kê giám sát được liệt kê

Trong Hình 11, phiếu Thread Statistics chứa một danh sách các luồng trong ứng dụng được lược tả, cùng với các số liệu thống kê khác của luồng từ phiếu đầu tiên. Hãy chọn một trong các luồng trong bảng Thread Statistics để hiển thị các giám sát có liên quan được luồng đó tham chiếu, bao gồm cả các số liệu thống kê khác nhau cho các giám sát của các luồng đó. Rồi bạn có thể chọn giám sát để mở thông tin về lớp của nó, bao gồm các số liệu thống kê chặn và chờ cho những người gọi giám sát đó, cũng như thông tin tính giờ và thông tin đối tượng. Điều này cho phép xác định các đối tượng cụ thể đang tranh chấp, bởi ai và bao lâu rồi.

Phiếu Threads visualizer

Trong phiếu Threads Visualizer (Trình hiển thị trực quan các luồng) được chỉ ra trong Hình 12, mỗi một trong bảy trạng thái luồng được biểu thị bằng các thanh của các nền tảng và các mẫu dòng khác nhau. Các luồng được sắp xếp theo nhóm luồng và tên luồng. Trục-x của đồ thị biểu diễn thời gian, dải thời gian có thể được điều chỉnh bằng cách sử dụng các biểu tượng phóng to và thu nhỏ.

Mỗi dòng của bảng chứa một thanh biểu diễn việc thực hiện luồng. Bên trong mỗi thanh là một danh sách liên tục của các sự kiện, biểu diễn những thay đổi về trạng thái luồng. Bạn có thể nhấn đúp chuột vào một sự kiện để hiển thị ngăn xếp cuộc gọi của nó trong khung nhìn Call Stack (Ngăn xếp cuộc gọi) và bạn có thể dịch chuyển từ sự kiện tới sự kiện bằng cách sử dụng các nút Select Next Event (Chọn sự kiện tiếp theo) và Select Previous Event (Chọn sự kiện trước) ở góc trên cùng bên phải của phiếu Threads Visualizer.

Trong đồ thị, các trạng thái Đang chờ và Bị chặn được biểu thị bằng các đường chấm chấm và các trạng thái Bị khóa chết và Bị dừng lại được biểu thị bằng một đường nét liền. Quan trọng nhất với các nhà phát triển ứng dụng đang tìm cách xác định các vấn đề hiệu suất là Bị khóa chết (màu đỏ), Đang chờ (màu cam) và Bị chặn (màu vàng).

Một lưu ý giao diện người dùng quan trọng: Có lẽ trái với dự kiến về hành vi, khi một luồng đã chấm dứt hoạt động thì nó vẫn tiếp tục duy trì một biểu diễn màu xám tối trên biểu đồ (chứ chưa biến mất hoàn toàn khỏi biểu đồ).

Hình 12. Trình hiển thị trực quan các luồng biểu diễn các trạng thái luồng của tất cả các luồng trong một biểu đồ được vẽ dựa vào dòng thời gian của ứng dụng
Biểu đồ luồng, với trạng thái luồng được vẽ với nhau

Mở rộng Hình 12.

Các nút bấm trên thanh công cụ phân tích luồng được sử dụng để di chuyển hoặc thay đổi tập trung đến hoặc ra khỏi các luồng cụ thể. Từ trái sang phải, như trong Hình 13, các nút lần lượt là: Legend (Ghi chú), Show Call Stack (Chỉ ra ngăn xếp cuộc gọi), Reset Timescale (Đặt lại khung thời gian), Zoom In/Out (Phóng to/thu nhỏ), Select Next/Previous Event (Chọn sự kiện luồng tiếp theo/trước), Select Next/Previous Thread (Chọn luồng tiếp theo/trước), Group Threads (Nhóm các luồng), Filter Threads (Lọc các luồng) và Visualize Thread Interactions (Hiển thị trực quan các tương tác của luồng). Hầu hết các nút dễ hiểu: ví dụ, nút Next/Previous Thread thay đổi luồng hiện đang được chọn và nút Select Next/Previous Event di chuyển con trỏ sự kiện đến sự kiện tiếp theo hoặc trước đó của luồng hiện đang được chọn. Ngoài ra, bạn có thể nhóm và lọc các luồng cần thiết.

Hình 13. Tương tác với biểu đồ Threads Visualizer khi sử dụng các nút ở đầu khung nhìn
Nhấn vào tiêu đề Threads Visualizer

Khi sử dụng chức năng lược tả luồng của Rational Application Developer, bạn nên cân nhắc một số việc sau:

  • Đối với các luồng đang ở một chu kỳ thức-ngủ, phải mất bao lâu để hoàn thành giai đoạn thức của của chu kỳ và phải mất bao lâu để thực hiện giai đoạn ngủ của luồng?
  • Đối với các luồng đang phụ thuộc vào nguồn tài nguyên bên ngoài đang trở nên có sẵn để dùng, chúng bị chặn bao lâu khi chờ một tài nguyên trở nên có sẵn để dùng?
  • Trong các ứng dụng hướng đầu ra- đang xử lý-đầu vào, chẳng hạn như một ứng dụng web, các luồng khác nhau phải mất bao lâu để đáp ứng theo đầu vào của người dùng, xử lý dữ liệu và tạo đầu ra tương ứng?
  • Một số luồng theo định kỳ đánh thức để kiểm tra một điều kiện hoặc thực hiện một hàm, rồi trở về trạng thái ngủ. Việc phân tích luồng cho phép bạn quan sát các mối quan hệ này bằng cách sử dụng Threads Visualizer.
  • Bạn có thể sử dụng chức năng lược tả để giám sát nhà sản xuất-người tiêu dùng và các mối quan hệ đọc-viết.

Tóm lại, chức năng lược tả luồng cung cấp nhiều khung nhìn để phân tích hành vi và hiệu năng luồng của ứng dụng. Các khung nhìn này cho phép bạn thu thập thông tin và phân tích các khía cạnh khác nhau của việc thực hiện chương trình, để có được cái nhìn sâu sắc về các tình trạng thắt cổ chai tiềm năng hoặc các điều kiện lỗi.


Lược tả các ứng dụng trên một máy tính ở xa

Cho đến nay, hướng dẫn này đã thảo luận về việc lược tả các ứng dụng Java khi chúng đang chạy trên một máy tại chỗ. Việc lược tả của Rational Application Developer cũng cung cấp khả năng khởi chạy và lược tả các ứng dụng đang chạy trên một máy tách biệt với bàn làm việc. Để kích hoạt chức năng này, bạn có thể tải về thành phần Rational Agent Controller và cài đặt nó một cách riêng biệt trên Windows, Linux x86/x64, Linux cho hệ thống Z, IBM AIX, IBM z/OS, Solaris SPARC và Solaris x86.

Các hướng dẫn cài đặt và khởi động Rational Agent Controller có sẵn trên các trang web tải về của IBM; hãy tham khảo phần Tài nguyên để biết thêm chi tiết. Khi cài đặt xong, hãy chạy kịch bản lệnh cài đặt SetConfig rồi khởi động trình điều khiển tác nhân khi sử dụng tệp ACServer.exe (Windows) hay ACStart.sh (UNIX®) trên máy ở xa. Một ví dụ Linux trên cấu hình hệ thống Z được chỉ ra trong Hình 14.

Hình 14. Khởi động quá trình Rational Agent Controller từ dòng lệnh và thiết lập các biến môi trường Java Profiler
Chạy các kịch bản lệnh cấu hình và khởi chạy các trình lược tả

Mở rộng Hình 14.

Trình lược tả yêu cầu bạn thiết lập các biến môi trường bổ sung. Ví dụ, trên Linux, các bổ sung tác nhân cụ thể cho các biến LD_LIBRARY_PATH và các biến PATH cần thiết. Các biến khác được hiển thị trong Hình 14 ở trên được thiết lập chỉ để thuận tiện cho việc sử dụng các giá trị của chúng nhiều hơn một lần mà không cần phải gõ đường dẫn dài. Bạn có thể thêm các biến môi trường toàn cầu của bạn, xác định trong phiên làm việc cuối hoặc thêm các biến đó vào kịch bản lệnh khởi chạy của ứng dụng Java của bạn. Ngoài ra, một số nền tảng cho phép bạn lược tả mà không cần cài đặt các biến môi trường này (thay cho xác định đường dẫn trên dòng lệnh). Hãy tham khảo tài liệu khởi đầu với bản cài đặt Rational Agent Controller của bạn để biết thêm thông tin.

Ngoài việc thiết lập các biến môi trường này, bạn cũng sẽ cần phải xác định kiểu dữ liệu lược tả cần thiết và thiết lập các đối số máy ảo Java để phản ánh kiểu này khi khởi chạy ứng dụng của bạn.

Windows:
Các đối số máy ảo Java trên Windows:

-agentlib:JPIBootLoader=JPIAgent:server=<agent-behaviour>;<profile-option>

Tất cả các loại UNIX:
Các đối số máy ảo Java trên Linux:

'-agentlib:JPIBootLoader=JPIAgent:server=<agent-behaviour>;<profile-option>'

(Lưu ý các dấu nháy đơn xung quanh toàn bộ chuỗi ký tự; các dấu nháy đơn là cần thiết để cho trình bao (shell) không coi dấu chấm phẩy như là một ký tự dòng mới).

Lưu ý việc sử dụng CGProf (<profile-option> trong dòng lệnh chung) trong các đối số dòng lệnh của máy ảo Java trong ví dụ trên: đây là một trong các tùy chọn tương ứng với các kiểu lược tả thu gom dữ liệu:

  • CGProf: tương đương với Execution Time Analysis (Phân tích thời gian thực hiện) trong Giao diện người dùng Lược tả của bàn làm việc. Như đã nói ở trên, tùy chọn này được sử dụng để xác định các tình trạng thắt cổ chai hiệu năng, bằng cách ngắt thời gian thực hiện trên cơ sở phương thức-với-phương thức.
  • HeapProf: tương đương với Memory Analysis (Phân tích bộ nhớ) trong Giao diện người dùng Lược tả của bàn làm việc. Như đã nói ở trên, tùy chọn này theo dõi các nội dung của vùng lưu trữ đặc biệt bằng cách theo vết cấp phát và dừng cấp phát đối tượng, cũng như các sự kiện thu gom dữ liệu rác.
  • ThreadProf: tương đương với Thread Analysis (Phân tích luồng) trong Giao diện người dùng Lược tả của bàn làm việc. Tùy chọn này theo vết luồng và giám sát cách sử dụng trong lúc thực hiện ứng dụng.

Bạn cần phải chọn một trong các kiểu thu gom dữ liệu và đặt giá trị đó vào giá trị đối số máy ảo Java tùy chọn-lược tả ở trên. Bạn chỉ có thể xác định một loại một lần.

Ngoài ra, bạn cần phải lựa chọn hành vi tác nhân (chẳng hạn, ví dụ trong Hình 14 sử dụng controlled):

  • controlled: Hành vi của tác nhân này ngăn máy ảo Java khởi tạo cho đến khi tác nhân này được gắn vào (từ bàn làm việc) và được đưa ra các hướng dẫn để bắt đầu giám sát. Ngay sau khi kết nối tác nhân được thiết lập, máy ảo sẽ khởi động. Vì máy ảo Java chờ cho đến khi bàn làm việc đã kết nối, tác nhân tạo hồ sơ sẽ tạo ra dữ liệu cho toàn bộ vòng đời của ứng dụng.
  • enabled: Với hành vi của tác nhân này, tác nhân lược tả được khởi chạy lúc khởi động máy ảo Java. Tuy nhiên, máy ảo Java được khởi tạo ngay lập tức và bắt đầu chạy mà không cần chờ cho bàn làm việc kết nối. Tác nhân lược tả không bắt đầu tạo dữ liệu cho đến sau khi bàn làm việc đã kết nối đến tác nhân và đã khởi động quá trình giám sát. Không có dữ liệu lược tả nào được tạo ra cho đến khi bàn làm việc được gắn vào. Bất kỳ việc thực hiện ứng dụng nào diễn ra trước khi bàn làm việc đã kết nối sẽ không được ghi lại.

Một hành vi tác nhân bổ sung là standalone, nằm ngoài phạm vị hoạt động của hướng dẫn này. Nó cho phép lược tả mà không cần một trình điều khiển tác nhân bằng cách ghi dữ liệu vào một tệp theo dấu vết trên hệ thống tệp cục bộ, sau đó có thể được trực tiếp nhập khẩu vào Rational Application Developer. Tương tự, các tùy chọn dòng lệnh bổ sung có sẵn để tinh chỉnh dữ liệu của trình lược tả. Để biết thêm thông tin, hãy tham khảo tài liệu Khởi đầu Rational Agent Controller.

Ví dụ 1:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf

(Lược tả vùng lưu trữ đặc biệt trên Windows, chế độ enabled nói trên)

Ví dụ 2:

-agentlib:JPIBootLoader=JPIAgent:server=controlled;CGProf

(Lược tả thời gian thực hiện trên Linux, chế độ controlled nói trên)

Khi máy ảo Java của ứng dụng đích đã được chạy với các đối số máy ảo Java phù hợp, bạn sẵn sàng kết nối từ các bàn làm việc. Để kết nối từ các bàn làm việc, mở hộp thoại Profile Configurations, như trong Hình 15.

Hình 15. Chọn hộp thoại Profile Configurations từ giao diện người dùng của bàn làm việc
Hộp thoại lược tả đã truy cập khi sử dụng biểu tượng đòng hồ bấm giây

Hộp thoại chỉ ra các tùy chọn lược tả có sẵn được hiển thị như trong Hình 16.

Hình 16. Các tùy chọn cấu hình khởi chạy lược tả
Liệt kê các cấu hình khởi chạy của hộp thoại lược tả

Mở rộng Hình 16.

Tạo một Attach to Agent launch configuration (Cấu hình khởi chạy gắn kèm vào tác nhân) mới (được mô tả ở trên) bằng cách nhấn đúp vào tùy chọn đó. Bạn cũng có thể tùy chỉnh cấu hình mới bằng cách thêm vào máy tính ở xa làm một máy chủ mới. Trình điều khiển tác nhân trên máy ở xa có sẵn ở cổng 10002 (số cổng mặc định), như trong Hình 17.

Hình 17. Hộp thoại Add host (Thêm máy chủ lưu trữ)
Người sử dụng xác định cổng và tên máy chủ

Sau khi được thêm vào như là một máy chủ, tác nhân đang chạy trên máy từ xa (trong ví dụ này tác nhân của các số liệu thống kê thực hiện) sẽ có sẵn trên phiếu Agents (Các tác nhân). Nếu không, nó có thể giúp kiểm tra các trạng thái và thiết lập Agent Controller. Khi bạn đã sẵn sàng, hãy chọn tác nhân và nhấn vào Profile. Bàn làm việc sẽ gắn với tác nhân và chuyển sang hộp thoại lược tả. Bạn có thể thu thập và phân tích dữ liệu cần thiết.

Một cách khác để lược tả một ứng dụng trên một máy tính ở xa là sử dụng tùy chọn External Java Application (Ứng dụng Java bên ngoài) được mô tả ở trên (như trong Hình 18) thay vì Attach to Agent (Gắn kèm tác nhân).

Hình 18. Xác định tên lớp và đường dẫn lớp trong External Java Application
Hộp thoại các cấu hình lược tả với tên lớp và đường dẫn được chỉ rõ

Mở rộng Hình 18.

Trong một cấu hình mới của External Java Application, bạn xác định vị trí và tên của lớp chính Java trên máy từ xa, như trong Hình 18. Phiếu Monitor giúp xác định các tác nhân lược tả để sử dụng (Execution profiler-Trình lược tả Thực hiện, Memory profiler-Trình lược tả bộ nhớ hay Thread profiler-Trình lược tả luồng). Khi bạn nhấn vào nút Profile, ứng dụng sẽ chạy trên máy chủ từ xa, nhưng đầu vào và đầu ra được hướng đến cửa sổ bàn điều khiển trong bàn làm việc tại chỗ.


Lược tả các trình cắm thêm của nền tảng máy khách phong phú của Eclipse

Rational Application Developer hỗ trợ việc lược tả các trình cắm thêm RCP (Rich Client Platform -Nền tảng máy khách phong phú) của Eclipse. Bạn có thể thực hiện việc lược tả này thông qua tùy chọn Eclipse Application option (Ứng dụng Eclipse) trong hộp thoại Profiling Configurations. Có một tùy chọn để lược tả một cá thể Eclipse mới khi sử dụng các trình cắm thêm đang được phát triển trong bàn làm việc. Khi bạn lược tả các trình cắm thêm Eclipse, sẽ là khôn ngoan để sử dụng một tập hợp bộ lọc để hạn chế trực tiếp dữ liệu lược tả cho các gói có liên quan đến trình cắm thêm cụ thể của bạn. Như với các cấu hình khởi chạy khác, giao diện người dùng khởi chạy lược tả được xây dựng trên giao diện người dùng khởi chạy hiện có, có nghĩa là bàn làm việc duy trì một giao diện người dùng lược tả phù hợp trên các kiểu ứng dụng khác nhau. Việc lược tả một trình cắm thêm cũng dễ như lược tả một ứng dụng Java tại chỗ hoặc kiểu khởi chạy khác.


Tích hợp Nền tảng các công cụ Web của Eclipse và lược tả với WebSphere

Ngoài ra, Rational Application Developer cũng hỗ trợ lược tả các máy chủ như WebSphere Application Server (Máy chủ ứng dụng WebSphere) hoặc Tomcat hoặc đang chạy trên máy tính tại chỗ hoặc kết nối với một máy tính ở xa. Chức năng lược tả của Rational Application Developer tích hợp chặt chẽ với các cấu hình máy chủ hiện có. Khi bạn phát triển các ứng dụng Web hoặc các dịch vụ Web chạy trên máy chủ ứng dụng WebSphere hoặc máy chủ ứng dụng được hỗ trợ khác, bạn có thể khởi chạy một ứng dụng được lược tả bằng cách chọn máy chủ để lược tả trong khung nhìn Server và sau đó chọn biểu tượng Profile. Từ đây, hộp thoại Profile on Server (Lược tả trên máy chủ) được hiển thị và bạn có thể chọn kiểu lược tả, cũng như các lựa chọn bổ sung như các tùy chọn bộ lọc và lược tả.

Một lưu ý trong việc lược tả máy chủ: tác nhân lược tả JVMTI thu thập dữ liệu ở mức máy ảo Java chứ không thu thập dữ liệu trên cơ sở cho mỗi ứng dụng. Điều này có nghĩa là tất cả các mã Java chạy trên nền máy ảo Java sẽ tạo ra dữ liệu sự kiện (bao gồm cả chính máy chủ của nó). Bạn phải đảm bảo rằng bạn đã thiết lập các bộ lọc chính xác nhằm đúng vào ứng dụng của bạn.


Bạn đã học được những gì

Hướng dẫn này đã tìm hiểu chức năng lược tả nhiều mặt do Rational Application Developer cung cấp. Rational Application Developer cung cấp một giao diện người dùng thân thiện và trực quan để xem xét các thông tin chi tiết của chúng xem có ích cho việc điều chỉnh một ứng dụng Java, tất cả ứng dụng Java trong khi liên tục tích hợp với các cấu hình ứng dụng hiện có. Trình lược tả có sẵn cho rất nhiều các nền tảng và hỗ trợ nhanh chóng và dễ dàng cho bất kỳ và tất cả các cấu hình máy ảo Java. Với ứng dụng phù hợp của các công cụ lược tả và phân tích cẩn thận về hiệu năng và các đặc tính của ứng dụng, bạn có thể khám phá và giải quyết các vấn đề hiệu năng trước khi chúng trở thành một vấn đề và trước khi cần các giải pháp tốn kém hơn.

Tài nguyên

Học tập

  • Tìm hiểu thêm về Rational Application Developer:
  • Các trang tải về của Trình điều khiển tác nhân Rational của IBM: Các bản phát hành Trình điều khiển tác nhân Rational của IBM có sẵn để tải về từ trang này. Các hướng dẫn cài đặt bổ sung cũng có sẵn ở đó.
  • Nền tảng các công cụ hiệu năng và thử nghiệm Eclipse: Tìm kiếm thêm thông tin về dự án Eclipse nguồn mở mà các công cụ lược tả của nhà phát triển ứng dụng Rational dựa vào đó.
  • Tài liệu TPTP của Eclipse: Đây là một danh sách đầy đủ tài liệu hướng dẫn được tạo ra cho các dự án TPTP của Eclipse, bao gồm các hướng dẫn, các screencast (các trang màn hình video) và các bản thuyết trình hội nghị.
  • Bài viết của developerWorks: Đọc Giới thiệu: Nền tảng các công cụ hiệu năng và thử nghiệm Eclipse của Martin Streicher. Đây là một giới thiệu theo phong cách hướng dẫn cho các thành phần lược tả của TPTP Eclipse. Lưu ý: Tác nhân lược tả được mô tả trong hướng dẫn này chỉ có thể áp dụng cho phiên bản v1.4.2 và 1.5.0 của máy ảo Java. Tương tự như vậy, các bản hiệu chỉnh chính cho giao diện người dùng và chức năng có sẵn đã được thực hiện trong các phiên bản tiếp theo.
  • Đồng bộ hóa luồng và Giám sát của Java: Tìm hiểu một tmô tả đầy đủ về các cấu trúc luồng của Java, bao gồm cả các giám sát, trùng hợp và đồng bộ hóa luồng.
  • Tìm hiểu về các ứng dụng khác trong Nền tảng phân phối phần mềm Rational của IBM, bao gồm cả công cụ cộng tác cho các nhóm phát triển song song và phân tán về địa lý, cộng với phần mềm chuyên dụng để phát triển kiến trúc, quản lý tài sản, quản lý thay đổi và phát hành, quản lý các yêu cầu tích hợp, quản lý xử lý và hồ sơ năng lực và quản lý chất lượng . Bạn có thể tìm thấy các hướng dẫn sử dụng sản phẩm, các hướng dẫn cài đặt và tài liệu khác trong Trung tâm tài liệu trực tuyến Rational của IBM.
  • Truy cập vào vùng phần mềm Rational trên developerWorks với tài nguyên kỹ thuật và các thực hành tốt nhất cho các sản phẩm của Nền tảng phân phối phần mềm Rational của IBM.
  • Khám phá các khóa học trực tuyến có người hướng dẫn, dựa trên Web và dựa trên máy tính của Rational. Hãy rèn luyện các kỹ năng và tìm hiểu thêm về các công cụ Rational với các khóa học này, bao gồm từ khởi đầu đến nâng cao. Các khóa học trong danh mục này có sẵn để bán thông qua việc đào tạo trên máy tính hoặc đào tạo dựa trên Web. Một số khóa học "Khởi đầu" được miễn phí.
  • Đặt bản tin developerWorks của IBM, một bản cập nhật hàng tuần về các hướng dẫn, các bài viết, các bản tải về, các hoạt động cộng đồng, webcast và các sự kiện tốt nhất của developerWorks.

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Rational
ArticleID=758582
ArticleTitle=Lược tả các ứng dụng Java khi sử dụng Rational Application Developer của IBM
publish-date=09202011