เครื่องมือและบันทึกการวินิจฉัย

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

หัวข้อนี้จะกล่าวถึงเครื่องมือเครือข่าย เครื่องมือ JVM และบันทึกการวินิจฉัยที่คุณใช้เพื่อ แก้ปัญหาเกี่ยวกับเครือข่ายและ JVM ใน Apigee Edge ได้

ยูทิลิตี TCP/IP Packet Sniffer (tcpdump)

เครื่องมือ tcpdump เป็นเครื่องมือ Packet Sniffer แบบบรรทัดคำสั่งที่ช่วยให้คุณ บันทึกหรือกรองแพ็กเก็ต TCP/IP ที่ได้รับหรือโอนผ่านเครือข่ายได้ โดยเครื่องมือนี้พร้อมใช้งาน ในระบบปฏิบัติการที่ใช้ Linux/Unix คุณสามารถติดตั้งยูทิลิตีนี้โดยใช้ yum ได้ดังนี้

yum install tcpdump

เครื่องมือ tcpdump มีประโยชน์สำหรับการแก้ปัญหาเกี่ยวกับเครือข่ายหรือ SSL เช่น

  • ข้อผิดพลาด 502 เกตเวย์ไม่ถูกต้อง (เกิดจากข้อยกเว้น EOF)
  • ข้อผิดพลาด 503 ไม่พร้อมให้บริการ
  • แฮนด์เชค SSL ไม่สำเร็จ

หากต้องการแก้ปัญหาเหล่านี้ คุณต้องกำหนดคู่คอมโพเนนต์ที่เกิดข้อผิดพลาดระหว่าง ในกรณีของ Edge คอมโพเนนต์ดังกล่าวอาจเป็นคู่ใดคู่หนึ่งต่อไปนี้

  • แอปไคลเอ็นต์และเราเตอร์
  • เราเตอร์และ Message Processor
  • Message Processor และเซิร์ฟเวอร์แบ็กเอนด์

เมื่อระบุคู่คอมโพเนนต์ที่มีปัญหาได้แล้ว คุณจะบันทึกแพ็กเก็ตเครือข่าย โดยใช้ tcpdump ในคอมโพเนนต์เหล่านี้อย่างน้อย 1 รายการได้

การบันทึกแพ็กเก็ตที่ส่งไปยัง/ได้รับจากโฮสต์ที่เฉพาะเจาะจงโดยใช้ tcpdump

ใช้คำสั่ง tcpdump ต่อไปนี้เพื่อบันทึกแพ็กเก็ตทั้งหมดที่ส่งไปยังหรือได้รับจากโฮสต์ (ที่อยู่ IP) ที่ระบุ และบันทึกข้อมูลในไฟล์ที่ระบุ

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

โดยที่

พารามิเตอร์ คำอธิบาย
-i (อินเทอร์เฟซ) ระบุอินเทอร์เฟซที่ควรบันทึกแพ็กเก็ต การใช้ ค่า "any" จะช่วยให้บันทึกแพ็กเก็ตจากอินเทอร์เฟซทั้งหมดได้
-s (snarf/snaplen) ระบุจำนวนแพ็กเก็ตที่จะบันทึก การใช้ค่า 0 (ศูนย์) จะช่วยให้คุณบันทึกแพ็กเก็ตทั้งหมดได้
ที่อยู่ IP คือที่อยู่ IP ของโฮสต์ที่เราต้องการบันทึกแพ็กเก็ต
ชื่อไฟล์ คือชื่อไฟล์ที่ต้องเขียน tcpdump

ตัวอย่าง

สมมติว่าคุณต้องการบันทึกแพ็กเก็ตระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์

  1. เข้าสู่ระบบเครื่อง Message Processor
  2. กำหนดที่อยู่ IP ของเซิร์ฟเวอร์แบ็กเอนด์ (สมมติว่าเป็น 22.22.22.22) ที่เราต้องการ บันทึกแพ็กเก็ต

ใช้คำสั่งต่อไปนี้เพื่อบันทึกแพ็กเก็ตเครือข่ายสำหรับโฮสต์ที่มีที่อยู่ IP ที่เฉพาะเจาะจง

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

หากเซิร์ฟเวอร์แบ็กเอนด์มีการกำหนดที่อยู่ IP หลายรายการ ให้ใช้ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ ในคำสั่ง tcpdump ดังที่แสดงด้านล่าง

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

หากมีเซิร์ฟเวอร์แบ็กเอนด์หลายรายการที่มีที่อยู่ IP ต่างกัน (22.22.22.22, 33.33.33.33 และ 44.44.44.44) ให้ใช้คำสั่ง tcpdump ด้านล่าง

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

การวิเคราะห์ tcpdump

คุณสามารถดูหรือวิเคราะห์ tcpdump ได้โดยใช้คำสั่ง tcpdump หรือเครื่องมือ Wireshark ที่ใช้ GUI Wireshark

ข้อมูลอ้างอิง

ฮีปดัมป์

ฮีปดัมป์คือสแนปช็อตของหน่วยความจำของกระบวนการ Java โดยจะมีข้อมูลเกี่ยวกับออบเจ็กต์และคลาส Java ในฮีป ณ เวลาที่รวบรวมฮีปดัมป์ ซึ่งมักจะมีขนาดค่อนข้างใหญ่ ตั้งแต่ 100 เมกะไบต์ไปจนถึงหลาย กิกะไบต์

ฮีปดัมป์มีประโยชน์มากเมื่อกระบวนการ Java เช่น Message Processor แสดงสิ่งต่อไปนี้

  • การใช้งานหน่วยความจำสูง
  • OutofMemoryError

การสร้างฮีปดัมป์สำหรับกระบวนการ Java

Java มีเครื่องมือที่เรียกว่า jmap ซึ่งช่วยให้คุณสร้างสถิติหน่วยความจำ หรือฮีปดัมป์ของกระบวนการ Java ที่กำลังทำงานได้

ใช้คำสั่ง jmap ต่อไปนี้เพื่อสร้างฮีปดัมป์ของกระบวนการ Java

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

โดยที่

พารามิเตอร์ คำอธิบาย
JAVA_HOME คือไดเรกทอรีการติดตั้ง Java
filename คือชื่อไฟล์ที่จะเขียนฮีปดัมป์
pid คือรหัสกระบวนการของแอปพลิเคชัน Java ที่ต้องบันทึกฮีปดัมป์

ตัวอย่าง

สมมติว่า Message Processor mp-east มีการใช้งานหน่วยความจำสูงหรือแสดงข้อผิดพลาด OutOfMemory กำหนดรหัสกระบวนการของ Message Processor โดยใช้คำสั่ง ps ในระบบปฏิบัติการ Unix สมมติว่าเป็น 24569

เรียกใช้เครื่องมือ jmap ดังนี้เพื่อสร้างฮีปดัมป์

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

การวิเคราะห์ฮีปดัมป์

คุณสามารถวิเคราะห์ฮีปดัมป์ได้โดยใช้ Eclipse MAT (Memory Analyzer Tool) เพื่อกำหนด การรั่วไหลของหน่วยความจำที่อาจเกิดขึ้นหรือออบเจ็กต์ Java ที่ทำให้มีการใช้งานหน่วยความจำสูง

ข้อมูลอ้างอิง

วิธีรวบรวมฮีปดัมป์

เครื่องมือ jmap

หน้าคู่มือ jmap

เครื่องมือ Memory Analyzer (MAT)


เธรดดัมป์

เธรดดัมป์คือสแนปช็อตของสถานะของเธรดทั้งหมดในกระบวนการ Java ที่กำลังทำงาน สถานะของแต่ละเธรดจะแสดงพร้อมกับเนื้อหาของสแต็ก ซึ่งเรียกว่าสแต็กเทรซ เธรดบางรายการจะเป็นส่วนหนึ่งของแอปพลิเคชัน Java ที่กำลังทำงาน ขณะที่เธรดอื่นๆ จะเป็น เธรดภายในของ JVM

เธรดดัมป์จะแสดงข้อมูลเกี่ยวกับกิจกรรมของเธรดแต่ละรายการในแอปพลิเคชัน ข้อมูลนี้มีประโยชน์อย่างมากสำหรับสิ่งต่อไปนี้

  • วิเคราะห์ปัญหาต่างๆ เช่น CPU Spike, เวลาในการตอบสนองช้า หรือแอปพลิเคชัน Java ไม่ตอบสนอง
  • เพิ่มประสิทธิภาพแอปพลิเคชันและ JVM

การสร้างเธรดดัมป์

คุณสามารถสร้างเธรดดัมป์สำหรับกระบวนการ Java ได้โดยใช้เครื่องมือ jstack ดังที่แสดง ด้านล่าง

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

โดยที่

พารามิเตอร์ คำอธิบาย
JAVA_HOME คือไดเรกทอรีการติดตั้ง Java
pid คือรหัสกระบวนการของแอปพลิเคชัน Java ที่คุณต้องการบันทึกเธรดดัมป์
filename คือชื่อไฟล์ที่จะเขียนเธรดดัมป์

ตัวอย่าง

หากต้องการสร้างเธรดดัมป์สำหรับรหัสกระบวนการ 37320 ใน Message Processor mp-east ให้ใช้คำสั่งต่อไปนี้

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

จากตัวอย่างข้างต้น ระบบจะบันทึกเธรดดัมป์ของกระบวนการลงในไฟล์ /opt/apigee/edge-message-processor/mp-east-threadDump.txt

การวิเคราะห์เธรดดัมป์

คุณสามารถดูเธรดดัมป์ได้ในโปรแกรมแก้ไขข้อความ เช่น vi (Linux), notepad (Windows) โปรดดูรายละเอียดเกี่ยวกับส่วนต่างๆ ของเธรดดัมป์และวิธีตีความ ข้อมูลได้ที่ เธรดดัมป์

ข้อมูลอ้างอิง