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

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

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

ยูทิลิตีการดักจับแพ็กเก็ต TCP/IP (tcpdump)

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

yum install tcpdump

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

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

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

  • แอปและเราเตอร์ของไคลเอ็นต์
  • ตัวประมวลผลเราเตอร์และข้อความ
  • ตัวประมวลผลข้อความและเซิร์ฟเวอร์แบ็กเอนด์

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

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

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

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

โดยที่

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

ตัวอย่าง

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

  1. ลงชื่อเข้าใช้เครื่องประมวลผลข้อความ
  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

กำลังวิเคราะห์ tcpdumps

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

รายการอ้างอิง

ฮีพดัมพ์

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

ฮีพดัมพ์จะมีประโยชน์มากเมื่อโปรเซสของ Java เช่น ตัวประมวลผลข้อความแสดงสิ่งต่อไปนี้

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

กำลังสร้างฮีพดัมพ์สำหรับกระบวนการของ Java

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

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

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

โดยที่

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

ตัวอย่าง

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

เรียกใช้ยูทิลิตี Jmap ต่อไปนี้เพื่อสร้างฮีพดัมพ์

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

กำลังวิเคราะห์ฮีพดัมพ์

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

รายการอ้างอิง

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

ยูทิลิตี jmap

หน้า jmap man

เครื่องมือวิเคราะห์หน่วยความจำ (MAT)


ขยะชุดข้อความ

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

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

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

กำลังสร้างไฟล์ดัมพ์ชุดข้อความ

คุณสร้างดัมพ์ Thread สำหรับกระบวนการ Java ได้โดยใช้ยูทิลิตี jstack ดังที่แสดงด้านล่าง

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

โดยที่

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

ตัวอย่าง

หากต้องการสร้างดัมพ์ Thread สำหรับรหัสกระบวนการ 37320 ในตัวประมวลผลข้อความ mp-east ให้ใช้คำสั่งต่อไปนี้

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

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

กำลังวิเคราะห์เทรดดัมพ์

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

รายการอ้างอิง