מבוא
אם באפליקציה יש זמן אחזור גבוה מהרגיל, תפוקה נמוכה או פסק זמן עם לקוח Java Datastore, יכול להיות שהבעיה נובעת מהגדרת gRPC בצד הלקוח ולא מהקצה העורפי של Firestore/Datastore. המדריך הזה יעזור לכם לאבחן ולפתור בעיות נפוצות שקשורות להגבלת קצב העברת הנתונים בצד הלקוח, להגדרות לא תקינות של מאגר הערוצים ולשינויים תכופים מדי בערוצים.
אבחון
כשמשתמשים בלקוחות Java, חשוב להפעיל רישום מפורט של gRPC ו-gax-java כדי לעקוב אחרי הדינמיקה של מאגר הערוצים, לאבחן הגבלת קצב, לפתור בעיות בשימוש חוזר בחיבורים או לזהות תחלופה מוגזמת של ערוצים.
הפעלת רישום ביומן ללקוחות Java
כדי להפעיל רישום מפורט ביומן, משנים את הקובץ logging.properties באופן הבא:
## This tracks the lifecycle events of each grpc channel
io.grpc.ChannelLogger.level=FINEST
## Tracks channel pool events(resizing, shrinking) from GAX level
com.google.api.gax.grpc.ChannelPool.level=FINEST
בנוסף, צריך לעדכן את רמת רישום הפלט ביומן בקובץ logging.properties כדי לתעד את היומנים האלה:
# This could be changed to a file or other log output
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
שימוש בתצורה
אפשר להחיל קובץ logging.properties באחת משתי דרכים:
1. דרך מאפיין מערכת של JVM
מוסיפים את הארגומנט הזה כשמפעילים את אפליקציית Java:
-Djava.util.logging.config.file=/path/to/logging.properties
2. טעינה באמצעות תוכנה
השיטה הזו שימושית לבדיקות שילוב או לאפליקציות שבהן ניהול הגדרות הרישום מתבצע בתוך הקוד. חשוב לוודא שהקוד הזה יופעל בשלב מוקדם במחזור החיים של האפליקציה.
LogManager logManager = LogManager.getLogManager();
try (final InputStream is = Main.class.getResourceAsStream("/logging.properties")) {
logManager.readConfiguration(is);
}
דוגמה לרישום ביומן
אחרי שמפעילים רישום מפורט ביומן, מוצגות הודעות משולבות מ-com.google.api.gax.grpc.ChannelPool ומ-io.grpc.ChannelLogger:
ערוצים שהוקצו להם פחות מדי משאבים, מה שהוביל להרחבת מאגר הערוצים:
09:15:30.123 [pool-1-thread-1] DEBUG com.google.api.gax.grpc.ChannelPool - Detected throughput peak of 40, expanding channel pool size: 4 -> 6.
09:15:30.124 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.ChannelLogger - [Channel<5>: (datastore.googleapis.com:443)] Entering IDLE state
09:15:30.124 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.ChannelLogger - [Channel<6>: (datastore.googleapis.com:443)] Entering IDLE state
09:15:30.125 [grpc-nio-worker-ELG-1-5] TRACE io.grpc.ChannelLogger - [Channel<5>: (datastore.googleapis.com:443)] newCall() called
09:15:30.126 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.