שגיאה של זמן קצוב לתפוגה

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

פריסת תיקונים של שרת proxy ל-API דרך ממשק המשתמש של Edge או דרך API לניהול נכשלת עם שגיאת זמן קצוב לתפוגה.

הודעות שגיאה

Click to change deployment status. 
The revision is deployed and traffic can flow, but flow may be impaired. 
Error: Call timed out; either server is down or server is not reachable

סיבות אפשריות

הסיבות הנפוצות לבעיה הזו הן:

הסיבה פרטים בשם
בעיה בקישוריות לרשת התקשורת בין שרת הניהול למעבד ההודעות נכשלה בגלל בעיות בקישוריות לרשת או כללי חומת אש. משתמשים בענן פרטי בלבד
חבילת שרתי proxy גדולה ל-API יכול להיות שיעבור זמן רב עד שמעבד בקשות יופעל אם חבילת ה-proxy ל-API גדולה מדי, מה שיוביל לפסק זמן של RPC. משתמשים בענן פרטי ובענן ציבורי

בעיה בקישוריות לרשת

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

אבחון

  1. כדי לקבל את סטטוס הפריסה של ה-API הספציפי שבו מופיעה השגיאה, משתמשים בקריאה הבאה ל-Management API:
    curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>

    פלט לדוגמה שבו מוצגת השגיאה:

    { 
                    "error": "Call timed out; either server is down or server is not reachable", 
                    "status": "error", 
                    "type": [ 
                    "message-processor" 
                    ], 
                    "uUID": "ebbc1078-cbde-4a00-a7db-66a3c1b2b748" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "message-processor" 
                    ], 
                    "uUID": "204e2b7e-52f7-46d9-b458-20f9bfb51e6d" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "router" 
                    ], 
                    "uUID": "967e63c6-ee95-47c0-9608-f4a32638fb1e" 
                    }, 
                    { 
                    "status": "deployed", 
                    "type": [ 
                    "router" 
                    ], 
                    "state" : "error"
                    } 

    פלט הדוגמה שלמעלה מראה שהשגיאה התרחשה באחד ממעבדי ההודעות עם ה-UUID ‏ "ebbc1078-cbde-4a00-a7db-66a3c1b2b748".

  2. על סמך הפלט של סטטוס ה-Deployment (פריסה) של proxy ל-API, מתחברים לכל אחד ממעבדי הבקשות עם ה-UUID המתאים שבו השגיאה הופיעה ומבצעים את השלבים הבאים:
    1. בודקים אם מעבד ההודעות מאזין ליציאה 4528:
      netstat -an | grep LISTEN | grep 4528

      אם מעבד ההודעות לא מאזין ליציאה 4528, צריך להפעיל מחדש את מעבד ההודעות:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    2. בודקים מחדש את סטטוס הפריסה של proxy ל-API באמצעות הקריאה ל-API של Management שמוצגת בשלב 1 למעלה. אם לא מוצגות שגיאות, סימן שהבעיה נפתרה.
  3. אם הבעיה נמשכת, צריך לבדוק את הקישוריות משרת הניהול למעבד ההודעות ביציאה 4528 באמצעות השלבים הבאים:
    1. אם telnet זמין, משתמשים ב-telnet:
      telnet <MessageProcessor_IP> 4528
    2. אם telnet לא זמין, משתמשים ב-netcat כדי לבדוק את הקישוריות באופן הבא:
      nc -vz <MessageProcessor_IP> 4528
    3. אם מקבלים את התגובה Connection Refused (החיבור נדחה) או Connection timed out (החיבור חרג מזמן ההמתנה), צריך לפנות לצוות תפעול הרשת.
  4. בודקים את הקישוריות ממעבד ההודעות לשרת הניהול ביציאה 4526 באמצעות השלבים הבאים:
    1. אם telnet זמין, משתמשים ב-telnet:
      telnet <management-server-IP> 4526
    2. אם telnet לא זמין, משתמשים ב-netcat כדי לבדוק את הקישוריות באופן הבא:
      nc -vz <management-server-IP> 4526 
    3. אם מקבלים את התגובה 'החיבור נדחה' או 'החיבור הסתיים בגלל חוסר פעילות', צריך לפנות לצוות התפעול של הרשת.
  5. כדאי לעבוד עם צוות תפעול הרשת ולבצע את הפעולות הבאות:
    1. מוודאים שפרוטוקול ה-RPC מותר גם בשרת הניהול וגם במעבד ההודעות.
    2. מסירים את כל ההגבלות של חומת האש או את כללי האבטחה שהוגדרו בין שרתי הניהול לבין מעבדי ההודעות, כדי לאפשר קישוריות ליציאה 4526 בשרת הניהול, וקישוריות משרת הניהול למעבדי ההודעות ביציאה 4528.
  6. בודקים שוב את סטטוס הפריסה (כמו שמתואר בשלב 1 למעלה). אם לא מופיעות שגיאות, סימן שהבעיה נפתרה.
  7. אם הבעיה נמשכת, בודקים אם יש בעיה ברשת במעבד ההודעות. אם יש בעיה ברשת, הפעלה מחדש של מעבד ההודעות הספציפי שבו מופיעה שגיאת הזמן הקצוב לתפוגה (כפי שמופיע בפלט של סטטוס הפריסה) עשויה לפתור את הבעיה:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  8. אם הבעיה נמשכת, כדאי לבדוק את היומנים של שרת הניהול בכתובת: (/opt/apigee/var/log/edge-management-server/logs/system.log).

    דוגמה לשגיאת פסק זמן של שיחה מיומן שרת הניהול

    2016-05-17 09:29:56,448 org:myorg env:prod qtp281969267-360792 ERROR DISTRIBUTION - RemoteServicesConfigEventHandler.configureServers() : exception for server with uuid e1381db7-d83b-4752-ae04-2de33f07e555 : cause = RPC Error 504: Call timed out communication error = true 
            com.apigee.rpc.RPCException: Call timed out 
            at com.apigee.rpc.impl.AbstractCallerImpl.handleTimeout(AbstractCallerImpl.java:64) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.handleTimeout(RPCMachineImpl.java:483) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.access$000(RPCMachineImpl.java:402) ~[rpc-1.0.0.jar:na] 
            at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall$1.run(RPCMachineImpl.java:437) ~[rpc-1.0.0.jar:na] 
            at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:532) ~[netty-all-4.0.0.CR1.jar:na] 
            at io.netty.util.HashedWheelTimer$Worker.notifyExpiredTimeouts(HashedWheelTimer.java:430) ~[netty-all-4.0.0.CR1.jar:na] 
            at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:371) ~[netty-all-4.0.0.CR1.jar:na] 
            at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_79] 
            

    אם מופיעה שגיאה דומה לזו שמוצגת בדוגמה שלמעלה, צריך להגדיל את הזמן הקצוב לתפוגה של RPC בשרת הניהול, כדי שאם תהיה האטה ברשת, יהיה מספיק זמן לשרת הניהול להתחבר למעבד ההודעות.

רזולוציה

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

  1. כדי להגדיל את הזמן הקצוב לתפוגה של RPC:
    1. יוצרים את הקובץ /opt/apigee/customer/application/management-server.properties במחשב של שרת הניהול, אם הוא עדיין לא קיים.
    2. מוסיפים את השורה הבאה לקובץ:
      conf_cluster_rpc.connect.timeout=<time in seconds>

      ערך ברירת המחדל של הזמן הקצוב לתפוגה של RPC הוא 10, ומומלץ להגדיל אותו ל-40 שניות. מגדירים אותו כך:

      conf_cluster_rpc.connect.timeout=40
    3. מוודאים שהקובץ הזה בבעלות apigee:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. מפעילים מחדש את שרת הניהול:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    5. אם יש לכם יותר משרת ניהול אחד, צריך לחזור על השלבים שלמעלה בכל שרתי הניהול.
    6. פורסים את שרת ה-proxy ל-API בממשק המשתמש של Edge או באמצעות קריאה ל-Edge Management API. אם פריסת ה-proxy ל-API מתבצעת ללא בעיות, סימן שהבעיה נפתרה.
  2. אם הבעיה נמשכת, צריך לאסוף את הפקודה tcpdump משרת הניהול וממעבד ההודעות. מפעילים את הפקודה tcpdump בכל אחד מהשרתים, ואז מתחילים את הפריסה של API Proxy מממשק המשתמש או באמצעות Management API:
    1. מריצים את הפקודה הבאה של tcpdump משרת הניהול:
      tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
    2. מריצים את הפקודה הבאה של tcpdump ממעבד ההודעות:
      tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
    3. כדי לקבל עזרה בניתוח של קובצי ה-tcpdump ולפתור את הבעיה, אפשר לפנות אל התמיכה של Apigee Edge.

חבילת proxy גדולה ל-API

אבחון

  1. בודקים את הגודל של חבילת ה-proxy ל-API שבה מופיעה שגיאת הפריסה.
  2. אם הגודל גדול באופן סביר (10MB ומעלה), סביר מאוד שמעבד בקשות יזדקק ליותר זמן כדי להפעיל את ה-proxy ל-API.
  3. אם הגודל של חבילת ה-API Proxy גדול מ-15MB, צריך להמשיך אל חבילת ה-API Proxy גדולה מ-15MB.

רזולוציה

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

כדי שמעבד בקשות יקבל מספיק זמן להפעלת חבילות גדולות של proxy ל-API, צריך להגדיל את הזמן הקצוב לתפוגה של ה-RPC בשרת הניהול. כדי להגדיל את ערך הזמן הקצוב לתפוגה של RPC:

  1. יוצרים את הקובץ /opt/apigee/customer/application/management-server.properties במחשב של שרת הניהול, אם הוא עדיין לא קיים.
  2. מוסיפים את השורה הבאה לקובץ:
    conf_cluster_rpc.connect.timeout=<time in seconds>

    ערך ברירת המחדל של הזמן הקצוב לתפוגה של RPC הוא 10, ומומלץ להגדיל אותו ל-40 שניות. מגדירים אותו כך:

    conf_cluster_rpc.connect.timeout=40
  3. מוודאים שהקובץ הזה בבעלות apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. מפעילים מחדש את שרת הניהול:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. אם יש לכם יותר משרת ניהול אחד, צריך לחזור על השלבים שלמעלה בכל שרתי הניהול.

אם הבעיה נמשכת, אפשר לפנות לתמיכה של Apigee Edge לקבלת עזרה נוספת.