Chẩn đoán Java theo cách của IBM, Phần 1: Giới thiệu công cụ chẩn đoán và theo dõi Java của IBM - Dump Analyzer

Vượt qua những tệp báo lỗi dài vô tận để đi tới trọng tâm của vấn đề

Các ứng dụng Java™ ngày càng trở nên phức tạp hơn; do đó, việc chẩn đoán các vấn đề bên trong các ứng dụng này là một công việc không hề dễ dàng và có thể cần nhiều công sức đối với một tổ chức dịch vụ bên ngoài (external service organization). Một chỉ dẫn hữu ích và chính xác có thể góp phần tiết kiệm thời gian và chi phí. Công cụ chẩn đoán và giám sát Java của IBM® - Dump Analyzer là một công cụ thực hiện các phân tích cơ bản đối với một tệp kết xuất hệ thống được định dạng (formatted system dump) và tạo ra một báo cáo ngắn gọn chỉ ra những việc mà bạn cần làm tiếp theo.

Bài viết này giới thiệu Công cụ chẩn đoán và giám sát cho Java của IBM (IBM Diagnostic and Monitoring Tools for Java) - Dump Analyzer và cung cấp một số thông tin cơ bản về các loại vấn đề mà công cụ này có thể chẩn đoán. Nó giải thích kiến trúc được sử dụng để xây dựng nên Dump Analyzer và cung cấp một số suy nghĩ về hướng đi tương lai của công cụ.

Helen Beeken, Kỹ sư phần mềm, IBM

Ảnh của Helen BeekenTiến sĩ Helen Beeken là một kỹ sư phát triển phần mềm công cụ RAS tại Trung tâm Công nghệ Java của IBM. Trước khi gia nhập nhóm, cô đã làm việc tại các dự án mã nguồn mở AJDT Eclipse và AspectJ, góp phần vào việc thử nghiệm áp lực (stress test) trên các hệ thống phần mềm lớn.



Daniel Julin, Kỹ sư phần mềm, IBM

Ảnh của Daniel JulinDaniel Julin đã có 20 năm kinh nghiệm phát triển và xử lý sự cố cho các hệ thống mạng phức tạp. Với nhiệm vụ đứng đầu bộ phận kỹ thuật của Đội bảo trì WebSphere (WebSphere Serviceability Team), ông hiện đang tập trung vào việc giúp đội nhóm xác định và thực hiện một bộ sưu tập các công cụ và kỹ thuật để hỗ trợ cho việc xác định vấn đề với WebSphere Application Server và để tối đa hóa hiệu quả của hỗ trợ của IBM. Ông cũng thường xuyên hỗ trợ khách hàng trực tiếp trong các tình huống quan trọng khác nhau.


Cấp độ đóng góp cho developerWorks của
        tác giả

Julie Stalley, Kỹ sư phần mềm, IBM

Ảnh của Julie StalleyJulie Stalley là một kỹ sư phần mềm hiện đang làm việc trong nhóm phát triển công cụ Java RAS ở Hursley. Cô đến với IBM vào năm 1996 và đã trải qua năm năm để phát triển một ứng dụng client/server lớn trước khi chuyển đến Hursley trong năm 2001. Sau đó, cô đã làm việc trên các thư viện lớp Java, chuyên I/O, mạng, và XML.



Martin Trotter, Kỹ sư phần mềm, IBM

Ảnh của Martin TrotterMartin Trotter đã làm việc với nền tảng Java từ những ngày đầu và có hiểu biết đặc biệt rộng trong lĩnh vực làm việc trên các máy ảo Java và các bộ "thu gom rác" (garbarge collector). Ông hiện đang tham gia vào việc cải thiện các công cụ có sẵn để chẩn đoán các vấn đề trong máy ảo Java.



04 10 2013

Phát triển kỹ năng về chủ đề này

Nội dung này nằm trong "đường dẫn đến kiến thức (knowledge path)" để bổ sung các kỹ năng của bạn. Xem Công cụ giám sát và chẩn đoán các ứng dụng Java

Ngôn ngữ Java đã trở nên nổi bật trong lĩnh vực phát triển phần mềm, và do đó độ tin cậy của các máy ảo Java (VM) đã trở thành một vấn đề rất quan trọng. Máy ảo thường là một phần mềm đáng tin cậy, nhưng tất nhiên, vẫn có lỗi xảy ra trong quá trình thực thi do một loạt các nguyên nhân khác nhau. Một số ít những vấn đề này là do lỗi tự phát sinh trong máy ảo, tuy nhiên, trong đa số trường hợp, chúng được gây ra bởi lỗi hoặc cấu hình sai trong các ngăn phần mềm trên máy ảo (trong IBM® WebSphere® Application Server chẳng hạn) hoặc là do chính bản thân ứng dụng gây ra.

Cùng với sự trưởng thành của công nghệ thông tin, ngăn xếp phần mềm cho một dự án điển hình đã tăng lên về độ phức tạp, điều này đã dẫn đến những khó khăn ngày càng tăng cho các nhà phát triển đang cố gắng xác định nguyên nhân của các vấn đề. Trong một môi trường phức tạp như vậy, để chẩn đoán lỗi, bạn có thể phải đối mặt với khối lượng thông tin nhiều đến chóng mặt. Trong môi trường sản xuất thực tế, đó có thể là nhiều gigabyte bộ hớ, hàng trăm luồng, hàng ngàn classloader, hàng chục ngàn lớp, và một số lượng khổng lồ các đối tượng.

Công cụ chẩn đoán và giám sát Java của IBM - Dump Analyzer (từ đây được gọi tắt là Dump Analyzer) là một framework mở rộng có khả năng tìm ra con đường thoát khỏi mớ hỗn độn đó. Dump Analyzer có sẵn cho tất cả người dùng nội bộ của IBM và khách hàng bên ngoài muốn sử dụng nó để điều tra các vấn đề thông qua IBM Developer Kit cho nền tảng Java (IBM SDK). Nó sử dụng các bộ phân tích (analyzers) để thẩm vấn một tệp kết xuất hệ thống đã định dạng (formatted system dump) (mỗi bộ phân tích sẽ thăm dò tệp báo lỗi bằng một câu hỏi riêng biệt) và liên kết các kết quả với nhau bằng một đoạn mã kịch bản để tạo ra một bản báo cáo phân tích ngắn gọn. Trong hai phiên bản đầu tiên, Dump Analyzer sẽ cho ra một trong bốn kết quả sau:

Về loạt bài này

Loạt bài Chẩn đoán Java theo cách của IBM khám phá công cụ mới của IBM giúp giải quyết vấn đề với các ứng dụng Java và cải thiện hiệu suất của chúng. Bạn có thể kỳ vọng vào việc có thêm những kiến ​​thức mới mà bạn có thể sử dụng ngay lập tức sau mỗi bài viết của loạt bài này.

Mỗi tác giả đóng góp cho loạt bài này là một phần của một đội ngũ mới đang tạo ra các công cụ để giúp bạn giải quyết vấn đề với các ứng dụng Java của bạn. Các tác giả có nhiều hiểu biết nền tảng khác nhau, đem đến những kỹ năng khác nhau cùng với kiến thức từ các lĩnh vực chuyên môn tới cho đội nhóm.

Liên hệ với các tác giả thông qua ý kiến đóng góp hoặc các câu hỏi về bài viết của họ.

  • Không đủ bộ nhớ
  • Phát hiện tắc nghẽn (deadlock)
  • Máy ảo ngừng hoạt động do tín hiệu (một hậu quả của lỗi ứng dụng nội bộ hoặc ứng dụng trung gian/ứng dụng Java)
  • Yêu cầu có thêm các cuộc điều tra.

Ba trường hợp đầu có thể được xếp vào một loại vấn đề liên quan tới máy ảo được mô tả trong phần tiếp theo của bài viết này.

Bạn không cần bất cứ kiến thức nền nào để có thể đọc và hiểu được phần còn lại của bài viết này. Bạn sẽ được hướng dẫn từng bước một để phân tích một tập tin báo lỗi hệ thống bằng cách sử dụng Dump Analyzer, cùng với một cái nhìn tổng quan cấp cao về nền tảng của công cụ và kiến trúc của nó. Sau khi đọc bài viết này, bạn cần phải hiểu rõ các trường hợp mà ở đó bạn có thể muốn sử dụng Dump Analyzer, cũng như một số hiểu biết về cơ sở hạ tầng.

Cái nhìn tổng quan về các loại vấn đề của máy ảo

Có nhiều lý do khiến một máy ảo bị vấn đề trong khi thực thi, mỗi loại vấn đề yêu cầu có một cách tiếp cận khác nhau để chẩn đoán. Trước khi bạn đi vào hoạt động chi tiết của Dump Analyzer, nên kiểm tra những loại vấn đề khác nhau và các phân tích cần thiết để giải quyết chúng.

Vấn đề không đủ bộ nhớ

Một máy ảo có thể bị lỗi vì không đủ bộ nhớ — hoặc là do vùng nhớ heap hoặc vùng nhớ thực được sử dụng bởi các máy ảo để lưu ngăn xếp các luồng, lớp thông tin, mã JIT'ed, thành phần đồ họa, và các hiện vật (artifacts) khác để giao tiếp cơ bản với hệ điều hành.

Sẽ rất khó khăn để chẩn đoán một vấn đề như vậy bởi vì cấp phát bộ nhớ thất bại không phải là nguyên nhân cuối cùng; một số bộ thu gom lớn đã có thể được phát triển cho đến khi máy ảo đạt được giới hạn cho phép của vùng heap. Thường thì chúng ta sẽ cần kiểm tra lại các nội dung của vùng heap và so sánh hình ảnh của vùng heap ở nhiều thời điểm để xác định xem các tập hợp (collections) đã tăng kích cỡ nhanh chóng.

Tắc nghẽn

Một tắc nghẽn xảy ra khi mà hai hay nhiều tiến trình phải chờ một tiến trình khác giải phóng tài nguyên để sử dụng. Một luồng sở hữu một nguồn tài nguyên (như màn hình) thì không thể làm chủ nguồn tài nguyên khác bởi vì luồng thứ hai sở hữu nó và đồng thời cố gắng giành quyền sở hữu tài nguyên được sở hữu bởi luồng đầu tiên. Những lỗi này thường biểu hiện qua các vấn đề về hiệu suất. Việc chẩn đoán lỗi tương đối dễ dàng, chỉ cần kiểm tra trạng thái của các luồng và tài nguyên chúng sở hữu.

Các vấn đề nội bộ

Lỗi nội bộ có thể được gây ra bởi rất nhiều vấn đề:

  • Mã nguồn gốc có thể cố gắng để truy cập một đối tượng có đầu vào không hợp lệ (như một tham chiếu địa phương cũ) hoặc được mã hoá không chính xác.
  • Bộ thu gom rác có thể thu hồi không chính xác một số vùng nhớ, khi tham chiếu, nó xuất hiện để chứa con trỏ mà chưa khai báo vùng nhớ.
  • Trình biên dịch JIT có thể sản xuất mã không chính xác hoặc tham chiếu hoặc nỗ lực để rẻ nhánh chương trình đến một vị trí không đúng.

Lỗi trong ứng dụng Java hoặc bên trung gian

Dump Analyzer hiện có khả năng xử lý các lỗi xảy ra hoặc được phát hiện ở mức độ ngay bên trong máy ảo, nhưng thậm chí một bộ công cụ tương tự cũng có khả năng chẩn đoán các lỗi khác nhau và hành vi không chính xác trong các ứng dụng Java hoặc các ứng dụng trung gian đang hoạt động trong các máy ảo. Có nhiều nguyên nhân sinh ra các lỗi này, chúng thường là kết quả của các khiếm khuyết trong ứng dụng hoặc mã trung gian hoặc sử dụng hay tinh chỉnh JVM sai. Chúng thường được chẩn đoán bằng cách kiểm tra trạng thái của cấu trúc dữ liệu khác nhau trong các ứng dụng hoặc ứng dụng trung gian để xác định xem liệu có khía cạnh nào của trạng thái đó bị sai lệch không.


Cách chẩn đoán vấn đề thông dụng hiện nay

Nếu không có trong tay một công cụ như Dump Analyzer, bạn thường sẽ bắt đầu quá trình chẩn đoán vấn đề bằng cách kiểm tra những thứ được sinh ra từ máy ảo tại thời điểm xảy ra lỗi. Thông thường, đó là:

  • Một tập báo lỗi của không gian diễn ra tiến trình (một tập báo lỗi hệ thống hoặc tập tin lõi)
  • Một tập báo lỗi của heap Java (một heapdump)
  • Một ảnh chụp của tiến trình Java (một tập tin Javacore)
  • Một tập tin lưu vết ghi lại một số lịch sử thực thi

Nói chung, bạn sẽ phải xem xét riêng lẻ từng hiện vật, sử dụng các chương trình chuyên dụng cho từng định dạng cụ thể. Quá trình xác định vấn đề sau đó về cơ bản bao gồm các công việc kiểm tra thông tin thu thập được một cách thủ công. Khi khối lượng dữ liệu tăng lên, quá trình này ngày càng trở nên tốn thời gian, và một công việc ngày càng chuyên sâu hơn. Kết quả là, khách hàng thường không muốn tự tay thực hiện việc phân tích, mà họ thường nhờ cậy vào nhà cung cấp máy ảo hoặc phần mềm trung gian làm điều đó, nhưng phần lớn các vấn đề đã từng được chẩn đoán và ghi nhận lại là vấn đề liên quan tới ứng dụng, cấu hình, hoặc môi trường mà không yêu cầu bất kỳ thay đổi nào về mã trong máy ảo hoặc trong phần mềm trung gian. Trên lý thuyết, khả năng chẩn đoán có sẵn dành cho khách hàng sẽ đảm bảo rằng chỉ có các lỗi do nhà sản xuất mà cần phải can thiệp vào mã để sửa chữa mới được báo cáo tới nhà cung cấp máy ảo hoặc phần mềm trung gian. Các vấn đề khác sẽ được chẩn đoán nhờ một quá trình tự động bằng cách sử dụng các công cụ thích hợp được cung cấp bởi các máy ảo.


Tổng quan về Dump Analyzer

Dump Analyzer là công cụ dựa trên Diagnostic Tooling Framework dành cho Java (viết tắt là DTFJ; bạn sẽ tìm hiểu nhiều hơn về DTFJ sau trong bài viết này). Dump Analyzer được thiết kế để phân tích các tập tin kết xuất hệ thống nhằm tìm ra các vấn đề khác nhau. Công cụ này được tạo ra từ những module phân tích nhỏ. Những module này xem xét dữ liệu cụ thể và xác định vấn đề nào đang gặp phải, ví dụ như vấn đề tắc nghẽn (deadlock). Thiết kế này dễ dàng thích ứng với việc bổ sung các tính năng mới và có thể tương thích để tìm ra các vấn đề cụ thể.

Công cụ này hoạt động theo 2 mức:

  • Mỗi module phân tích chuyên biệt cố gắng chẩn đoán loại vấn đề thường gặp và đưa ra mô tả ngắn gọn cho vấn đề đó.
  • Khi việc chẩn đoán không thể thực hiện, mỗi module phân tích đưa ra báo cáo dài hơn về tình trạng một khía cạnh nào đó của hệ thống. Báo cáo này có thể được sử dụng bởi các chuyên gia xử lý sự cố, có thể kết hợp với nhiều thông tin khác để tìm ra vấn đề.

Để thêm tính linh hoạt, một ngôn ngữ kịch bản đơn giản được sử dụng để điều khiển luồng phân tích. Nhóm chúng tôi dự định tiếp tục phát triển điều này bằng việc cung cấp nhiều kịch bản khác nhau.

Dưới đây là các luồng phân tích của công cụ này:

  1. Công cụ này tải dữ liệu rác được người dùng lựa chọn và tạo ảnh để phân tích sâu hơn.
  2. Người dùng chọn một hoặc nhiều module phân tích để thực thi ảnh; nếu không có module phân tích cụ thể nào được chỉ định, kịch bản mặc định sẽ được chọn.
  3. Module phân tích được thực thi.
  4. Mỗi module phân tích sẽ trả về thông tin điều khiển luồng giúp phân tích vấn đề sâu hơn hoặc tạo ra một báo cáo.
  5. Khi tất cả các module đã hoàn thành việc phân tích, kết quả vừa phân tích sẽ được định dạng thành tài liệu dạng HTML hoặc dạng văn bản đơn thuần.

Như đã nói ở trên, nếu người dùng không chỉ ra module phân tích cụ thể, công cụ này sẽ thực thi tập lệnh mặc định (general.sml). Nó thực thi các thiết lập của trình phân tích để kiểm tra các loại vấn đề thường gặp. Nếu không có vấn đề nào được phát hiện, tập lệnh sẽ gọi tới một báo cáo mặc định. Báo cáo này phác thảo một số thông tin chung về tình trạng của máy ảo khi rác được tạo ra.

Trong bài viết sau, bạn sẽ tìm hiểu ví dụ về cách sử dụng Dump Analyzer và có cái nhìn tổng quan về một số module phân tích không mặc định có thể được chọn.


Thiết lập cần thiết để sử dụng Dump Analyzer

Tất cả những gì Dump Analyzer cần để chạy là một tệp kết xuất hệ thống có định dạng. Một hệ thống kết xuất mặc định được tạo ra khi máy ảo bị treo; tuy nhiên, các máy ảo có thể được cấu hình để tạo ra một kết xuất như vậy trong những trường hợp thất bại khác hoặc theo yêu cầu của người sử dụng (Xem các liên kết Diagnostic Guides trong phần Tài nguyên để có thêm nhiều thông tin).

Để định dạng tệp kết xuất hệ thống, bạn cần phải chạy công cụ jextract trên nó. Bằng cách sử dụng cùng một máy ảo trên cùng một máy đã tạo ra các kết xuất, chỉ cần chạy dòng lệnh sau đây:

jextract "corefilename"

Với một máy ảo cấp 1.4.2, lệnh này tạo ra một tập tin .sdff; trên máy ảo tại phiên bản 5.0 hoặc cao hơn, nó tạo ra một tập tin dmp.zip. Cũng lưu ý rằng trên các nền tảng khác nhau, có thể có lựa chọn khác nhau mà kiểm soát các định dạng của các kết xuất sản xuất ở cấp hệ điều hành. Đặc biệt, chúng có thể gây ra các kết xuất hệ thống được rút ngắn, có thể ngăn chặn Dump Analyzer đưa ra một chẩn đoán hữu ích. Các lỗi phổ biến nhất (trên hệ thống UNIX®) là quên thiết lập ulimit thành unlimited,nhưng có những lựa chọn quan trọng khác trên các nền tảng khác. Để tránh vấn đề kiểu này, tham khảo các thông tin trong IBM Diagnostics Guide hoặc tìm kiếm các phần mềm hỗ trợ trên trang web của IBM (Xem Tài nguyên cho các liên kết của cả hai) cho công nghệ nền tảng cụ thể với các từ khóa như "truncated core" .


Sử dụng Dump Analyzer trong IBM Support Assistant

Giới thiệu về IBM Support Assistant

IBM Support Assistant là một phần mềm miễn phí giúp bạn giải quyết vấn đề liên quan đến các sản phẩm phần mềm của IBM. ISA có một công cụ tìm kiếm trải dài phần lớn các tài liệu của IBM và phân loại các kết quả để xem xét.

Nó cũng cung cấp một tính năng liên kết đến trang hỗ trợ và trang chủ, trang hướng dẫn xử lý sự cố, các diễn đàn khác nhau và các nhóm tin. Tính năng dịch vụ của ISA có thể thu thập thông tin từ máy tính để bàn của bạn và có thể dễ dàng tạo ra một bản báo cáo vấn đề cho IBM.

Công cụ bàn làm việc của ISA cung cấp công cụ xác định vấn đề có thể trợ giúp giải quyết các vấn đề với sản phẩm của IBM. Những công cụ này được cập nhật liên tục và cho phép bạn chạy các công cụ xử lý sự cố và chẩn đoán trên máy tính để bàn của bạn. Xem Tài nguyên để tìm đường dẫn tải về ISA.

Phương tiện phát hành chính cho Dump Analyzer là IBM Support Assistant (gọi tắt là ISA). ISA là có sẵn cho tất cả người dùng nội bộ của IBM và khách hàng bên ngoài (Xem Tài nguyên để lấy liên kết tải về).

Bạn có thể cài đặt Dump Analyzer với ISA như sau:

  1. Hãy chắc chắn là ISA phiên bản 3 được cài đặt.
  2. Để cài đặt Dump Analyzer, bạn nên cài đặt một sản phẩm plug-in mà nó có liên quan — ví dụ như The IBM Developer Kit cho Java. (Xem Tài nguyên để được hướng dẫn.)
  3. Khởi động lại máy khách ISA. Bây giờ bạn có thể cài đặt một công cụ plug-in.
  4. Đi đến dịch vụ Update. Có 2 cách để thực hiện điều này:
    • Bấm chọn biểu tượng Updater ở trang Welcome.
    • Bấm chọn liên kết Updater ở thanh menu.
  5. Lựa chọn nhãn New Plug-ins và đợi cho ISA xây dựng danh mục các plug-in có sẵn để cài đặt.
  6. Mở thư mục Common Component Tools.
  7. Chọn IBM Diagnostic and Monitoring Tools for Java - Dump Analyzer và cài đặt.

Một khi bạn đã cài đặt Dump Analyzer, bạn có thể khởi động nó từ bên trong ISA:

  1. Khởi động lại ISA.
  2. Chọn Tools.
  3. Chọn một sản phẩm mà Dump Analyzer có sẵn — ví dụ IBM Developer Kit cho Java.
  4. Bấm chọn để khởi động công cụ IBM Diagnostic and Monitoring Tools for Java - Dump Analyzer. Màn hình của bạn sẽ giống như Hình 1:
Hình 1. Dump Analyzer trong ISA
Dump Analyzer trong ISA

Đây là cách bạn có thể phân tích một một hệ thống kết xuất có định dạng:

  1. Nhập tên đầy đủ của một hệ thống kết xuất có định dạng được phân tích.
  2. Bấm chọn Estimate Time để nhận được một ước tính sơ bộ khoảng thời gian thực hiện phân tích.
  3. Bấm chọn Analyze. Kết quả sẽ xuất hiện trong cửa sổ khi hoàn thành.

Hình 2 cho thấy một ví dụ về các loại quan sát tóm tắt mà Dump Analyzer xuất ra:

Hình 2. Ví dụ về quan sát tóm lược
Ví dụ về quan sát tóm lược

Chọn Analyze Another để trở lại màn hình giống như trong Hình 1, với tên tập tin kết xuất nhập trước đó vẫn còn nhập vào hộp văn bản đầu tiên.

Selecting an analyzer module

Trường được gán nhãn Optional Parameters trong màn hình dẫn ra trong Hình 1 và 2 điều khiển các bộ phân tích sẽ được thực hiện, cũng như lựa chọn thời gian chạy khác. Thông thường, bạn nên để trống trường này; điều này sẽ làm cho tập lệnh phân tích mặc định, general.sml, được thực thi. Tập lệnh này sẽ kiểm tra các dạng phổ biến nhất của các vấn đề. Tuy nhiên, nếu bạn thực sự biết loại cụ thể của vấn đề mà bạn đang điều tra hoặc nếu bạn cần phải làm việc trên một vấn đề mà không được tích hợp vào các tập lệnh mặc định, bạn rõ ràng có thể chỉ định một hoặc nhiều bộ phân tích được gọi. Những bộ phân tích có thể được gọi với tên của tập tin kịch bản cụ thể hoặc tên lớp của module phân tích cụ thể. Gõ -help trong trường Optional Parameters sẽ liệt kê nhiều tùy chọn thời gian chạy hơn nữa.

Trong phiên bản đầu tiên của công cụ, chỉ có một số rất nhỏ các phân tích thí nghiệm đã được cung cấp ngoài kịch bản mặc định. Chúng bao gồm:

  • DefaultDumpReport (Tên lớp: com.ibm.dtfj.analyzer.deal.basic.DefaultDumpReport): Phân tích này tạo ra một báo cáo khá chi tiết về tất cả các khía cạnh chính của tình trạng máy ảo, tương tự như những gì có thể được tìm thấy trong một tập tin Javacore (nhưng thêm một số thông tin DTFJ đặt trưng).

  • ListZipJars (Tên lớp: com.ibm.dtfj.analyzer.deal.extended.ListZipJars): Phân tích thử nghiệm này cố gắng khám phá tất cả các tập tin zip và JAR đang mở trong máy ảo này, có thể cung cấp cái nhìn sâu sắc vào bất kỳ thư viện tùy chỉnh được sử dụng bởi các ứng dụng hoặc bên trung gian.

  • SystemProperties (Tên lớp: com.ibm.dtfj.analyzer.deal.extended.SystemProperties): Phân tích thử nghiệm này quét máy ảo và in ra giá trị hiện tại của tất cả các tài sản hệ thống Java được định nghĩa trong máy ảo đó.

  • WASBasicInfo (Tên lớp: com.ibm.dtfj.analyzer.deal.was.WASBasicInfo): Đây là một phiên bản rất sơ bộ và thực nghiệm của một phân tích thể hiện rõ việc sử dụng công cụ này để kiểm tra trạng thái của một WebSphere Application Server thời gian chạy thực hiện bên trong máy ảo.

Những bộ phân tích khác hiện đang được cung cấp chủ yếu là để minh họa cho tính linh hoạt của công cụ. Phiên bản sắp tới sẽ có nhiều bộ phân tích chuyên ngành bổ sung cùng với tài liệu hướng dẫn. Ngoài ra, trong bài viết thứ tư trong loạt bài này, bạn sẽ học cách để viết bộ phân tích của riêng bạn để bổ sung những vận chuyển với các công cụ chính nó.


Sử dụng Dump Analyzer từ dòng lệnh

Trong một số trường hợp, việc chạy Dump Analyzer từ dòng lệnh là khá hữu ích (ví dụ như khi quá trình phân tích cần phải được tích hợp vào một số công việc xử lý vấn đề hiện tại). Cách dễ nhất để sử dụng Dump Analyzer là thông qua ISA, và các bạn vừa được thấy cách làm thế nào để tải về các Dump Analyzer trong ISA.

Để chạy một mình Dump Analyzer, bạn cần bốn tập tin JAR và một tập tin script. Đó là:

  • dumpAnalyzer.jar (nằm trong installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(số phiên bản)/WEB-INF/lib)
  • dtfj-interface.jar (nằm trong installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(số phiên bản)/WEB-INF/lib/j9)
  • dtfj.jar for Java 5.0 and above (nằm trong installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(số phiên bản)/WEB-INF/lib/j9)
  • dtfj.jar for Java 1.4.2 (nằm trong installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(số phiên bản)/WEB-INF/lib/sov)
  • general.sml (nằm trong installDir/plugins/com.ibm.java.diagnostics.dbda.isa_(số phiên bản)

Trong tất cả các đường dẫn ở trên, installDir biểu thị thư mục cài đặt ISA, theo mặc định là C:\Program Files\IBM\IBM Support Assistant v3 trên Microsoft Windows hay /opt/IBM/IBM Support Assistant v3 trên Linux™. Bạn có thể sao chép những tập tin này ở nơi khác, hoặc bạn có thể chạy Dump Analyzer trực tiếp từ thư mục InstallDir/plugins/com.ibm.java.diagnostics.dbda.isa_ (số phiên bản). Mặc dù ISA chỉ có sẵn trên Windows và Linux, bạn có thể chạy Dump Analyzer từ dòng lệnh trên bất kỳ nền tảng nào.

Đây là các bước dòng lệnh để chạy Dump Analyzer từ thư mục mặc định trên Windows:

  1. set CP=WEB-INF/lib/dumpAnalyzer.jar
  2. set BCP=WEB-INF/lib/j9/dtfj.jar;WEB-INF/lib/j9/dtfj-interface.jar;WEB-INF/lib/sov/dtfj.jar
  3. java -cp %CP% -Xbootclasspath/p:%BCP% com.ibm.dtfj.analyzer.base.DumpAnalyzer (dumpName) (options)

Và đây là các bước cho Linux:

  1. export CP=WEB-INF/lib/dumpAnalyzer.jar
  2. export BCP=WEB-INF/lib/j9/dtfj.jar:WEB-INF/lib/j9/dtfj-interface.jar:WEB-INF/lib/sov/dtfj.jar
  3. java -cp $CP -Xbootclasspath/p:$BCP com.ibm.dtfj.analyzer.base.DumpAnalyzer (dumpName) (options)

Tại đây, dumpName là tên kết xuất hoàn toàn đủ điều kiện để được phân tích. options là các thông số Runtime có thể được sử dụng để cấu hình Dump Analyzer. Chạy với tùy chọn -help sẽ in ra một danh sách của tất cả các thông số có sẵn.

Hình 3 cho thấy một bản chụp của một số kết quả đầu ra từ Dump Analyzer khi chạy trên dòng lệnh:

Hình 3. Ví dụ về đầu ra dòng lệnh của Dump Analyzer
Ví dụ về đầu ra dòng lệnh của Dump Analyzer

Để biết thêm thông tin chi tiết về DTFJ, xem phần Tài nguyên.

Kế hoạch tương lai

Tại thời điểm viết bài, một phiên bản đầu tiên của Dump Analyzer đã được ra mắt. Nhóm chúng tôi dự định sẽ tiếp tục thực hiện cải tiến và cập nhật một cách thường xuyên. Đặc biệt, chúng tôi sẽ tập trung vào hai lĩnh vực:

DTFJ: Kiến trúc bên trong Dump Analyzer

Dump Analyzer sử dụng DTFJ để thẩm tra các định dạng lỗi của hệ thống. DTFJ là một API hỗ trợ xây dựng các công cụ chẩn đoán của Java, có thể kiểm tra các sự cố hệ thống từ một máy ảo. Trước khi các sự cố hệ thống có thể được kiểm ra, đầu tiên phải được xử lý bởi jextract để thêm thông tin cụ thể của Java runtime. Điều này là cần thiết để jextract chạy với các tệp kết xuất hệ thống (jextract core.dmp, trên dòng lệnh) sử dụng cùng phiên bản với nền tảng Java và chạy trên cùng máy mà phát sinh ra lỗi hệ thống. Một khi điều này được thực hiện, các tập tin kết quả (.sdff cho V1.4 của nền tảng Java, hay .dmp.zip cho V5.0 và cao hơn) có thể được kiểm tra trên bất kỳ hệ thống nào.

Giai đoạn đầu tiên trong phân tích sử dụng DYHJ là xây dựng một tệp ảnh DTFJ sử dụng một tệp ảnh đã được nhà sản xuất tích hợp. Nhà sản xuất này cung cấp một mức độ máy ảo cụ thể và có sự hiểu biết về nền tảng cụ thể của định dạng lỗi hệ thống. Tệp ảnh này thể hiện toàn bộ hình ảnh hệ điều hành; nó cung cấp các phương pháp để truy cập thông tin về kiến trúc của máy phát sinh các sự cố hệ thống, nhưng tính năng chính của nó là khả năng cho phép kiểm tra các địa chỉ không gian nó chứa bên trong tệp ảnh. Sử dụng DTFJ API, nó có thể chuyển từ tệp ảnh đến từng chi tiết các thông số của thời gian chạy, các luồng Java, môi trường, và đối tượng trong vùng heap. Giao diện cho phép sử dụng công cụ để phân tích vấn đề và cung cấp thông tin báo cáo.

  • Chúng tôi sẽ tiếp tục cải tiến giao diện người dùng của công cụ, thêm các trình điều khiển để kiểm tra các sự cố và phân tích khi chạy, nâng cao định dạng đầu ra, có thể bổ sung thêm chế độ tương tác, và nhiều hơn nữa.
  • Chúng tôi sẽ tăng số lượng các phân tích và các kịch bản để bao quát đa dạng hơn nữa các vấn đề.

Lĩnh vực xây dựng phân tích mới là điều đặc biệt thú vị. Với công nghệ phân tích bắt lỗi DTFJ, bây giờ bạn có một cơ chế khá dễ tiếp cận để kiểm tra các đơn vị VM ở mức độ thấp như các luồng và màn hình để chẩn đoán để chẩn đoán lỗi thiếu bộ nhớ, treo máy, các tắc nghẽn, và tương tự như thế; ngoài ra, bạn cũng có thể kiểm tra các nội dung của bất kỳ cấu trúc dữ liệu nào hiện có trong các máy ảo. Đặc biệt, bạn có thể kiểm tra các nội dung của cấu trúc dữ liệu khác nhau mà là một phần của việc thực hiện của ứng dụng hoặc trung gian chạy bên trong máy ảo. Chúng tôi dự định bắt đầu xây dựng một bộ phân tích sử dụng thông tin này để giúp chẩn đoán một loạt các vấn đề trong WebSphere Application Server và các sản phẩm ngăn xếp có khả năng khác.

Mục đích của chúng tôi là làm cho công cụ hữu ích nhất có thể, vì vậy chúng tôi rất hoan nghênh mọi thông tin phản hồi — cả về chính công cụ và về các bộ phân tích mới mà bạn muốn thêm vào —. Thông tin phản hồi có thể được cung cấp thông qua bài viết này hoặc thông qua ISA.

Tiếp theo trong loạt bài này

Bài viết tiếp theo trong loạt bài này giới thiệu về công cụ chẩn đoán và giám sát của IBM dành cho Java – Bộ thu dọn rác (Garbage Collection) và biểu diễn bộ nhớ (Memory Visualizer). Công cụ này giúp bạn điều tra vấn đề hiệu suất dựa trên bộ nhớ Java bằng cách phân tích tập hợp các ghi chép của bộ thu dọn rác. Bạn có thể sử dụng công cụ này để tìm hiểu các kiểu bộ nhớ sử dụng, xác định có rò rỉ bộ nhớ hay không, hoặc điều chỉnh cấu hình bộ thu dọn rác để cải thiện hiệu suất.

Bạn có thể xem lại Dump Analyzer trong bài thứ tư của loạt bài này. Trong bài viết đó, bạn sẽ có cái nhìn sâu về các tính năng mở rộng của công cụ này và biết cách làm thế nào để xây dựng module phân tích của mình.

Tài nguyên

Học tập

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

Thảo luận

  • IBM Java Runtimes và SDKs: Cùng tham gia vào diễn đàn thảo luận và đặt câu hỏi liên quan đến IBM Developer Kits cho nền tảng Java.
  • Cộng đồng công nghệ Java: Cùng tham gia và tương tác với các chuyên gia về kiến trúc J2EE, các nhà phát triển và lập trình viên để chia sẻ kinh nghiệm và kiến thức công nghệ.

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=Công nghệ Java
ArticleID=947228
ArticleTitle=Chẩn đoán Java theo cách của IBM, Phần 1: Giới thiệu công cụ chẩn đoán và theo dõi Java của IBM - Dump Analyzer
publish-date=10042013