Đoạn mã sau thêm nhiệm vụ thực hiện một số chế biến trên các tập tin từ blobstore, nó chạy trên một B2 backend nên nó không có giới hạn thời gian chờ:appengine, python: Có rò rỉ bộ nhớ trong taskqueue.add() không?
for task in tasks:
tools.debug("add_tasks_to_process_files", "adding_task")
taskqueue.add(\
name=("Process_%s_files---%s--%s--%s--%s" % \
(len(tasks[task]), task[1], task[0], task[2], int(time.time()))),\
queue_name="files-processor",\
url="/analytics/process_files/",\
params={"processing_task": json.dumps({"profile": task, "blobs_to_process": tasks[task]})})
nhiệm vụ là một từ điển trong các hình thức sau đây:
{
(x1,y1,z1): ["blob_key", "blob_key"... (limited to 35 keys)],
(x2,y2,z2): ["blob_key", "blob_key"...],
.
.
.
}
x1, y1, z1 là tất cả các chuỗi
tools.debug là một chức năng tôi đã viết rằng gửi tin nhắn để sever địa phương của tôi sử dụng tìm nạp url (vì vậy tôi sẽ không phải chờ đợi 20m trong để có thể đọc các bản ghi):
def debug(location, message, params=None, force=False):
if not (settings.REMOTE_DEBUG or settings.LOCALE_DEBUG or force):
return
if params is None:
params = {}
params["memory"] = runtime.memory_usage().current()
params["instance_id"] = settings.INSTANCE_ID
debug_message = "%s/%s?%s" % (urllib2.quote(location), urllib2.quote(message), "&".join(["%s=%s" % (p, urllib2.quote(unicode(params[p]).encode("utf-8"))) for p in params]))
if settings.REMOTE_DEBUG or force:
fetch("%s/%s" % (settings.REMOTE_DEBUGGER, debug_message))
if settings.LOCALE_DEBUG or force:
logging.debug(debug_message)
từ tools.debug đã không có trong mã khi nó lần đầu tiên thất bại, tôi biết chắc chắn nó không phải là nguyên nhân cho các vấn đề bộ nhớ.
Tôi đã nhận lỗi này:
/add_tasks_to_process_files/ 500 98812ms 0kb instance=0 AppEngine-Google; (+http://code.google.com/appengine):
A serious problem was encountered with the process that handled this request, causing it to exit. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you may have a memory leak in your application. (Error code 201)
Và ngay sau khi nó:
/_ah/stop 500 110ms 0kb
Exceeded soft private memory limit with 283.406 MB after servicing 1 requests total
lần nữa, tôi nhận được nó cho mã trên mà không có dòng: tools.debug("add_tasks_to_process_files", "adding_task")
Bây giờ, hãy để tôi hiển thị cho bạn những gì tôi thấy trong trình gỡ lỗi của tôi:
1 2012-1-19 14:41:38 [processors-backend] processors-backend-initiated instance_id: 1329662498, memory: 18.05078125, backend_instance_url: http://0.processors.razoss-dock-dev.appspot.com, backend_load_balancer_url: http://processors.razoss-dock-dev.appspot.com
2 2012-1-19 14:41:39 [AddTasksToProcessFiles] start instance_id: 1329662498, files_sent_to_processing_already_in_previous_failed_attempts: 0, memory: 19.3828125
3 2012-1-19 14:41:59 [AddTasksToProcessFiles] add_tasks_to_process_files-LOOP_END total_tasks_to_add: 9180, total_files_added_to_tasks: 9184, task_monitor.files_sent_to_processing: 0, total_files_on_tasks_dict: 9184, instance_id: 1329662498, memory: 56.52734375
4 2012-1-19 14:42:0 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.81640625
5 2012-1-19 14:42:0 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.81640625
6 2012-1-19 14:42:1 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.9375
7 2012-1-19 14:42:2 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.9375
8 2012-1-19 14:42:2 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 58.03125
.
.
.
2183 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 280.66015625
2184 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 280.66015625
2185 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0
2 186 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0
2187 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0
2188 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.3828125
toàn bộ dấu vết: http://pastebin.com/CcPDU6s7
Có rò rỉ bộ nhớ trong taskqueue.add() không?
Cảm ơn
Bạn đánh giá mức sử dụng bộ nhớ như thế nào? – proppy
Bạn có mẫu sử dụng bộ nhớ tương tự không nếu bạn xóa cuộc gọi api blobstore khỏi công việc của mình? – proppy
Xin chào proppy: Tôi đã tìm được nguyên nhân: các appstats đã được kích hoạt ... thanks anyway – theosp