Nhật ký và công cụ chẩn đoán

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Chủ đề này thảo luận về các công cụ mạng, công cụ JVM và nhật ký chẩn đoán mà bạn có thể dùng để khắc phục các vấn đề liên quan đến mạng và JVM trên Apigee Edge.

Tiện ích theo dõi gói TCP/IP (tcpdump)

Công cụ tcpdump là một công cụ dòng lệnh để theo dõi gói, cho phép bạn thu thập hoặc lọc các gói TCP/IP được nhận hoặc truyền qua mạng. Công cụ này có trên các hệ điều hành dựa trên Linux/Unix. Bạn có thể cài đặt tiện ích này bằng yum như sau:

yum install tcpdump

Công cụ tcpdump rất hữu ích khi khắc phục sự cố liên quan đến mạng hoặc SSL. Ví dụ:

  • Lỗi 502 Cổng vào bị lỗi (do ngoại lệ EOF)
  • Lỗi 503 Không có dịch vụ
  • Lỗi bắt tay giao thức SSL

Để khắc phục bất kỳ vấn đề nào trong số này, trước tiên, bạn phải xác định cặp thành phần mà lỗi xảy ra. Trong trường hợp Edge, đó có thể là một trong những cặp sau:

  • Ứng dụng khách và Bộ định tuyến
  • Bộ định tuyến và Bộ xử lý thông báo
  • Bộ xử lý thông báo và máy chủ phụ trợ

Sau khi xác định được cặp thành phần gây ra vấn đề, bạn có thể thu thập các gói mạng bằng cách sử dụng tcpdump trên một hoặc cả hai thành phần này.

Ghi lại các gói được gửi đến/nhận từ một máy chủ lưu trữ cụ thể bằng tcpdump

Sử dụng lệnh tcpdump sau đây để thu thập tất cả các gói được gửi đến hoặc nhận từ một máy chủ đã chỉ định (địa chỉ IP) và lưu thông tin vào tệp đã chỉ định:

tcpdump -i any -s 0 host <IP address> -w <File name>

Trong trường hợp:

Tham số Nội dung mô tả
-i (interface) chỉ định giao diện mà từ đó các gói sẽ được ghi lại. Khi sử dụng giá trị "any", bạn có thể ghi lại các gói từ tất cả giao diện.
-s (snarf/snaplen) chỉ định số lượng của mỗi gói cần chụp. Việc sử dụng giá trị 0 (không) cho phép bạn ghi lại toàn bộ gói.
Địa chỉ IP là địa chỉ IP của máy chủ lưu trữ mà chúng ta muốn thu thập các gói
Tên tệp là tên của tệp mà tcpdump phải ghi vào

Ví dụ

Giả sử bạn muốn ghi lại các gói giữa Trình xử lý tin nhắn và Máy chủ phụ trợ:

  1. Đăng nhập vào máy xử lý tin nhắn.
  2. Xác định địa chỉ IP của Máy chủ phụ trợ (giả sử là 22.22.22.22) mà chúng ta muốn thu thập các gói.

Sử dụng lệnh sau để ghi lại các gói mạng cho một máy chủ có địa chỉ IP cụ thể:

tcpdump -i any -s 0 host 22.22.22.22 -w rmp-123.pcap

Nếu máy chủ phụ trợ phân giải thành nhiều địa chỉ IP, hãy sử dụng tên máy chủ của máy chủ phụ trợ trong lệnh tcpdump như minh hoạ dưới đây:

tcpdump -i any -s 0 host <Hostname> -w rmp-123.pcap

Nếu có nhiều máy chủ phụ trợ có địa chỉ IP khác nhau (22.22.22.22, 33.33.33.33 và 44.44.44.44), hãy dùng lệnh tcpdump bên dưới:

tcpdump -i any -s 0 host 22.22.22.22 or host 33.33.33.33 or host 44.44.44.44 -w rmp-123.pcap

Phân tích tcpdump

Bạn có thể xem hoặc phân tích tcpdump bằng lệnh tcpdump hoặc công cụ dựa trên GUI Wireshark.

Tài liệu tham khảo

Tệp báo lỗi

Tệp kết xuất vùng nhớ khối xếp là ảnh chụp nhanh bộ nhớ của một quy trình Java. Chúng chứa thông tin về các đối tượng và lớp Java trong vùng nhớ heap tại thời điểm thu thập tệp báo lỗi. Chúng thường có kích thước khá lớn, từ vài trăm MB đến vài GB.

Tệp báo lỗi rất hữu ích khi một quy trình Java (chẳng hạn như Trình xử lý thông báo) cho thấy:

  • Mức sử dụng bộ nhớ cao
  • OutofMemoryError

Tạo tệp báo lỗi cho một quy trình Java

Java cung cấp một tiện ích có tên là jmap, cho phép bạn tạo số liệu thống kê về bộ nhớ hoặc kết xuất vùng nhớ khối xếp của một quy trình Java đang chạy.

Sử dụng lệnh jmap sau đây để tạo tệp báo lỗi của một quy trình Java:

sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>

Trong trường hợp:

Tham số Nội dung mô tả
JAVA_HOME Là thư mục cài đặt của Java
filename Là tên tệp mà tệp báo lỗi sẽ được ghi vào
pid Là mã nhận dạng quy trình của ứng dụng Java mà bạn phải ghi lại kết xuất đầu

Ví dụ

Giả sử Trình xử lý thông báo mp-east có mức sử dụng bộ nhớ cao hoặc đang gặp Lỗi hết bộ nhớ. Xác định mã nhận dạng quy trình của Trình xử lý thông báo bằng lệnh ps trên hệ điều hành Unix. Giả sử đó là 24569.

Chạy tiện ích jmap như sau để tạo tệp báo lỗi:

sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569

Phân tích tệp báo lỗi

Bạn có thể phân tích Heap Dump bằng Eclipse MAT (Công cụ phân tích bộ nhớ) để xác định các lỗi rò rỉ bộ nhớ tiềm ẩn hoặc những đối tượng Java nào đang dẫn đến mức sử dụng bộ nhớ cao.

Tài liệu tham khảo

Cách thu thập tệp báo lỗi

tiện ích jmap

jmap man page

Công cụ phân tích bộ nhớ (MAT)


Kết xuất luồng

Tệp kết xuất luồng là ảnh chụp nhanh trạng thái của tất cả các luồng trong một quy trình Java đang chạy. Trạng thái của mỗi luồng được trình bày cùng với nội dung của ngăn xếp, được gọi là dấu vết ngăn xếp. Một số luồng sẽ là một phần của ứng dụng Java đang chạy, trong khi những luồng khác sẽ là luồng nội bộ JVM.

Một kết xuất luồng cho thấy thông tin về từng hoạt động của luồng trong ứng dụng. Thông tin này có thể rất hữu ích cho:

  • Chẩn đoán các vấn đề như CPU tăng đột biến, thời gian phản hồi chậm hoặc các ứng dụng Java không phản hồi
  • Tối ưu hoá hiệu suất ứng dụng và JVM

Tạo kết xuất luồng

Bạn có thể tạo tệp kết xuất luồng cho một quy trình Java bằng tiện ích jstack như minh hoạ bên dưới:

sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>

Trong trường hợp:

Tham số Nội dung mô tả
JAVA_HOME Là thư mục cài đặt của Java.
pid Là mã nhận dạng quy trình của ứng dụng Java mà bạn muốn ghi lại kết xuất luồng.
filename Là tên tệp mà kết xuất luồng sẽ được ghi vào.

Ví dụ

Để tạo một kết xuất luồng cho mã nhận dạng quy trình 37320 trên Message Processor mp-east, hãy dùng lệnh sau:

sudo -u apigee <JAVA_HOME>/bin/jstack -l 37320 > /opt/apigee/edge-message-processor/mp-east-threadDump.txt

Theo ví dụ trên, tệp kết xuất luồng của quy trình sẽ được lưu vào tệp /opt/apigee/edge-message-processor/mp-east-threadDump.txt.

Phân tích kết xuất luồng

Bạn có thể xem kết xuất luồng trong bất kỳ trình chỉnh sửa văn bản nào, chẳng hạn như vi (Linux), notepad (Windows). Hãy tham khảo Thread Dump để biết thông tin chi tiết về các phần khác nhau của Thread Dump và cách diễn giải thông tin.

Tài liệu tham khảo