2013-08-04 19 views
5

Tôi đang tải lên hình ảnh (< 10MB) cho một trình xử lý đơn giản (bên dưới) để trình bày vấn đề này. Sau khi phân phát ~ 5 yêu cầu trên một phiên bản F1 (128MB ram) tôi chạy vượt quá giới hạn bộ nhớ: "Đã vượt quá giới hạn bộ nhớ riêng tư với 152.414 MB sau khi hoàn thành 6 yêu cầu"Tải lên và gán tập tin của App Engine vào các lỗi gây ra lỗi sử dụng bộ nhớ sau khi cung cấp các yêu cầu X

Trên bản F2 (256MB ram) có được một vài yêu cầu nhiều hơn, nhưng không nhiều: "Vượt quá giới hạn bộ nhớ tin mềm với 258,156 MB sau khi phục vụ 19 yêu cầu tổng"

Ví dụ mã:

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) 

các văn bản trong các bản ghi cho thấy ứng dụng của tôi có thể có rò rỉ bộ nhớ. Có vẻ như vấn đề có thể là do thu thập rác của Python hoặc App Engine sau khi yêu cầu hoàn tất. Bất kỳ đề xuất nào về cách giữ cho các trường hợp của tôi không bị chấm dứt sau một vài yêu cầu?

cập nhật - Tôi nhìn thấy những hành vi tương tự sử dụng framework ứng dụng web (thay vì webapp2): "Vượt quá giới hạn bộ nhớ tin mềm với 143,121 MB sau khi phục vụ 6 yêu cầu tổng"

+0

Đây có phải là mã chính xác bạn đang sử dụng không? Tôi nghiêm túc nghi ngờ đó là một vấn đề đặc hữu với appengine. Nếu không nhiều người sẽ gặp vấn đề. Tôi có thể tải lên hình ảnh cả ngày và không hết bộ nhớ (mặc dù tôi không sử dụng webapp2) nhưng quá trình xử lý của tôi phức tạp hơn nhiều so với ví dụ của bạn. –

+0

Mã đúng, chính xác để tạo lại điều này. Chỉ cần truy cập vào tệp đã tải lên là đủ để gây rò rỉ bộ nhớ. Tôi đã thực hiện chuyển đổi hình ảnh và tải lên Google Cloud Storage ban đầu nhưng tôi đã xóa nó xuống mức tối thiểu mà vẫn có vấn đề. Tôi đã thử một webapp và thấy cùng một hành vi (mã webapp được thêm ở trên). Bạn tải tệp lên trình xử lý của mình nhanh đến mức nào? Các tệp lớn đến mức nào? – robertfischer

+0

Tôi không đề xuất không sử dụng webapp2. Thêm rằng trải nghiệm của tôi không dựa trên webapp2 vì lợi ích của việc tiết lộ đầy đủ. Tôi cũng không sử dụng webapp. Tất cả công việc của tôi thường là kim tự tháp và/hoặc bobo. –

Trả lời

2

Tại sao không sử dụng Blobstore cho bạn hình ảnh? https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob

+0

Tôi đang cố gắng gửi lại hình thu nhỏ của hình ảnh để hiển thị cho người dùng trong ứng dụng khách tải lên khi nó được tải lên thành công. Tạo hình thu nhỏ trong JS sử dụng một tấn RAM và điều này có vẻ giống như một cái gì đó tôi nên trở về từ máy chủ. – robertfischer

+2

Tôi cũng làm như vậy trong các dự án của mình, thông qua ajax thường. Nhưng tôi nghĩ rằng vấn đề của bạn là bạn đang cố gắng tải hình ảnh lên máy chủ 'thông thường' chứ không phải máy chủ được tối ưu hóa đặc biệt cho tải lên phương tiện, như Blobstore và Cloud Storage chẳng hạn. Nhìn vào ví dụ trên trang tôi liên kết, đó là thủ tục đơn giản. Bạn cũng có thể xem xét hình ảnh API: https://developers.google.com/appengine/docs/python/images/usingimages#Uploading – Sasxa

+0

Tôi thứ hai sử dụng BlobstoreAPI vì nó rất đơn giản và luôn làm việc cho tôi. Tôi nghĩ nó phù hợp với trường hợp sử dụng của bạn, @robertfischer. Bạn vẫn có thể lưu trữ hình ảnh trong Google Cloud Storage như được mô tả [tại đây] (https://cloud.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage). – pfalke

Các vấn đề liên quan