2013-08-04 13 views
5

Bu sorunu göstermek için basitleştirilmiş bir işleyiciye (aşağıda) görüntüleri yüklüyorum (her biri10MB). Bir F1 (128MB ram) örneğinde ~ 5 istekleri sunulduktan sonra bellek sınırını aştım: "6 istek toplamına hizmet ettikten sonra 152.414 MB ile yumuşak özel bellek sınırı aşıldı"App Engine dosya yükleme ve atama değişkeni X istemine sunulduktan sonra bellek kullanımı hatası nedenleri

Bir F2 (256MB ram) örneğinde I birkaç daha fazla istek almak değil, birçok:

import webapp2 
class FileUploader(webapp2.RequestHandler): 

    def post(self): 
    test = self.request.get('file') 
    self.response.out.write('hi') 

app = webapp2.WSGIApplication([('/leak-uploader-example', FileUploader)], 
           debug=True) 
günlüklerinde metin önermek

başvurum olabilir:

Örnek kod "19 isteklerini servisten sonra 258,156 MB yumuşak özel bellek sınırı aşıldı toplam" bir bellek sızıntısı. Bir istek tamamlandıktan sonra sorun Python veya App Engine çöp toplama ile olabilir gibi görünüyor. Örneklerimin yalnızca birkaç istekten sonra sonlandırılmasını nasıl önleyebilirim?

güncelleme - Ben Webapp çerçevesini (yerine webapp2 ait) kullanılarak aynı davranışı görüyorum: "Toplam 6 isteklerini servisten sonra 143,121 MB yumuşak özel bellek sınırı aşıldı"

+0

Bu, kullandığınız tam kod mu? Appengine ile ilgili endemik bir sorun olduğundan şüphe ediyorum. Aksi halde pek çok insanın bir sorunu olur. Tüm gün görüntüleri yükleyebilirim ve hafızam dolduramıyorum (webapp2 kullanmamama rağmen), ancak işlemim sizden çok daha karmaşık. –

+0

Doğru, bunu çoğaltmak için doğru kod. Yüklenen dosyaya erişmek, bellek sızıntısına neden olmak için yeterlidir. Görüntü dönüşümleri yapıyordum ve Google Cloud Storage'a orijinal olarak yükleniyordum. Ancak, sorunları hala olan en düşük düzeyde düşürdüm. Ben bir webapp verdim ve aynı davranışı görüyorum (yukarıda eklenen webapp kodu). Dosyaları işleyicinize ne kadar hızlı yüklüyorsunuz? Dosyalar ne kadar büyük? – robertfischer

+0

Webapp2'yi kullanmamayı önermedim. Daha fazla bilgi birikimi, tam açıklamanın yararına webapp2'ye dayanmıyor. Ben de webapp kullanmıyorum. Bütün işlerim tipik olarak piramit ve/veya bobo ile. –

cevap

2
+0

Yüklemeyi başarılı bir şekilde yüklendiğinde, kullanıcıya yükleyici istemcisinde göstermek için resmin küçük resmini geri göndermeye çalışıyorum. JS'de küçük resim oluşturmak bir ton RAM kullanır ve bu sunucudan dönmem gereken bir şey gibi görünüyor. – robertfischer

+2

Projelerimde de aynısını ajax yoluyla yapıyorum. Ama bence senin problemin, 'düzenli' sunuculara resim yüklemeye çalıştığın, örneğin Blobstore ve Cloud Storage gibi medya yüklemesi için özel olarak optimize edilmiş sunuculara değil. Bağlandığım sayfadaki örneğe bakın, basit bir prosedür. Ayrıca resimlerin içine de bakabilirsiniz: https://developers.google.com/appengine/docs/python/images/usingimages#Uploading – Sasxa

+0

Ben BlobstoreAPI'yi kullanarak çok basit ve her zaman benim için çalıştım. Kullanım durumunuz için iyi bir uygun olduğunu düşünüyorum, @robertfischer. Fotoğrafların Google Cloud Storage'da saklandığı gibi [burada] (https://cloud.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage) açıklanmış olabilir. – pfalke