
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ụ
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:
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.

