אתם צופים במסמכי התיעוד של 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 Service Unavailable (השירות לא זמין)
- כשלים בלחיצת היד של SSL
כדי לפתור את הבעיות האלה, קודם צריך לזהות את צמד הרכיבים שביניהם התרחשה השגיאה. במקרה של Edge, יכול להיות אחד מהזוגות הבאים:
- אפליקציית לקוח ונתב
- נתב ומעבד הודעות
- מעבד בקשות ושרת בק-אנד
אחרי שמזהים את צמד הרכיבים הבעייתי, אפשר ללכוד את מנות הרשת באמצעות tcpdump באחד מהרכיבים האלה או בשניהם.
איך לוכדים חבילות שנשלחות למארח ספציפי או מתקבלות ממנו באמצעות tcpdump
משתמשים בפקודה הבאה של tcpdump כדי לתעד את כל החבילות שנשלחות למארח (כתובת IP) שצוין או מתקבלות ממנו, ולשמור את המידע בקובץ שצוין:
tcpdump -i any -s 0 host <IP address> -w <File name>
כאשר:
| פרמטר | תיאור |
| -i | (interface) מציין את הממשק שממנו צריך ללכוד את החבילות. השימוש בערך any מאפשר ללכוד מנות מכל הממשקים. |
| -s | (snarf/snaplen) מציין את הכמות של כל מנה (packet) שצריך ללכוד. השימוש בערך 0 (אפס) מאפשר לכם לתעד את כל החבילה. |
| כתובת IP | היא כתובת ה-IP של המארח שרוצים ללכוד את המנות שלו |
| שם הקובץ | הוא שם הקובץ שאליו צריך לכתוב את הפלט של tcpdump |
דוגמה
נניח שרוצים ללכוד את החבילות בין מעבד ההודעות לבין שרת הקצה העורפי:
- מתחברים למכונה של מעבד ההודעות.
- קובעים את כתובת ה-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).
קובצי עזר
תמונות מצב של הזיכרון
תמונות מצב של הזיכרון הן תמונת מצב של הזיכרון של תהליך Java. הם מכילים את המידע על אובייקטים ומחלקות של Java ב-heap ברגע שבו נאספת תמונת מצב של הזיכרון. הגודל שלהם בדרך כלל גדול מאוד, והוא נע בין כמה מאות מגה-בייט לכמה גיגה-בייט.
תמונת מצב של הזיכרון שימושית מאוד כשמוצג תהליך Java כמו מעבד בקשות:
- שימוש גבוה בזיכרון
- OutofMemoryError
יצירת תמונת מצב של הזיכרון לתהליך Java
Java מספקת כלי שנקרא jmap, שמאפשר לכם ליצור נתונים סטטיסטיים של הזיכרון או dumps של ערימה של תהליך Java שפועל.
כדי ליצור תמונת מצב של הזיכרון של תהליך Java, משתמשים בפקודת jmap הבאה:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
כאשר:
| פרמטר | תיאור |
| JAVA_HOME | היא ספריית ההתקנה של Java |
| שם קובץ | שם הקובץ שאליו תיכתב תמונת מצב של הזיכרון |
| pid | מזהה התהליך של אפליקציית Java שצריך לצלם את ה-heap dump שלה |
דוגמה
נניח שמעבד ההודעות mp-east צורך הרבה שימוש בזיכרון או שהוא מחזיר שגיאות OutOfMemory. קובעים את מזהה התהליך של מעבד ההודעות באמצעות הפקודה ps במערכת ההפעלה Unix. נניח שהמספר הוא 24569.
מריצים את כלי השירות jmap באופן הבא כדי ליצור את תמונת מצב של הזיכרון:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569
ניתוח של תמונות מצב של הזיכרון
אפשר לנתח את ה-Heap Dumps באמצעות Eclipse MAT (כלי לניתוח זיכרון) כדי לקבוע את דליפות הזיכרון הפוטנציאליות או אילו אובייקטים של Java מובילים לשימוש גבוה בזיכרון.
קובצי עזר
איך אוספים תמונת מצב של הזיכרון
Thread dumps
Thread dump הוא תמונת מצב של כל ה-threads בתהליך Java פעיל. הסטטוס של כל שרשור מוצג עם התוכן של המחסנית שלו, שנקרא דוח קריסות. חלק מה-threads יהיו חלק מאפליקציית Java שפועלת, ואחרים יהיו threads פנימיים של JVM.
ה-thread dump חושף מידע על הפעילויות של כל אחד מהשרשורים של האפליקציה. המידע הזה יכול להיות שימושי מאוד ל:
- אבחון בעיות כמו עליות חדות בשימוש במעבד, זמני תגובה איטיים או אפליקציות Java שלא מגיבות
- אופטימיזציה של הביצועים של האפליקציה ושל מכונת ה-JVM
יצירת Thread Dumps
אפשר ליצור את ה-thread dump של תהליך Java באמצעות כלי השירות jstack, כמו שמוצג בהמשך:
sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>
כאשר:
| פרמטר | תיאור |
| JAVA_HOME | היא ספריית ההתקנה של Java. |
| pid | הוא מזהה התהליך של אפליקציית Java שרוצים לצלם את ה-thread dump שלה. |
| שם קובץ | השם של הקובץ שאליו ייכתב ה-thread dump. |
דוגמה
כדי ליצור dump של השרשור למזהה התהליך 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.
ניתוח של Thread Dumps
אפשר לראות את ה-thread dumps בכל עורך טקסט, כמו vi (Linux) או פנקס רשימות (Windows). במאמר Thread Dump מוסבר על הקטעים השונים של Thread Dump ואיך לפרש את המידע.