Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
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 sự cố về mạng và các vấn đề liên quan đến JVM trên Apigee Edge.
Tiện ích đánh dấu gói dữ liệu TCP/IP (tcpdump)
Công cụ tcpdump là một công cụ đánh dấu gói ở dòng lệnh, cho phép bạn thu thập hoặc lọc các gói TCP/IP được nhận hoặc chuyển qua mạng. Ứng dụng này có sẵn 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 để khắc phục sự cố liên quan đến mạng hoặc SSL. Ví dụ:
- 502 Lỗi cổng vào không hợp lệ (gây ra do ngoại lệ EOF)
- 503 Lỗi không có dịch vụ
- Lỗi bắt tay 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 xảy ra lỗi. Trong trường hợp của Edge, đó có thể là một trong những cặp sau đây:
- Ứng dụng khách và Bộ định tuyến
- Bộ định tuyến và bộ xử lý thư
- 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ặp sự cố, bạn có thể ghi lại 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ủ cụ thể bằng tcpdump
Dùng lệnh tcpdump sau đây để ghi lại tất cả các gói được gửi đến hoặc nhận từ một máy chủ lưu trữ (địa chỉ IP) đã chỉ định rồi lưu thông tin trong tệp đã chỉ định:
tcpdump -i any -s 0 host <IP address> -w <File name>
Trong trường hợp:
Tham số | Mô tả |
-i | (giao diện) chỉ định giao diện mà từ đó gói sẽ được ghi lại. Việc sử dụng giá trị "any" cho phép thu thập gói tin từ tất cả các giao diện. |
-giây | (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 chụp được toàn bộ gói. |
Địa chỉ IP | là địa chỉ IP của máy chủ 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 được ghi vào |
Ví dụ:
Giả sử bạn muốn thu thập các gói giữa Bộ xử lý thông báo và Máy chủ phụ trợ:
- Đăng nhập vào Máy xử lý thư.
- Xác định địa chỉ IP của Máy chủ phụ trợ (giả sử địa chỉ đó là 22.22.22.22) mà chúng ta muốn thu thập các gói.
Sử dụng lệnh sau để thu thập các gói tin mạng của một máy chủ lưu trữ 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 sử 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 tcpdumps
Bạn có thể xem hoặc phân tích tcpdumps 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 báo lỗi là thông tin tổng quan nhanh về bộ nhớ của một quy trình Java. Các tệp này chứa thông tin về các đối tượng và lớp Java trong vùng nhớ khối xếp tại thời điểm thu thập tệp báo lỗi. Các tệp này thường có kích thước khá lớn, dao động từ vài 100 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ư cho thấy:
- Mức sử dụng bộ nhớ cao
- OutofMemoryError
Tạo tệp báo lỗi cho quy trình Java
Java cung cấp một tiện ích có tên jmap, cho phép bạn tạo số liệu thống kê về bộ nhớ hoặc tệp báo lỗi của một quy trình Java đang chạy.
Hãy dùng lệnh jmap sau đây để tạo tệp báo lỗi của 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ố | Mô tả |
JAVA_HOME | Là thư mục cài đặt của Java |
filename | Là tên tệp sẽ được ghi tệp báo lỗi |
pid | Là mã tiến trình của ứng dụng Java có tệp kết xuất đầu phải được thu thập |
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 báo lỗi OutOfMemory. Xác định mã nhận dạng quy trình của Bộ xử lý thông báo bằng lệnh ps trên hệ điều hành Unix. Giả sử mã đó 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 vùng nhớ khối xếp bằng Eclipse MAT (Công cụ phân tích bộ nhớ) để xác định khả năng rò rỉ bộ nhớ hoặc đố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ông cụ phân tích bộ nhớ (MAT)
Tệp kết xuất luồng
Tệp kết xuất luồng (thread dump) là thông tin tổng quan nhanh về trạng thái của tất cả các luồng trong quy trình Java đang chạy. Trạng thái của mỗi luồng được trình bày 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 một số khác sẽ là các luồng nội bộ của JVM.
Tệp kết xuất luồng cho thấy thông tin về từng hoạt động của luồng của ứng dụng. Thông tin này có thể rất hữu ích trong việc:
- Chẩn đoán các sự cố như tăng đột biến CPU, 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á ứng dụng và hiệu suất của JVM
Tạo tệp kết xuất luồng
Bạn có thể tạo tệp kết xuất luồng cho quy trình Java bằng tiện ích jstack như minh hoạ dưới đây:
sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>
Trong trường hợp:
Tham số | Mô tả |
JAVA_HOME | Là thư mục cài đặt của Java. |
pid | Là mã tiến trình của ứng dụng Java có tệp kết xuất luồng mà bạn muốn thu thập. |
filename | Là tên tệp sẽ được ghi vào tệp kết xuất luồng (thread dump). |
Ví dụ:
Để tạo tệp kết xuất luồng cho mã quy trình 37320 trên Bộ xử lý thông báo mp-east, hãy sử 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 chuỗi
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 Tệp kết xuất luồng để biết thông tin chi tiết về các phần khác nhau của Tệp kết xuất luồng và cách diễn giải thông tin.