Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 502 Bad Gateway HTTP durum kodunu ve protocol.http.TooBigBody hata kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 502 Bad Gateway
Ayrıca aşağıdaki hata mesajını da görebilirsiniz:
{
"fault":{
"faultstring":"Body buffer overflow",
"detail":{
"errorcode":"protocol.http.TooBigBody"
}
}
}Olası nedenler
Bu hata, hedef/arka uç sunucusu tarafından HTTP yanıtının bir parçası olarak Apigee Edge'e gönderilen yük boyutu, Apigee Edge'deki izin verilen sınırı aştığında oluşur.
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yanıt yük boyutu, izin verilen sınırdan büyük | Hedef/arka uç sunucusu tarafından Apigee'ye HTTP yanıtının bir parçası olarak gönderilen yük boyutu, Apigee'de izin verilen sınırın üzerinde. | Edge Public ve Private Cloud kullanıcıları |
| Yanıt yük boyutu, sıkıştırma açıldıktan sonra izin verilen sınırı aşıyor | Hedef/arka uç sunucu tarafından HTTP yanıtının bir parçası olarak Apigee'ye sıkıştırılmış biçimde gönderilen yük boyutu, Apigee tarafından sıkıştırılması durumunda izin verilen sınırı aşıyor. | Edge Public ve Private Cloud kullanıcıları |
Sık karşılaşılan teşhis adımları
Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:
API Monitoring
API İzleme'yi kullanarak hatayı teşhis etmek için:
- Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açmanız gerekir.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodu
protocol.http.TooBigBodyolan bir hücre seçin:
Aşağıda gösterildiği gibi, hata kodu
protocol.http.TooBigBodyile ilgili bilgileri görürsünüz:
Günlükleri görüntüle'yi tıklayın ve başarısız olan isteğin satırını genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
502 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.TooBigBody.
- Durum Kodu:
- Hata Kaynağı değeri
targetve Hata Kodu değeriprotocol.http.TooBigBodyise bu, hedef/ arka uç sunucudan gelen HTTP yanıtının, Apigee Edge'deki izin verilen sınırdan daha büyük bir yanıt yükü boyutuna sahip olduğunu gösterir.
Trace
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu ve aşağıdakilerden birini etkinleştirin:
502 Bad Gatewayhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını yapın ve
502 Bad Gatewayhatasını yeniden oluşturun.
- Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
Aşağıda gösterildiği gibi, Hedef sunucudan yanıt alındı aşamasından hemen sonraki Hata aşamasına gidin:
İzlemedeki hata değerlerini not edin:
- hata:
Body buffer overflow - error.class:
com.apigee.errors.http.server.BadGateway
Bu, Apigee Edge'in (Mesaj İşleyici bileşeni) yük boyutu izin verilen sınırı aştığı için arka uç sunucusundan yanıt alır almaz hatayı verdiğini gösterir.
- hata:
Başarısızlığı, aşağıdaki örnekte gösterildiği gibi İstemciye Gönderilen Yanıt aşamasında görürsünüz:
- İzden hatanın değerlerini not edin. Yukarıdaki örnek izde şunlar gösterilmektedir:
- hata:
502 Bad Gateway - Hata İçeriği:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
- hata:
Farklı senaryolar için aşağıda gösterildiği gibi Hedef sunucudan yanıt alındı aşamasına gidin:
Sıkıştırılmamış
Senaryo 1: Yanıt yükü sıkıştırılmamış biçimde gönderildi
İzlemedeki hata değerlerini not edin:
- Hedef sunucudan yanıt alındı:
200 OK - Content-Length (Response Headers bölümünden): ~11 MB
Sıkıştırılmış
2. senaryo: İstek yükü, sıkıştırılmış biçimde gönderildi
İzlemedeki hata değerlerini not edin:
- Hedef sunucudan yanıt alındı:
200 OK - Content-Encoding: Bu başlığı Response Headers (Yanıt Başlıkları) bölümünde görürseniz değeri not edin. Örneğin, bu örnekte değer
gzip'dır.
- Hedef sunucudan yanıt alındı:
Yanıt İçeriği bölümündeki Gövde'yi inceleyin:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve ilgili ayrıntıları görmek için aşamayı tıklayın.
- Aşama Ayrıntıları'nda Okunan Değişkenler bölümüne gidin ve
target.received.content.lengthdeğerlerini belirleyin. Bu değerler şunları gösterir:- Yanıt yükünün sıkıştırılmamış biçimde gönderildiğindeki gerçek boyutu ve
- Yük sıkıştırılmış biçimde gönderildiğinde Apigee tarafından sıkıştırma açıldıktan sonra yanıt yükünün boyutu. Bu senaryoda her zaman izin verilen sınırın (10 MB) değeriyle aynı olur.
Sıkıştırılmamış
Senaryo 1: Yanıt yükü sıkıştırılmamış biçimde gönderildi
target.received.content.length değerini not edin:
İstek başlıkları Değer target.received.content.length ~11 MB Sıkıştırılmış
2. senaryo: İstek yükü, sıkıştırılmış biçimde gönderildi
target.received.content.length değerini not edin:
İstek başlıkları Değer target.received.content.length ~10 MB Aşağıdaki tabloda,
502hatasının target.received.content.length değerine bağlı olarak iki senaryoda neden Apigee tarafından döndürüldüğü açıklanmaktadır:Senaryo target.received.content.length değerinin değeri Hatanın nedeni Sıkıştırılmamış biçimde yanıt yükü ~11 MB Boyut > izin verilen 10 MB sınırı Sıkıştırılmış biçimde yanıt yükü ~10 MB Sıkıştırma açıldığında boyut sınırı aşıldı
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
502hatalarıyla ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Nerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
502Belirli bir süre boyunca hata olup olmadığını (sorun geçmişte yaşandıysa) veya502ile hâlâ başarısız olan istekler olup olmadığını görmek için arama yapın.502hataları bulursanız ve X-Apigee-fault-code değeriprotocol.http.TooBigBodyile eşleşiyorsa X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
NGINX erişim günlüğündeki yukarıdaki örnek girişte, X-Apigee- fault-code ve X-Apigee-fault-source: için aşağıdaki değerler yer almaktadır:
Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.TooBigBodyX-Apigee-fault-source target
Neden: Yanıt yük boyutu, izin verilen sınırdan daha büyük
Teşhis
- API İzleme, Trace aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu, Hata Kaynağını ve Yanıt Yükü Boyutunu belirleyin. Bu işlem, Yaygın teşhis adımları bölümünde 1. senaryo ile açıklanmıştır.
- Hata Kaynağı
targetdeğerine sahipse bu, hedef/arka uç sunucusu tarafından Apigee'ye gönderilen yanıt yükü boyutunun Apigee Edge'deki izin verilen sınırdan daha büyük olduğunu gösterir. - 1. adımda belirlenen Yanıt Yükü Boyutu'nu doğrulayın.
- Yük boyutu, izin verilen 10 MB sınırını aşıyorsa hatanın nedeni budur.
- Yük boyutu, izin verilen sınır olan yaklaşık 10 MB ise yanıt yükünün sıkıştırılmış biçimde iletilmesi mümkündür. Neden: Yanıt yük boyutu, sıkıştırma açıldıktan sonra izin verilen sınırı aşıyor.
- Aşağıdaki adımları uygulayarak gerçek yanıtı kontrol edip yanıt yükü boyutunun gerçekten de izin verilen 10 MB sınırından büyük olduğunu doğrulayın:
- Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
- Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- Herkese açık bulut/özel bulut kullanıcısıysanız arka uç sunucusundan veya arka uç sunucusuna istekte bulunmanıza izin verilen başka bir makineden doğrudan arka uç sunucusuna istekte bulunun.
- Özel bulut kullanıcısıysanız isteği Mesaj İşleyicilerden birinden arka uç sunucusuna da gönderebilirsiniz.
- Yanıtla iletilen yükün boyutunu Content-Length başlığını kontrol ederek doğrulayın.
- Yükün boyutunun Apigee Edge'de izin verilen sınırdan fazla olduğunu görürseniz sorunun nedeni budur.
Arka uç sunucusundan örnek yanıt:
curl -v https://BACKENDSERVER-HOSTNAME/testfile
* About to connect() to 10.14.0.10 port 9000 (#0) * Trying 10.14.0.10... * Connected to 10.14.0.10 (10.148.0.10) port 9000 (#0) > GET /testfile HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.14.0.10:9000 > Accept: */* > < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 11534336 < Content-Type: application/octet-stream < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Date: Wed, 30 Jun 2021 09:22:41 GMT < ----snipped---- <Response Body>
Yukarıdaki örnekte, Apigee Edge'de izin verilen sınırı aştığı için bu hataya neden olan
Content-Length: 11534336 (which is ~11 MB)öğesini görebilirsiniz.
Çözünürlük
Çözünürlük bölümüne bakın.
Neden: Yanıt yük boyutu, sıkıştırma açıldıktan sonra izin verilen sınırı aşıyor.
Yanıt yükü sıkıştırılmış biçimde gönderilirse ve yanıt başlığı Content-Encoding gzip, olarak ayarlanırsa Apigee yanıt yükünü açar. Apigee, sıkıştırmayı açma işlemi sırasında yük boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu tespit ederse sıkıştırmayı açma işlemine devam etmez ve hemen 502 Bad Gateway ile protocol.http.TooBigBody hata koduyla yanıt verir.
Teşhis
- API İzleme, İzleme Aracı veya NGINX Erişim günlükleri kullanılarak gözlemlenen hata için Hata Kodunu, Hata Kaynağını ve Yanıt Yükü boyutunu belirleyin. Bu işlem, Genel teşhis adımları bölümünde 2. senaryo ile açıklanmıştır.
- Fault Source değeri
targetise bu, hedef/arka uç uygulaması tarafından Apigee'ye gönderilen yanıt yükü boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu gösterir. - 1. adımda belirlenen Yanıt Yükü Boyutu'nu doğrulayın.
- Yük boyutu, izin verilen 10 MB sınırını aşıyorsa hatanın nedeni budur.
- Yük boyutu, izin verilen sınır olan ~10 MB ise yanıt yükünün sıkıştırılmış biçimde iletilmesi mümkündür. Bu durumda, sıkıştırılmış yanıt yükünün sıkıştırılmamış boyutunu kontrol edin.
- Aşağıdaki yöntemlerden birini kullanarak hedef/arka uçtan gelen yanıtın sıkıştırılmış biçimde gönderilip gönderilmediğini ve sıkıştırılmamış boyutun izin verilen sınırdan büyük olup olmadığını doğrulayabilirsiniz:
Trace
Trace aracını kullanma:
- Başarısız olan istek için izleme yakaladıysanız İzleme ve
- target.received.content.length değerini belirleyin.
- İstemciden gelen istekte Content-Encoding:
gzipbaşlığının bulunup bulunmadığını doğrulayın.
- target.received.content.length değeri izin verilen 10 MB sınırına yakınsa ve yanıt başlığı Content-Encoding:
gzipise bu hatanın nedeni budur.
Gerçek istek
Gerçek isteği kullanma:
- Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
- Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- Yanıtta iletilen yükün boyutunu ve yanıtta gönderilen
Content-Encodingüstbilgisini doğrulayın. - Yanıt başlığının
Content-Encoding,gzipolarak ayarlandığını ve yükün sıkıştırılmamış boyutunun Apigee Edge'de izin verilen sınırdan fazla olduğunu görürseniz bu hatanın nedeni budur.Arka uç sunucusundan alınan örnek yanıt:
curl -v https://BACKENDSERVER-HOSTNAME/testzippedfile.gz
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /testzippedfile.gz HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* > < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Encoding: gzip < Content-Type: application/x-gzip < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Testheader: test < Date: Wed, 07 Jul 2021 10:14:16 GMT < Transfer-Encoding: chunked < ----snipped---- <Response Body>
Yukarıdaki örnekte,
Content-Encoding: gzipüstbilgisi gönderiliyor ve yanıttakitestzippedfile.gzdosyasının boyutu sınırdan küçük olmasına rağmen sıkıştırılmamıştestzippedfiledosyasının boyutu yaklaşık 15 MB.
- Yanıtta iletilen yükün boyutunu ve yanıtta gönderilen
Mesaj işleyici günlükleri
Mesaj İşleyici günlüklerini kullanma:
- Özel bulut kullanıcısıysanız HTTP
502hatalarıyla ilgili temel bilgileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz. Mesaj İşleyici günlüklerini kontrol edin
/opt/apigee/var/log/edge-message-processor/logs/system.logBelirli bir süre boyunca
502hataları olup olmadığını (sorun geçmişte yaşandıysa) veya502ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. Aşağıdaki arama dizelerini kullanabilirsiniz:grep -ri "chunkCount"
grep -ri "BadGateway: Body buffer overflow"
- Aşağıdakine benzer
system.logsatırları görürsünüz (TotalReadvechunkCountsizin durumunuzda farklı olabilir):2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2571 2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:10.148.0.10:9000 Local:10.148.0.9:42240]@9155 useCount=1 bytesRead=0 bytesWritten=182 age=23ms lastIO=0ms isOpen=true).onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: Body buffer overflow 2021-07-07 09:40:47,012 NIOThread@7 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@77cbd7c4, Body buffer overflow)
Sıkıştırmayı açma işlemi sırasında, İleti İşleyici toplam okunan bayt sayısının 10 MB'tan fazla olduğunu belirlediği anda durur ve aşağıdaki satırı yazdırır:
Message is too large. TotalRead 10489856 chunkCount 2571Bu, Yanıt Yükü Boyutu'nun 10 MB'tan büyük olduğu ve Apigee'nin, boyut 10 MB sınırını aşmaya başladığında hata kodu olarak
protocol.http.TooBigBodyile hatayı gösterdiği anlamına gelir.
- Başarısız olan istek için izleme yakaladıysanız İzleme ve
Çözünürlük
Boyutu düzelt
1. seçenek [Önerilir]: Hedef sunucu uygulamasının, Apigee sınırını aşan yük boyutu göndermesini engelleyin
- Sınırlar bölümünde tanımlandığı gibi, belirli hedef sunucunun yanıt / yük boyutunu izin verilen sınırdan daha fazla göndermesinin nedenini analiz edin.
- Bu durum istenmiyorsa hedef sunucu uygulamanızı, izin verilen sınırdan daha küçük bir yanıt / yük boyutu gönderecek şekilde değiştirin.
- İsteniyorsa ve izin verilen sınırdan daha fazla yanıt/yük göndermek istiyorsanız sonraki seçeneklere gidin.
İmzalanmış URL kalıbı
2. seçenek [Önerilir]: Apigee JavaCallout içinde imzalı URL kalıbını kullanın
Apigee, 10 MB'tan büyük yükler için GitHub'daki Edge Callout: Signed URL Generator örneğinde gösterildiği gibi, bir Apigee JavaCallout içinde imzalı URL'ler kalıbının kullanılmasını önerir.
Canlı Yayın
3. seçenek: Yayın özelliğini kullanma
API proxy'nizin çok büyük istekleri ve/veya yanıtları işlemesi gerekiyorsa Apigee'de akışı etkinleştirebilirsiniz.
CwC
4. seçenek: Arabellek sınırını artırmak için CwC mülkünü kullanma
Bu seçenek yalnızca önerilen seçeneklerden hiçbirini kullanamadığınızda kullanılmalıdır. Varsayılan boyut artırılırsa performans sorunları yaşanabilir.
Apigee, istek ve yanıt yük boyutu sınırını artırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için Yönlendiricide veya ileti işlemcisinde ileti boyutu sınırını ayarlama başlıklı makaleyi inceleyin.
Sınırlar
Apigee, istemci uygulamasının ve arka uç sunucusunun,
Apigee Edge Sınırları'nda
Request/response size için belirtilen izin verilen sınırı aşan yük boyutları göndermemesini bekler.
- Herkese açık bulut kullanıcısıysanız istek ve yanıt yükü boyutu için maksimum sınır,
Request/response sizeiçin Apigee Edge Sınırları'nda belirtildiği gibidir. - Özel bulut kullanıcısıysanız istek ve yanıt yükü boyutu için varsayılan maksimum limiti değiştirmiş olabilirsiniz (önerilen bir uygulama olmasa da). Geçerli sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum istek yükü boyutu sınırını belirleyebilirsiniz.
Mevcut sınır nasıl kontrol edilir?
Bu bölümde, tesisinHTTPResponse.body.buffer.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı açıklanmaktadır.
Mesaj İşleyici makinesinde
HTTPResponse.body.buffer.limitözelliğini/opt/apigee/edge-message- processor/confdizininde arayın ve aşağıda gösterildiği gibi hangi değerin ayarlandığını kontrol edin:grep -ri "HTTPResponse.body.buffer.limit" /opt/apigee/edge-message-processor/conf
Yukarıdaki komutun örnek sonucu aşağıdaki gibidir:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.body.buffer.limit=10m
Yukarıdaki örnek çıktıda,
HTTPResponse.body.buffer.limitözelliğininhttp.propertiesiçinde10mdeğeriyle ayarlandığını unutmayın.Bu, Private Cloud için Apigee'de yapılandırılan istek yükü boyutu sınırının 10 MB olduğunu gösterir.
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplama başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplamalıdır
Aşağıdaki teşhis bilgilerini toplayın ve ardından Apigee Edge Destek Ekibi ile iletişime geçin:
Herkese açık bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Kuruluş adı
- Ortam adı
- API proxy'si adı
502hatasını yeniden oluşturmak için kullanılan tam curl komutu- API istekleri için izleme dosyası
- Hedef/arka uç sunucudan gelen yanıtın tam çıktısı ve yükün boyutu
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız olan istekler için gözlemlenen hata mesajının tamamı
- Kuruluş adı
- Ortam adı
- API proxy paketi
- Başarısız olan API isteklerinin izleme dosyası
502hatasını yeniden oluşturmak için kullanılan tam curl komutu- Hedef/arka uç sunucudan gelen yanıtın tam çıktısı ve yükün boyutu
NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log