504 Ağ Geçidi Zaman Aşımı

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak Gateway Timeout mesajıyla birlikte 504 HTTP durum kodunu alır.

HTTP durum kodu - 504 Gateway Timeout hatası, istemcinin API yürütülürken Edge Ağ Geçidi veya arka uç sunucusundan zamanında yanıt alamadığını belirtir

Hata mesajları

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 504 Gateway Timeout

Bazı durumlarda aşağıdaki hata mesajıyla da karşılaşabilirsiniz:

{
   "fault": {
      "faultstring": "Gateway Timeout",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.GatewayTimeout"
       }
    }
}

Ağ geçidi zaman aşımlarının nedeni nedir?

Edge platformu üzerinden yapılan bir API isteği için tipik yol, aşağıdaki şekilde gösterildiği gibi İstemci -> Yönlendirici -> Mesaj İşleyici -> Arka Uç Sunucusu şeklindedir:

Edge platformundaki istemci uygulaması, yönlendiriciler ve Mesaj İşleyicileri uygun zaman aşımı değerleriyle ayarlanmıştır. Edge platformu, her API isteği için zaman aşımı değerlerine bağlı olarak belirli bir süre içinde yanıt gönderilmesini bekler. Belirtilen süre içinde yanıt almazsanız 504 Gateway Timeout Error döndürülür.

Aşağıdaki tabloda, Edge'de zaman aşımlarının ne zaman oluşabileceği hakkında daha fazla ayrıntı verilmiştir:

Zaman aşımı Ayrıntılar
Mesaj İşleyici'de zaman aşımı oldu
  • Arka uç sunucusu, Mesaj İşleyici'de belirtilen zaman aşımı süresi içinde Mesaj İşleyici'ye yanıt vermiyor.
  • Mesaj İşleyici zaman aşımına uğrar ve yanıt durumunu Yönlendiriciye 504 Gateway Timeout olarak gönderir.
Yönlendiricide zaman aşımı olur
  • Mesaj İşleyici, Yönlendiricide belirtilen zaman aşımı süresi içinde yönlendiriciye yanıt vermiyor.
  • Yönlendirici zaman aşımına uğrar ve yanıt durumunu istemci uygulamasına 504 Gateway Timeout olarak gönderir.
İstemci uygulamasında zaman aşımı yaşanıyor
  • Yönlendirici, yönlendiricideki belirtilen zaman aşımı süresi içinde istemci uygulamasına yanıt vermiyor.
  • İstemci uygulaması zaman aşımına uğrar ve son kullanıcıya 504 Gateway Timeout olarak yanıt durumunu sonlandırır.

Olası nedenler

Edge'de 504 Gateway Timeout hatasının tipik nedenleri şunlardır:

Neden Ayrıntılar Şunun için verilen adımlar:
Yavaş arka uç sunucu API isteğini işleyen arka uç sunucusu, yüksek yük veya düşük performans nedeniyle çok yavaş. Herkese açık ve Private Cloud kullanıcıları
Edge tarafından yavaş API isteği işleme Edge'in, yüksek yükleme veya düşük performans nedeniyle API isteğini işlemesi uzun sürer.

Yavaş arka uç sunucu

Arka uç sunucusu çok yavaşsa veya API isteğini işlemesi uzun sürüyorsa 504 Gateway Timeout hatası alırsınız. Yukarıdaki bölümde açıklandığı gibi, zaman aşımı aşağıdaki senaryolardan birinde gerçekleşebilir:

  1. Mesaj İşleyici, arka uç sunucusu yanıt vermeden önce zaman aşımına uğrar.
  2. Mesaj İşleyici/arka uç sunucusu yanıt vermeden önce yönlendirici zaman aşımına uğruyor.
  3. Yönlendirici/Mesaj İşleyici/arka uç sunucusu yanıt vermeden önce istemci uygulaması zaman aşımına uğrar.

Aşağıdaki bölümlerde, bu senaryoların her birinde sorunun nasıl teşhis edilip çözümleneceği açıklanmaktadır.

1. Senaryo Mesaj İşleyici, arka uç sunucusu yanıt vermeden önce zaman aşımına uğruyor

Teşhis

504 Gateway Timeout hatasının yavaş arka uç sunucusu nedeniyle oluşup oluşmadığını teşhis etmek için aşağıdaki prosedürleri kullanabilirsiniz.

1. Prosedür: Trace'i Kullanma

Sorun hâlâ devam ediyorsa (504 hata devam ediyorsa) aşağıdaki adımları uygulayın:

  1. Etkilenen API'yi Edge kullanıcı arayüzünde izleyin. Hatanın oluşmasını bekleyin veya API çağrısı kullanıyorsanız bazı API çağrıları yapın ve 504 Gateway Timeout hatasını yeniden oluşturun.
  2. Hata oluştuktan sonra, yanıt kodunu 504 olarak gösteren belirli isteği inceleyin.
  3. Her aşamada geçen süreyi kontrol edin ve en çok zaman geçirilen aşamayı not edin.
  4. Aşağıdaki aşamaların birinden hemen sonra geçen en uzun süre boyunca hatayla karşılaşırsanız bu durum, arka uç sunucusunun yavaş olduğunu veya isteği işlemesinin uzun sürdüğünü gösterir:
    • Hedef sunucuya istek gönderildi
    • Hizmet Çağrısı politikası

Aşağıda, arka uç sunucusunun 55 saniye geçmesine rağmen yanıt vermediğini ve 504 Gateway Timeout hatasıyla sonuçlandığını gösteren örnek bir Trace bulunmaktadır:

Yukarıdaki izde, arka uç sunucusu yanıt vermediği için Mesaj İşleyici 55.002 ms sonra zaman aşımına uğrar.

2. Prosedür: İleti İşleyici günlüklerini kullanma

  1. Mesaj İşleyici günlüğünü kontrol edin (/opt/apigee/var/log/edge-message-processor/logs/system.log)
  2. Belirli bir API proxy isteği için belirli bir zamanda Gateway Timeout ve onTimeoutRead hataları görürseniz bu, Mesaj İşleyici'nin zaman aşımına uğradığı anlamına gelir.

    Ağ Geçidi Zaman Aşımı Hatası gösteren örnek Mesaj İşleyici günlüğü

    2015-09-29 20:16:54,340 org:myorg env:staging api:profiles rev:13 NIOThread@1
    ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() :
    AbstractResponseListener.onError(HTTPResponse@4d898cf1, Gateway
    Timeout)
    2015-09-29 20:16:57,361 org:myorg env:staging api:profileNewsletters rev:8
    NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$3.onTimeout() :
    SSLClientChannel[C:XX.XX.XX.XX:443 Remote
    host:192.168.38.54:38302]@120171 useCount=2 bytesRead=0
    bytesWritten=824 age=55458ms lastIO=55000ms .onTimeoutRead
    

    Yukarıdaki Mesaj İşleyici günlüğünde, XX.XX.XX.XX IP adresiyle belirtilen arka uç sunucusunun 55 saniye (lastIO=55000ms) sonra bile yanıt vermediğini fark ediyorsunuz. Sonuç olarak, Mesaj İşleyici zaman aşımına uğradı ve 504 Gateway Timeout hatası gönderdi.

    Şunu kontrol edin: İleti İşleyici'de zaman aşımı nasıl kontrol edilir?

    • İleti İşleyici'de zaman aşımı nasıl kontrol edilir? Mesaj İşleyiciler genellikle HTTPTransport.io.timeout.millis özelliği aracılığıyla 55 saniyelik bir varsayılan zaman aşımı değeriyle ayarlanır. Bu zaman aşımı değeri, bu Mesaj İşleyici tarafından hizmet verilen bir kuruluşa ait tüm API Proxy'leri için geçerlidir.
      • Arka uç sunucusu 55 saniye içinde yanıt vermezse Mesaj İşleyici zaman aşımına uğrar ve istemciye 504 Gateway Timeout hatası gönderir.
    • Mesaj İşleyici'de belirtilen zaman aşımı değeri, API Proxy'sinde belirtilen io.timeout.millis özelliği tarafından geçersiz kılınabilir. Bu zaman aşımı değeri, yukarıda belirtilen özelliğin belirtildiği belirli bir API Proxy'si için geçerlidir. Örneğin io.timeout.millis, API Proxy'sinde 10 saniye olarak ayarlanırsa bu API Proxy'si için 10 saniyelik zaman aşımı değeri kullanılır.
      • Arka uç sunucusu belirli bir API Proxy'si için 10 saniye içinde yanıt vermezse Mesaj İşleyici zaman aşımına uğrar ve istemciye 504 Gateway Timeout hatası gönderir.

Çözünürlük

  1. Arka uç sunucusunun neden 55 saniyeden uzun sürdüğünü kontrol edin ve daha hızlı yanıt vermek için düzeltilip optimize edilip edilemeyeceğine bakın.
  2. Arka uç sunucusunu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucusunun yapılandırılan zaman aşımından daha uzun zaman aldığı biliniyorsa Yönlendirici ve Mesaj İşleyici'deki zaman aşımı değerini uygun bir değere yükseltin.

2. Senaryo: Mesaj İşleyici/arka uç sunucusu yanıt vermeden önce yönlendirici zaman aşımına uğruyor

Mesaj İşleyici/arka uç sunucusu yanıt vermeden önce yönlendirici zaman aşımına uğrarsa 504 Gateway Timeout hataları alabilirsiniz. Bunun nedeni aşağıdakilerden biri olabilir:

  • Yönlendiricide ayarlanan zaman aşımı değeri, Mesaj İşleyici'de ayarlanan zaman aşımı değerinden daha kısa. Örneğin, Yönlendirici'deki zaman aşımının 50 saniye, Mesaj İşleyici'nin ise 55 saniye olduğunu varsayalım.
    Yönlendiricide zaman aşımı Mesaj İşleyicide zaman aşımı
    50 saniye 55 saniye
  • Mesaj İşleyici'deki zaman aşımı değeri, API Proxy'sinin hedef uç nokta yapılandırmasında ayarlanan io.timeout.millis özelliği kullanılarak daha yüksek bir zaman aşımı değeriyle geçersiz kılınır:

    Örneğin, aşağıdaki zaman aşımı değerleri ayarlanmışsa:

    Yönlendiricide zaman aşımı Mesaj İşleyicide zaman aşımı API Proxy'sinde zaman aşımı
    57 saniye 55 saniye 120 saniye

    Ancak io.timeout.millis, API Proxy'sinde 120 saniye olarak ayarlanmıştır:

    <HTTPTargetConnection>
         <Properties>
              <Property name="io.timeout.millis">120000</Property>
          </Properties>
          <URL>http://www.apigee.com</URL>
    </HTTPTargetConnection>
    

    Bu durumda Mesaj İşleyici, zaman aşımı değeri (55 saniye) yönlendiricideki zaman aşımı değerinden (57 saniye) az olsa bile 55 saniye sonra zaman aşımına uğramaz. Bunun nedeni, Mesaj İşleyici'deki 55 saniyelik zaman aşımı değerinin, API Proxy'sinde ayarlanan 120 saniye değeriyle geçersiz kılınmasıdır. Bu nedenle bu API Proxy'si için Mesaj İşleyici'nin zaman aşımı değeri 120 saniye olur.

    Yönlendiricinin, API Proxy'sinde ayarlanan 120 saniyeye kıyasla daha düşük bir zaman aşımı değerine (57 saniye) sahip olması, arka uç sunucusu 57 saniye içinde yanıt vermezse yönlendirici zaman aşımına uğrar.

Teşhis

  1. NGINX erişim günlüğünü kontrol edin (/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log)
  2. Yönlendirici, Mesaj İşleyici'den önce zaman aşımına uğrarsa ilgili API isteği için NGINX erişim günlüklerinde 504 durumu gösterilir ve Mesaj İşleyici'den gelen message id değeri - olarak ayarlanır. Bunun nedeni, Yönlendiricinin ayarlanan zaman aşımı süresi içinde Mesaj İşleyici'den yanıt alamamasıdır.

    Yönlendiricinin zaman aşımına uğraması nedeniyle 504'ü gösteren örnek NGINX Günlük Girişi

  3. Yukarıdaki örnekte, NGINX'te 504 durumunun NGINX'te, Mesaj İşleyici'den gelen mesaj kimliğinin - ve geçen toplam sürenin 57,001 saniye olduğuna dikkat edin. Bunun nedeni, yönlendiricinin 57,001 saniye sonra zaman aşımına uğraması ve Mesaj İşleyici'den yanıt almamış olmamızdır.
  4. Bu durumda, Mesaj İşleyici günlüklerinde Broken Pipe istisna görürsünüz (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
    2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
    java.io.IOException: Broken pipe
            at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
             … <snipped>
    

Bu hata mesajı, yönlendirici zaman aşımına uğradığında Mesaj İşleyici ile bağlantıyı kapatması nedeniyle gösterilir. Mesaj İşleyici, işlemeyi tamamladığında yanıtı yönlendiriciye yazmaya çalışır. Yönlendirici bağlantısı zaten kapalı olduğundan Mesaj İşleyici'den Broken Pipe exception alırsınız.

Bu istisnanın, yukarıda açıklanan koşullar altında görülmesi beklenir. Yani 504 Gateway Timeout hatasının asıl nedeni, arka uç sunucusunun hâlâ yanıt vermesi daha uzun sürmesidir ve bu sorunu gidermeniz gerekir.

Çözünürlük

  1. Özel bir arka uç sunucusuysa
    1. Arka uç sunucunun yanıt vermesinin neden uzun sürdüğünü kontrol edin ve daha hızlı yanıt vermek için düzeltilip optimize edilip edilemeyeceğine bakın.
    2. Arka uç sunucusunu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucusunun uzun sürdüğü bir bilgiyse Yönlendirici ve Mesaj İşleyici'deki zaman aşımı değerini artırın.

      Fikir: Farklı bileşenlerde zaman aşımı değerini aşağıdaki sırada ayarlayın:

      İstemcide zaman aşımı > Yönlendiricide zaman aşımı > Mesaj İşleyicide zaman aşımı > API Proxy'sinde zaman aşımı

  2. NodeJS arka uç sunucusuysa:
    1. NodeJS kodunun diğer arka uç sunucularına çağrı yapıp yapmadığını ve yanıt döndürmenin uzun zaman alıp almadığını kontrol edin. Arka uç sunucularının neden daha uzun sürdüğünü kontrol edin ve sorunu uygun şekilde düzeltin.
    2. Mesaj İşleyicilerin yüksek CPU veya Bellek kullanımı sorunu yaşayıp yaşamadığını kontrol edin:
      1. Herhangi bir Mesaj İşleyici yüksek CPU kullanımı yaşıyorsa aşağıdaki komutu kullanarak her 30 saniyede bir üç iş parçacığı dökümü oluşturun:
        JAVA_HOME/bin/jstack -l PID > FILENAME
      2. Herhangi bir Mesaj İşleyici yüksek bellek kullanımıyla karşılaşıyorsa aşağıdaki komutu kullanarak bir yığın dökümü oluşturun:
        sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
      3. Aşağıdaki komutu kullanarak İleti İşleyici'yi yeniden başlatın. CPU ve belleğin düşürülmesi gerekir:
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      4. Sorunun devam edip etmediğini doğrulamak için API çağrılarını izleyin.
      5. /opt/apigee/var/log/edge-message-processor/logs/system.log)Yüksek CPU/bellek kullanımının nedenini araştırmanıza yardımcı olması için Apigee Edge Destek Ekibi ile iletişime geçerek iş parçacığı dökümlerini, yığın dökümünü ve Mesaj İşlemci günlüklerini sağlayın.

Bunu Kontrol Edin: Mesaj İşleyici'de NodeJS arka uç sunucuları için zaman aşımı nasıl kontrol edilir?

  • NodeJS arka uç sunucusu, İleti İşleyici'nin JVM işlemiyle çalışır. NodeJS arka uç sunucuları için zaman aşımı değeri, nodejs.properties dosyasındaki http.request.timeout.seconds özelliği aracılığıyla kontrol edilir. Bu özellik varsayılan olarak 0 değerine ayarlanır. Yani bu Mesaj İşleyici tarafından hizmet verilen bir kuruluşa ait tüm API Proxy'leri için zaman aşımı varsayılan olarak devre dışıdır. Böylece, bir NodeJS arka uç sunucusu uzun sürse bile Mesaj İşleyici zaman aşımına uğramaz.
  • Bununla birlikte, NodeJS arka uç sunucusu uzun sürüyorsa ve API isteği tarafından harcanan süre 57 saniyeden fazlaysa Yönlendirici, zaman aşımına uğrar ve istemciye 504 Gateway Timeout hatası gönderir.

3. Senaryo: Yönlendirici/Mesaj İşleyici/arka uç sunucusu yanıt vermeden önce istemci uygulaması zaman aşımına uğruyor

İstemci uygulaması, arka uç sunucusu yanıt vermeden önce zaman aşımına uğrarsa 504 Gateway Timeout hataları alabilirsiniz. Bu durum aşağıdaki durumlarda yaşanabilir:

  1. İstemci uygulamasında ayarlanan zaman aşımı değeri, yönlendiricide ve Mesaj İşleyicide ayarlanan zaman aşımı değerinden düşük:

    Örneğin, aşağıdaki zaman aşımı değerleri ayarlanmışsa:

    İstemcide zaman aşımı Yönlendiricide zaman aşımı Mesaj İşleyicide zaman aşımı
    50 saniye 57 saniye 55 saniye

    Bu durumda, bir API isteği için Edge üzerinden yanıt almak için kullanılabilen toplam süre <= 50 saniyedir. Bu süreler arasında API isteği yapmak için geçen süre, Edge (Yönlendirici, Mesaj İşleyici) tarafından işlenen istek, isteğin arka uç sunucuya gönderilmesi (varsa), arka uç tarafından isteğin işlenmesi ve yanıtın gönderilmesi, Edge'in yanıtı işlemesi ve son olarak istemciye geri göndermesi dahildir.

    Yönlendirici 50 saniye içinde istemciye yanıt vermezse istemci zaman aşımına uğrar ve yönlendiriciyle olan bağlantıyı kapatır. İstemci 504 yanıt kodunu alır.

    Bu işlem, NGINX'in, istemcinin bağlantıyı kapattığını belirten bir 499 durum kodu ayarlamasına neden olur.

Teşhis

  1. İstemci uygulaması, yönlendiriciden yanıt almadan önce zaman aşımına uğrarsa yönlendiriciyle bağlantıyı kapatır. Bu durumda, belirli bir API isteği için NGINX erişim günlüklerinde 499 durum kodu görürsünüz.

    499 durum kodunu gösteren örnek NGINX Günlük Girişi

  2. Yukarıdaki örnekte, NGINX'te 499 durumunun ve geçen toplam sürenin 50,001 saniye olduğunu unutmayın. Bu, istemcinin 50,001 saniye sonra zaman aşımına uğradığını gösterir.
  3. Bu durumda, Message Processor günlüklerinde Broken Pipe Ayrıcalıklar gösterilir (/opt/apigee/var/log/edge-message-processor/logs/system.log).
    2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
    2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
    java.io.IOException: Broken pipe
            at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
             … <snipped>
    
    
  4. Yönlendirici zaman aşımına uğradıktan sonra Mesaj İşleyici ile bağlantıyı kapatır. Mesaj İşleyici, işlemeyi tamamladığında yanıtı Yönlendirici'ye yazmaya çalışır. Yönlendirici ile bağlantı zaten kapalı olduğundan, Mesaj İşleyicisi üzerinden Broken Pipe exception alırsınız.
  5. Bu istisna, yukarıda açıklanan durumlarda beklenen bir durumdur. Yani 504 Gateway Timeout hatasının asıl nedeni, arka uç sunucusunun yanıt vermesi çok uzun sürmesi ve bu sorunu gidermeniz gerekmesidir.

Çözünürlük

  1. Söz konusu arka uç sunucunuzsa:
    1. İşlemin neden 57 saniyeden uzun sürdüğünü belirlemek için arka uç sunucusunu kontrol edin ve daha hızlı yanıt verecek şekilde düzeltilip optimize edilip edilemeyeceğine bakın.
    2. Arka uç sunucusunu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucunun uzun süreceğini biliyorsanız yönlendirici ve Mesaj İşleyici'deki zaman aşımı değerini artırın.

      Fikir: Farklı bileşenlerde zaman aşımı değerini aşağıdaki sırada ayarlayın:

      İstemcide zaman aşımı > Yönlendiricide zaman aşımı > Mesaj İşleyicide zaman aşımı > API Proxy'sinde zaman aşımı

  2. Bu bir NodeJS arka ucuysa:
    1. NodeJS kodunun diğer arka uç sunucularına çağrı yapıp yapmadığını ve geri dönüşün uzun zaman alıp almadığını kontrol edin. Bu arka uç sunucularının neden daha uzun sürdüğünü kontrol edin.
    2. Mesaj İşleyicilerin yüksek CPU veya bellek kullanımı yaşayıp yaşamadığını kontrol edin:
      1. Bir Mesaj İşleyici yüksek CPU kullanımı yaşıyorsa aşağıdaki komutu kullanarak her 30 saniyede bir üç iş parçacığı dökümü oluşturun:
        JAVA_HOME/bin/jstack -l PID > FILENAME
      2. Bir Mesaj İşleyici yüksek düzeyde bellek kullanımı yaşıyorsa aşağıdaki komutu kullanarak bir yığın dökümü oluşturun:
        sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
      3. Aşağıdaki komutu kullanarak İleti İşleyici'yi yeniden başlatın. Bu işlem, CPU ve belleğin düşürülmesine neden olur:
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      4. Sorunun devam edip etmediğini doğrulamak için API çağrılarını izleyin.
      5. Apigee Edge Destek Ekibi ile iletişime geçerek iş parçacığı dökümleri, yığın dökümü ve Mesaj İşleyici günlüklerini paylaşın (/opt/apigee/var/log/edge-message-processor/logs/system.log) yüksek CPU/bellek kullanımının nedenini araştırmasına yardımcı olmak için).

Yönlendirici ve Mesaj İşleyici'deki zaman aşımı değerini artırın

Yönlendirici ve Mesaj İşleyici'de ayarlanacak zaman aşımı değerlerini gereksinimlerinize bağlı olarak dikkatli bir şekilde seçin. İsteğe bağlı olarak büyük zaman aşımı değerleri ayarlamayın. Yardıma ihtiyacınız olursa Apigee Edge Destek Ekibi ile iletişime geçin.

Yönlendirici

chown apigee:apigee /opt/apigee/customer/application/router.properties
  1. Mevcut değilse Yönlendirici makinesinde /opt/apigee/customer/application/router.properties dosyasını oluşturun.
  2. Bu dosyaya şu satırı ekleyin:
    conf_load_balancing_load.balancing.driver.proxy.read.timeout=TIME_IN_SECONDS

    Örneğin, zaman aşımı değerini 120 saniye olarak ayarlamak istiyorsanız bu değeri aşağıdaki gibi ayarlayın:

    conf_load_balancing_load.balancing.driver.proxy.read.timeout=120
  3. Bu dosyanın Apigee'ye ait olduğundan emin olun:
  4. Yönlendiriciyi yeniden başlatın:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
    
  5. Birden fazla yönlendiriciniz varsa yukarıdaki adımları tüm yönlendiricilerde tekrarlayın.

Mesaj İşleyici

  1. Mevcut değilse Mesaj İşleyici makinesinde /opt/apigee/customer/application/message-processor.properties dosyası oluşturun.
  2. Bu dosyaya şu satırı ekleyin:
    conf_http_HTTPTransport.io.timeout.millis=TIME_IN_MILLISECONDS

    Örneğin, zaman aşımı değerini 120 saniye olarak ayarlamak istiyorsanız bu değeri aşağıdaki gibi ayarlayın:

    conf_http_HTTPTransport.io.timeout.millis=120000
  3. Bu dosyanın Apigee'ye ait olduğundan emin olun:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Mesaj İşleyici'yi yeniden başlatın:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. Birden fazla Mesaj İşleyiciniz varsa tüm Mesaj İşleyiciler için yukarıdaki adımları tekrarlayın.

Fikir: Farklı bileşenlerde zaman aşımı değerini aşağıdaki sırayla ayarlayın:

İstemcide zaman aşımı > Yönlendiricide zaman aşımı > Mesaj İşleyicide zaman aşımı > API Proxy'sinde zaman aşımı

Edge tarafından yavaş API isteği işleme

Edge çok yavaşsa ve/veya API isteğini işlemesi uzun sürüyorsa 504 Gateway Timeout hatası alırsınız.

Teşhis

  1. Etkilenen API'yi Edge kullanıcı arayüzünde izleyin.
  2. Hatanın oluşmasını bekleyin veya API çağrısı kullanıyorsanız bazı API çağrıları yapın ve 504 Gateway Timeout hatasını yeniden oluşturun.
  3. Bu durumda, Trace'te başarılı bir yanıt görebileceğinizi unutmayın.
    1. Mesaj İşleyici, Yönlendiricide/istemcide belirtilen zaman aşımı süresi içinde (hangisi en düşük zaman aşımı süresine sahipse) yanıt vermediği için Yönlendirici/istemci zaman aşımına uğrar. Ancak, Mesaj İşleyici isteği işlemeye devam eder ve başarıyla tamamlayabilir.
    2. Ayrıca, Mesaj İşleyici'de ayarlanan HTTPTransport.io.timeout.millis değeri yalnızca Mesaj İşleyici bir HTTP/HTTPS arka uç sunucusuyla iletişim kurduğunda tetiklenir. Başka bir deyişle, API Proxy'sindeki herhangi bir politika (Service callout politikası dışında) uzun zaman aldığında bu zaman aşımı tetiklenmez.
  4. Hata gerçekleştikten sonra en uzun süreye sahip belirli isteği inceleyin.
  5. Her aşamada geçen süreyi kontrol edin ve en çok zaman geçen aşamayı not edin.
  6. Hizmet Çağrısı politikası dışındaki politikalardan herhangi birinde en uzun süreyi gözlemlerseniz bu, Edge'in isteği işlemesinin uzun sürdüğü anlamına gelir.
  7. Aşağıda, JavaScript Politikasında geçen çok yüksek süreyi gösteren örnek bir kullanıcı arayüzü izlemesi verilmiştir:

  8. Yukarıdaki örnekte, JavaScript politikasının anormal derecede uzun bir sürenin yaklaşık 245 saniye sürdüğünü fark ediyorsunuz.

Çözünürlük

  1. Politikanın yanıt vermesi uzun süren bir işlem olup olmadığını ve işlenmesi uzun zaman gerektirebilecek özel bir kod olup olmadığını kontrol edin. Bu tür bir kod varsa tanımlanan kodu düzeltip düzeltemediğinize/optimize edip edemeyeceğinize bakın.
  2. Uzun işleme süresine neden olabilecek özel bir kod yoksa Mesaj İşleyicilerin yüksek CPU veya bellek kullanımı yaşayıp yaşamadığını kontrol edin:
    1. Herhangi bir Mesaj İşleyici yüksek CPU kullanımı yaşıyorsa aşağıdaki komutu kullanarak her 30 saniyede bir üç iş parçacığı dökümü oluşturun:
      JAVA_HOME/bin/jstack -l PID > FILENAME
    2. Herhangi bir mesaj işlemcinin bellek kullanımı yüksekse aşağıdaki komutu kullanarak yığın dökümü oluşturun:
      sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
    3. Aşağıdaki komutu kullanarak İleti İşleyici'yi yeniden başlatın. Bu işlem, CPU ve Bellek miktarını düşürür.
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    4. API çağrılarını izleyin ve sorunun devam edip etmediğini onaylayın.
    5. Apigee Edge Destek Ekibi ile iletişime geçerek iş parçacığı dökümleri, yığın dökümü ve Mesaj İşleyici günlüklerini sağlayın (/opt/apigee/var/log/edge-message-processor/logs/system.log) yüksek CPU/bellek kullanımının nedenini araştırmasına yardımcı olmak için).

API Monitoring'i kullanarak sorunları teşhis edin

API Monitoring; hata, performans ve gecikme sorunlarını ve bunların kaynaklarını (ör. geliştirici uygulamaları, API proxy'leri, arka uç hedefleri veya API platformu) teşhis etmek için sorunlu alanları hızla izole etmenize olanak tanır.

API Monitoring'i kullanarak API'lerinizle ilgili 5xx sorunlarını nasıl gidereceğinizi gösteren örnek bir senaryoyu inceleyin. Örneğin, 504 durum kodunun sayısı belirli bir eşiği aştığında bilgilendirilmek için bir uyarı ayarlamak isteyebilirsiniz.