2012-06-26 27 views
18

Tôi đã làm việc với công cụ ứng dụng trong một thời gian, tôi biết rằng có appstats nhưng chỉ hiển thị kho dữ liệu/memcache và không liên quan đến số liệu thống kê sử dụng bộ nhớ thực tế.Memory profiling/monitoring (python) trên Google AppEngine

tôi đã cố gắng để tích hợp với AppTrace (với tất cả các thành phần phiên bản mới nhất) nhưng tôi không thể tiếp tục, kể từ khi tôi nhận được lỗi này:

ImportError: dlopen(../apptrace/guppy/sets/setsc.so, 2): Symbol not found: __PyLong_AsScaledDouble 
Referenced from: ../apptrace/guppy/sets/setsc.so 
Expected in: flat namespace 

Vì vậy, câu hỏi của tôi là: là những gì cách tốt nhất (trên appengine sdk) để hồ sơ/giám sát bộ nhớ/bắt rò rỉ bộ nhớ và các công cụ liên quan đến bộ nhớ python khác (hoặc trên máy chủ cục bộ hoặc Google)?

btw, chúng tôi sử dụng Python 2.7 và chúng tôi đang làm việc trên Mac OS X (10.7.4)

+0

Hình như setsc.so có lẽ là xây dựng cho một phiên bản khác của trăn, đưa cho bạn không thể xây dựng rằng mô-đun trên cài đặt.apptrace làm việc trong dev, tôi nghĩ rằng giá trị của nó cố gắng để có được nó chạy. –

+0

nếu bạn không sử dụng tiền thưởng, bạn mất điểm và không có cơ thể nhận được nó – Efazati

Trả lời

0

Tôi nghĩ rằng đây là tiện ích tốt nhất

appengine-profiler - Google App Engine profiler bằng Python - Dự án Google Hosting ->http://code.google.com/p/appengine-profiler/

08-13 12:40AM 04.586 /camstore/upload 200 508ms 351cpu_ms 293api_cpu_ms 0kb libwww-perl/5.825,gzip(gfe) 
11.222.111.222 - - [13/Aug/2010:00:40:05 -0700] "POST /camstore/upload HTTP/1.1" 200 181 - "libwww-perl/5.825,gzip(gfe)" 
"example.appspot.com:443" ms=508 cpu_ms=352 api_cpu_ms=293 cpm_usd=0.018512 

[I] 08-13 12:40AM 05.021 
    Request summary (uptime=161, ID=6C0D1DD1:1.999999999 : Google App Engine/1.3.6 @ na5): 
    ms   = 425.66 (api_datastore_v3 = 98%, other = 2%) 
    cpu_ms  = 326.67 (api_datastore_v3 = 95%, other = 5%) 
    api_cpu_ms = 293.33 (api_datastore_v3 = 100%, other = 0%) 

bạn cũng có thể sử dụng memcacheApi và staf khác

+5

Nhưng, điều này không chỉ hiển thị thông tin sử dụng CPU? Làm thế nào bạn có thể sử dụng điều này để sử dụng bộ nhớ hồ sơ? (Đó là những gì OP đang yêu cầu) – payala

+3

Câu trả lời cho OP chính xác như thế nào? –

2

Tôi nghĩ rằng không có công cụ để giám sát việc sử dụng bộ nhớ trong Google App Engine, bạn có thể cấu chương trình, màn hình mô-đun lần nhập khẩu , mã số bảo hiểm. Vì vậy, không phải công cụ để phát hiện rò rỉ bộ nhớ nhỏ.

4

Bài đăng này là 3 tuổi, tuy nhiên tôi nghĩ câu trả lời này vẫn đáng để chia sẻ để giúp đỡ người khác. Tôi có hỗ trợ Google App Engine cao cấp và đã liên hệ với họ về cùng một vấn đề này.

Kỹ sư Google khuyên tôi rằng Google App Engine runtime API không được dùng nữa, nhưng vẫn hoạt động. Nó cung cấp một phương thức gọi là memory_usage.

from google.appengine.api.runtime import runtime 
import logging 

logging.info(runtime.memory_usage()) 

Điều này sẽ xuất số liệu thống kê sử dụng bộ nhớ, nơi các số được biểu thị bằng MB. Ví dụ:

current: 464.0859375 
average1m: 464 
average10m: 379.575 

Bằng cách đặt câu lệnh ghi vào điểm chính trong mã, bạn có thể tìm ra phần nào gây rò rỉ bộ nhớ.

+0

Đây là chính xác những gì tôi cần, tiếc là bây giờ có vẻ như memory_usage trả về một chuỗi rỗng: ( –

+0

Nếu bạn thử runtime.memory_usage(). Current()? – Milo

+0

.current() báo cáo 0.0 thật không may. Tôi đang ở trên OSX –

0

Pympler: https://github.com/pympler/pympler Hiện nay phải gỡ bỏ phần 'ImportError' của trừ khối tại dòng 1330 trong asizeof.py (tức là để nó bắt tất cả các trường hợp ngoại lệ) như statvfs là không sử dụng được trên game:

try: 
    from os import statvfs 
    _typedef_both(type(statvfs(curdir)), refs=_statvfs_refs, # statvfs_result 
        item=_sizeof_Cvoidp, leng=_len) 
except: # ImportError: <- Comment out, or add an OSError except as well 
    pass 

Nếu không, hoạt động hoàn hảo:

import logging, traceback 

try: 
    from pympler.asizeof import asizeof 
    for variables in [locals(), globals()]: 
    logging.debug(str({k: asizeof(variables[k]) for k in variables}) 

except Exception as e: 
    logging.warning('Could not perform memory check: %s\n%s' % (str(e), str(traceback.format_exc()))) 
Các vấn đề liên quan