Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 504
HTTP durum kodu ve Gateway Timeout
mesajını alır.
HTTP durum kodu - 504 Gateway Timeout
hatası, bir API yürütülürken istemcinin Uç Ağ Geçidi veya arka uç sunucusundan zamanında yanıt almadığını gösterir
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ı da görülebilir:
{ "fault": { "faultstring": "Gateway Timeout", "detail": { "errorcode": "messaging.adaptors.http.flow.GatewayTimeout" } } }
Ağ geçidi zaman aşımlarına ne neden olur?
Uç platformu üzerinden yapılan API isteklerinin tipik yolu, 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 İşlemcileri uygun zaman aşımı değerleriyle ayarlanmıştır. Edge platformu, zaman aşımı değerlerine bağlı olarak her API isteği için 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 ne zaman zaman aşımlarının oluşabileceği hakkında daha fazla ayrıntı sunulmaktadır:
Zaman aşımı oluşumu | Ayrıntılar |
---|---|
Mesaj işleyicide zaman aşımı yaşanıyor |
|
Yönlendiricide zaman aşımı |
|
İstemci uygulamasında zaman aşımı oluyor |
|
Olası nedenler
Edge'de 504 Gateway Timeout
hatasının tipik nedenleri şunlardır:
Neden | Ayrıntılar | Aşağıdakiler için verilen adımlar |
---|---|---|
Yavaş arka uç sunucusu | API isteğini işleyen arka uç sunucu, yüksek yük veya düşük performans nedeniyle çok yavaştır. | Herkese açık ve Private Cloud kullanıcıları |
Edge tarafından yavaş API isteği işleme | Edge'in, yüksek yük veya düşük performans nedeniyle API isteğini işlemesi uzun sürüyor. |
Arka uç sunucunun yavaş olması
Arka uç sunucusu çok yavaşsa veya API isteğinin işlenmesi 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:
- Arka uç sunucusu yanıt vermeden önce Mesaj İşleyici zaman aşımına uğrar.
- Yönlendirici, ileti işleyici/arka uç sunucusu yanıt vermeden önce zaman aşımına uğrar.
- İstemci uygulaması, Yönlendirici/Mesaj İşleyen/arka uç sunucusu yanıt vermeden önce zaman aşımına uğrar.
Aşağıdaki bölümlerde, bu senaryoların her birinde sorunun nasıl teşhis edilip çözüleceği açıklanmaktadır.
Senaryo #1: Mesaj işleyici, arka uç sunucusu yanıt vermeden önce zaman aşımına uğrar
Teşhis
504 Gateway Timeout
hatasının arka uç sunucunun yavaş olmasından kaynaklanıp kaynaklanmadığını teşhis etmek için aşağıdaki prosedürleri kullanabilirsiniz.
1. Prosedür: Trace'i kullanma
Sorun hâlâ devam ediyorsa (504
hataları hâlâ ortaya çıkıyorsa) aşağıdaki adımları uygulayın:
- Edge kullanıcı arayüzünde etkilenen API'yi izleyin. Hatanın oluşmasını bekleyin veya API çağrınız varsa bazı API çağrıları yaparak
504 Gateway Timeout
hatasını yeniden oluşturun. - Hata oluştuktan sonra, yanıt kodunu
504
olarak gösteren belirli isteği inceleyin. - Her aşamada geçen süreyi kontrol edin ve en çok sürenin harcandığı aşamayı not edin.
- Hatayı aşağıdaki aşamalardan birinin hemen ardından, geçen en uzun süreye sahip olarak gözlemlemeniz, arka uç sunucusunun yavaş olduğu veya isteği işlemesinin uzun sürdüğü anlamına gelir:
- İstek hedef sunucuya gönderildi
- ServiceCallout politikası
Aşağıda, arka uç sunucunun 55 saniye sonra bile yanıt vermediğini ve bunun sonucunda 504 Gateway Timeout
hatası oluştuğunu gösteren örnek bir izleme sunulmaktadır:
Yukarıdaki izlemede, arka uç sunucu yanıt vermediği için Mesaj İşleyen 55002 ms sonra zaman aşımına uğrar.
2. prosedür: Mesaj işleyici günlüklerini kullanma
- Mesaj İşleyici'nin günlüğünü kontrol edin
(
/opt/apigee/var/log/edge-message-processor/logs/system.log
) -
Belirli bir API proxy isteği için belirli bir zamanda
Gateway Timeout
veonTimeoutRead
hataları görürseniz bu, Mesaj İşleyici'nin zaman aşımına uğradığını gösterir.Geçiş Timeout Hatası'nı 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 İleti İş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: Mesaj İşleyicide zaman aşımı nasıl kontrol edilir?
- Mesaj işleyicide zaman aşımı nasıl kontrol edilir? Mesaj işleyiciler genellikle
HTTPTransport.io.timeout.millis
mülkü aracılığıyla 55 saniyelik varsayılan zaman aşımı değeri ile ayarlanır. Bu zaman aşımı değeri, bu Mesaj İşleyici tarafından sunulan 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.
- Arka uç sunucusu 55 saniye içinde yanıt vermezse Mesaj İşleyici zaman aşımına uğrar ve istemciye
- Mesaj İşleyen'de belirtilen zaman aşımı değeri, API Proxy'sinde belirtilen
io.timeout.millis
mülkü tarafından geçersiz kılınabilir. Bu zaman aşımı değeri, yukarıda belirtilen mülkün belirtildiği belirli bir API proxy'si için geçerlidir. Örneğin, API Proxy'sindeio.timeout.millis
10 saniye olarak ayarlanırsa bu API Proxy için 10 saniyelik zaman aşımı değeri kullanılır.- Arka uç sunucu, belirli bir API Proxy 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.
- Arka uç sunucu, belirli bir API Proxy için 10 saniye içinde yanıt vermezse Mesaj İşleyici zaman aşımına uğrar ve istemciye
- Mesaj işleyicide zaman aşımı nasıl kontrol edilir? Mesaj işleyiciler genellikle
Çözünürlük
- Arka uç sunucunun 55 saniyeden uzun süre neden sürdüğünü kontrol edin ve daha hızlı yanıt vermesi için düzeltilip optimize edilip edilemeyeceğine bakın.
- Arka uç sunucuyu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucunun yapılandırılmış zaman aşımından daha uzun süre aldığı biliniyorsa yönlendiricideki ve mesaj işleyicideki zaman aşımı değerini uygun bir değere yükseltin.
Senaryo #2: Yönlendirici, ileti işleyici/arka uç sunucusu yanıt vermeden önce zaman aşımına uğrar
Yönlendirici, ileti işleyici/arka uç sunucusu yanıt vermeden önce zaman aşımına uğrarsa 504 Gateway Timeout
hataları alabilirsiniz. Bu durum aşağıdaki durumlardan birinde gerçekleşebilir:
- Yönlendiricide ayarlanan zaman aşımı değeri Mesaj İşleyicide ayarlanan zaman aşımı değerinden kısa. Örneğin, yönlendiricideki zaman aşımının 50 saniye, ileti işleyicinin ise 55 saniye olduğunu varsayalım.
Yönlendiricide zaman aşımı Mesaj iş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 ayarlanırsa:
Yönlendiricide zaman aşımı İleti İşleyicide zaman aşımı API Proxy'sinde zaman aşımı 57 saniye 55 saniye 120 saniye Ancak
io.timeout.millis
, API Proxy'sinde 120 saniyeye ayarlanmıştır:<HTTPTargetConnection> <Properties> <Property name="io.timeout.millis">120000</Property> </Properties> <URL>http://www.apigee.com</URL> </HTTPTargetConnection>
Bu durumda, zaman aşımı değeri (55 saniye) yönlendiricideki zaman aşımı değerinden (57 saniye) az olsa bile Mesaj İşleyen 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 saniyelik değerle 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önlendirici, API Proxy'de ayarlanan 120 saniyeye kıyasla daha düşük bir zaman aşımı değerine (57 saniye) sahip olduğundan, arka uç sunucu 57 saniye sonra yanıt vermezse yönlendirici zaman aşımına uğrar.
Teşhis
- NGINX erişim günlüğünü kontrol edin
(
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) -
Mesaj İşleyici'den önce yönlendirici zaman aşımına uğrarsa belirli API isteği için NGINX erişim günlüklerinde
504
durumunu görürsünüz ve Mesaj İşleyicidekimessage id
-
olarak ayarlanır. Bunun nedeni, Yönlendirici'nin yönlendiricide ayarlanan zaman aşımı süresi içinde Mesaj İşleyici'den herhangi bir yanıt almamasıdır.Yönlendirici zaman aşımı nedeniyle 504 gösteren örnek NGINX günlük girişi
- Yukarıdaki örnekte, NGINX'teki
504
durumuna, İleti İşleyen'den gelen ileti kimliğine (-
) ve geçen toplam süreye (57.001 saniye) dikkat edin. Bunun nedeni, yönlendiricinin 57.001 saniye sonra zaman aşımına uğramış ve Mesaj İşleyici'den herhangi bir yanıt almamış olmamızdır. - Bu durumda, İleti İşleyen 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>
Yönlendirici zaman aşımına uğradığında Mesaj İşleyici ile bağlantıyı kapattığı için bu hata gösterilir. Mesaj İşleyen, işleme işlemini tamamladığında yanıtı yönlendiriciye yazmaya çalışır. Yönlendiriciyle bağlantı zaten kapalı olduğu için Mesaj İşleyicide Broken Pipe exception
simgesini görürsünüz.
Bu istisnanın, yukarıda açıklanan koşullarda görülmesi beklenir. Dolayısıyla 504 Gateway Timeout
hatasının asıl nedeni hâlâ arka uç sunucusunun yanıt vermesi uzun sürmesidir ve bu sorunu gidermeniz gerekir.
Çözünürlük
- Özel bir arka uç sunucusu ise
- Arka uç sunucusunun yanıt vermesinin neden uzun sürdüğünü kontrol edin ve daha hızlı yanıt vermek için düzeltilip düzeltilemeyeceğini/optimize edilip edilemeyeceğini öğrenin.
- Arka uç sunucusunu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucusunun uzun sürdüğü bilinen bir gerçekse Yönlendirici ve Mesaj İşleyicide zaman aşımı değerini artırın.
Fikir: Farklı bileşenlerdeki 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ı
- Bu bir NodeJS arka uç sunucusuysa:
- NodeJS kodunun başka arka uç sunucularına çağrı yapıp yapmadığını ve yanıt döndürmesinin uzun sürüp sürmediğini kontrol edin. Arka uç sunucularının neden daha uzun süre harcadığını kontrol edin ve uygun şekilde sorunu düzeltin.
- Mesaj işleyicilerin yüksek CPU veya bellek kullanımı yaşayıp yaşamadığını kontrol edin:
- Herhangi bir İleti İşleyen'de yüksek CPU kullanımı yaşanıyorsa aşağıdaki komutu kullanarak 30 saniyede bir üç işleme devam eden mesaj yığını oluşturun:
JAVA_HOME/bin/jstack -l PID > FILENAME
- Herhangi bir Mesaj İşleyicide yüksek bellek kullanımı yaşanı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
- Aşağıdaki komutu kullanarak Mesaj İşleyici'yi yeniden başlatın. Bu işlem, CPU ve bellek kullanımını düşürür:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Sorunun devam edip etmediğini doğrulamak için API çağrılarını izleyin.
- Apigee Edge Destek Ekibi ile iletişime geçin ve yüksek CPU/bellek kullanımının nedenini araştırmaya yardımcı olması için
/opt/apigee/var/log/edge-message-processor/logs/system.log)
iş parçacığı dökümlerini, yığın dökümünü ve Mesaj İşlemcisi günlüklerini sağlayın.
- Herhangi bir İleti İşleyen'de yüksek CPU kullanımı yaşanıyorsa aşağıdaki komutu kullanarak 30 saniyede bir üç işleme devam eden mesaj yığını oluşturun:
Bunu Kontrol Edin: Mesaj İşleyicide NodeJS arka uç sunucuları için zaman aşımı nasıl kontrol edilir?
|
Senaryo #3: Yönlendirici/Mesaj İşleyen/arka uç sunucu yanıt vermeden önce istemci uygulaması zaman aşımına uğrar
Arka uç sunucusu yanıt vermeden önce istemci uygulaması zaman aşımına uğrarsa 504 Gateway Timeout
hataları alabilirsiniz. Bu durum, aşağıdaki durumlarda yaşanabilir:
- İstemci uygulamasında ayarlanan zaman aşımı değeri, yönlendiricide ve Mesaj İşleyicide ayarlanan zaman aşımı değerinden daha düşük:
Örneğin, aşağıdaki zaman aşımı değerleri ayarlanırsa:
İstemcide Zaman Aşımı Yönlendiricide zaman aşımı Mesaj işleyicide zaman aşımı 50 saniye 57 saniye 55 saniye Bu durumda, Edge üzerinden bir API isteği için yanıt almak üzere kullanılabilecek toplam süre 50 saniyeden kısadır. Buna API isteği oluşturmak için geçen süre, isteğin Edge (Yönlendirici, Mesaj İşleyici) tarafından işlenmesi, 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şleyerek 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 bağlantıyı kapatır. İstemci,
504
yanıt kodunu alır.Bu işlem, NGINX'in istemcinin bağlantıyı kapattığını belirten
499
durum kodunu ayarlamasına neden olur.
Teşhis
- İstemci uygulaması, yönlendiriciden yanıt almadan önce zaman aşımına uğrarsa yönlendiriciyle bağlantıyı kapatır. Bu durumda, belirli 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
- Yukarıdaki örnekte, NGINX'teki
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. - Bu durumda, İleti İşleyen günlüğünde
Broken Pipe
İstisnaları 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-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>
- Yönlendirici zaman aşımına uğradıktan sonra Mesaj İşleyen ile bağlantıyı kapatır. Mesaj işleyici, işlemeyi tamamladığında yanıtı Yönlendirici'ye yazmaya çalışır.
Yönlendiriciye olan bağlantı zaten kapalı olduğu için Mesaj İşleyicide
Broken Pipe exception
alırsınız. - Yukarıda açıklanan koşullarda bu istisna beklenir. Dolayısıyla
504 Gateway Timeout
hatasının asıl nedeni, arka uç sunucunun yanıt vermesinin uzun sürmesidir ve bu sorunu çözmeniz gerekir.
Çözünürlük
- Özel arka uç sunucunuzsa:
- 57 saniyeden uzun sürmesinin nedenini belirlemek için arka uç sunucusunu kontrol edin ve daha hızlı yanıt vermesi için düzeltilip optimize edilip edilemeyeceğine bakın.
- Arka uç sunucuyu düzeltmek/optimize etmek mümkün değilse veya arka uç sunucunun uzun süreceğini biliyorsanız yönlendiricideki ve Mesaj İşleyicideki zaman aşımı değerini artırı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ı
- NodeJS arka ucu ise:
- NodeJS kodunun başka arka uç sunucularına çağrı yapıp yapmadığını ve bunun geri dönmesi uzun sürüyor mu? Bu arka uç sunucularının neden daha uzun sürdüğünü kontrol edin.
- Mesaj İşlemcilerinin yüksek CPU veya bellek kullanımı yaşayıp yaşamadığını kontrol edin:
- Bir Mesaj İşleyicide yüksek CPU kullanımı yaşanıyorsa aşağıdaki komutu kullanarak 30 saniyede bir üç işleme devam eden mesaj ipi dökümü oluşturun:
JAVA_HOME/bin/jstack -l PID > FILENAME
- Bir Mesaj İşleyicide yüksek bellek kullanımı yaşanı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
- Aşağıdaki komutu kullanarak İleti İşlemciyi yeniden başlatın. Bu, CPU ve bellek kullanımını düşürür:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Sorunun devam edip etmediğini onaylamak için API çağrılarını izleyin.
- Apigee Edge Destek Ekibi ile iletişime geçin ve yüksek CPU/bellek kullanımının nedenini araştırmalarına yardımcı olmak için
/opt/apigee/var/log/edge-message-processor/logs/system.log)
iş parçacığı dökümlerini, yığın dökümünü ve Mesaj İşlemcisi günlüklerini sağlayın.
- Bir Mesaj İşleyicide yüksek CPU kullanımı yaşanıyorsa aşağıdaki komutu kullanarak 30 saniyede bir üç işleme devam eden mesaj ipi dökümü oluşturun:
Yönlendiricide ve Mesaj İşleyici'de zaman aşımı değerini artırın
Yönlendiricide ve Mesaj İşleyicide ayarlanacak zaman aşımı değerlerini gereksinimlerinize göre dikkatlice seçin. İsteğe bağlı olarak büyük zaman aşımı değerleri belirlemeyin. Yardıma ihtiyacınız varsa Apigee Edge Destek Ekibi ile iletişime geçin.
Yönlendirici
chown apigee:apigee /opt/apigee/customer/application/router.properties
- Yönlendirici makinesinde
/opt/apigee/customer/application/router.properties
dosyasını oluşturun (henüz yoksa). - Bu dosyaya aşağıdaki 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 aşağıdaki gibi ayarlayın:
conf_load_balancing_load.balancing.driver.proxy.read.timeout=120
- Bu dosyanın apigee'ye ait olduğundan emin olun:
- Yönlendiriciyi yeniden başlatın:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- Birden fazla yönlendiriciniz varsa yukarıdaki adımları tüm yönlendiricilerde tekrarlayın.
Mesaj İşleyici
- Henüz yoksa Mesaj İşleyen makinesinde
/opt/apigee/customer/application/message-processor.properties
dosyasını oluşturun. - Aşağıdaki satırı bu dosyaya ekleyin:
conf_http_HTTPTransport.io.timeout.millis=TIME_IN_MILLISECONDS
Örneğin, zaman aşımı değerini 120 saniye olarak ayarlamak istiyorsanız değeri şu şekilde ayarlayın:
conf_http_HTTPTransport.io.timeout.millis=120000
- Bu dosyanın Apigee'ye ait olduğundan emin olun:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mesaj İşlemciyi yeniden başlatın:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- Birden fazla Mesaj İşleyiciniz varsa tüm Mesaj İşleyenler 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'in yavaş API isteği işlemesi
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
- Edge kullanıcı arayüzünde etkilenen API'yi takip edin.
- Hatanın oluşmasını bekleyin veya API çağrınız varsa bazı API çağrıları yapıp
504 Gateway Timeout
hatasını yeniden oluşturun. - Bu durumda, Trace'te başarılı bir yanıt görebileceğinizi unutmayın.
- Mesaj işleyici, yönlendirici/istemcide belirtilen zaman aşımı süresi (hangisi daha düşükse) içinde yanıt vermediğinde yönlendirici/istemci zaman aşımına uğrar. Ancak Mesaj İşleyici, isteği işlemeye devam eder ve işlemi başarıyla tamamlayabilir.
- 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. Diğer bir deyişle, API Proxy'deki herhangi bir politika (ServiceCallout politikası dışında) uzun süre aldığında bu zaman aşımı tetiklenmez.
- Hata oluştuktan sonra en uzun geçen süreye sahip isteği inceleyin.
- Her aşamada geçen süreyi kontrol edin ve en çok sürenin harcandığı aşamayı not edin.
- Hizmet açıklama metni politikası dışındaki politikalardan herhangi birinde en uzun geçen süreyi görüyorsanız Edge'in isteği işleme süresinin uzun olduğunu gösterir.
- JavaScript Politikası'nda geçen sürenin çok yüksek olduğunu gösteren örnek bir kullanıcı arayüzü izleme örneğini burada bulabilirsiniz:
- Yukarıdaki örnekte, JavaScript politikasının yaklaşık 245 saniye gibi anormal derecede uzun bir süre sürdüğünü fark edebilirsiniz.
Çözünürlük
- Yanıtlanması uzun süren politikanın olup olmadığını ve işlenmesinin uzun sürebileceği özel kod olup olmadığını kontrol edin. Böyle bir kod varsa tanımlanan kodu düzeltip düzeltemeyeceğinizi veya optimize edip edemeyeceğinize bakın.
- Uzun işleme süresine neden olabilecek özel bir kod yoksa Mesaj İşlemcilerinin yüksek CPU veya bellek kullanımı sağlayıp sağlamadığını kontrol edin:
- Herhangi bir Mesaj İşlemci, yüksek CPU kullanımı yaşıyorsa her 30 saniyede bir şu komutu kullanarak üç iş parçacığı dökümü oluşturun:
JAVA_HOME/bin/jstack -l PID > FILENAME
- Herhangi bir Mesaj İşleyen'in bellek kullanımı yüksekse 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
- Aşağıdaki komutu kullanarak İleti İşlemcisini yeniden başlatın. Bu işlem, CPU ve bellek kullanımını düşürür.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- API çağrılarını izleyin ve sorunun devam edip etmediğini doğrulayın.
- Apigee Edge Destek Ekibi ile iletişime geçin ve yüksek CPU/bellek kullanımının nedenini araştırmalarına yardımcı olmak için
/opt/apigee/var/log/edge-message-processor/logs/system.log)
mesaj dizisinin dökümlerini, yığın dökümünü ve Mesaj İşlemcisi günlüklerini sağlayın.
- Herhangi bir Mesaj İşlemci, yüksek CPU kullanımı yaşıyorsa her 30 saniyede bir şu komutu kullanarak üç iş parçacığı dökümü oluşturun:
API İzleme'yi kullanarak sorunları teşhis etme
API İzleme, 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ızlı bir şekilde tespit etmenizi sağlar.
API Monitoring'i kullanarak API'lerinizle ilgili 5xx sorunlarını nasıl gidereceğinizi gösteren örnek bir senaryoyu inceleyin. Örneğin, 504 durum kodlarının sayısı belirli bir eşiği aştığında bildirim almak için bir uyarı ayarlamak isteyebilirsiniz.