मेरे पास एक django वेबसर्वर है जो यूवीजीआई के तहत चल रहा है जो स्मृति को रिसाव करने के लिए प्रतीत होता है।गैर-ऑब्जेक्ट पायथन स्मृति रिसाव
विशेष रूप से, प्रक्रियाओं का आरएसएस धीरे-धीरे बढ़ता है जब तक कि मुझे इसे पुनरारंभ करना पड़े।
मुझे इस तरह के अन्य समान प्रश्नों के बारे में पता है, हालांकि अब तक पाए गए सभी समाधान/निष्कर्ष इस मामले में लागू नहीं होते हैं (जो मुझे मिल सकता है)।
अब तक, मैं meliae, Heapy, pympler और objgraph का इस्तेमाल किया है अजगर ढेर निरीक्षण करने के लिए और वे सभी एक ही बात की रिपोर्ट: समय के साथ स्मृति (उम्मीद) बहुत कम विचरण के साथ की 40MB के बारे में का उपयोग कर एक सामान्य की तलाश में ढेर (के रूप में चाहा हे)।
यह दुर्भाग्यवश प्रक्रिया आरएसएस के साथ पूरी तरह से असंगत है, जो पाइथन ढेर आकार में प्रतिबिंब के साथ खुशी से 400 एमबी + तक बढ़ेगा।
Memory snapshot:
types | # objects | total size
============================================= | =========== | ============
dict | 20868 | 19852512
str | 118598 | 11735239
unicode | 19038 | 10200248
tuple | 58718 | 5032528
type | 1903 | 1720312
code | 13225 | 1587000
list | 11393 | 1289704
datetime.datetime | 6953 | 333744
int | 12615 | 302760
<class 'django.utils.safestring.SafeUnicode | 18 | 258844
weakref | 2908 | 255904
<class 'django.db.models.base.ModelState | 3172 | 203008
builtin_function_or_method | 2612 | 188064
function (__wrapper__) | 1469 | 176280
cell | 2997 | 167832
getset_descriptor | 2106 | 151632
wrapper_descriptor | 1831 | 146480
set | 226 | 143056
StgDict | 217 | 138328
---------------------------
Total object memory: 56189 kB
Total process usage:
- Peak virtual memory size: 549016 kB
- Virtual memory size: 549012 kB
- Locked memory size: 0 kB
- Peak resident set size: 258876 kB
- Resident set size: 258868 kB
- Size of data segment: 243124 kB
- Size of stack segment: 324 kB
- Size of code segment: 396 kB
- Shared library code size: 57576 kB
- Page table entries size: 1028 kB
---------------------------
Heapy एक ऐसी ही बात दिखा उत्पादन
Memory snapshot:
Partition of a set of 289509 objects. Total size = 44189136 bytes.
Index Count % Size % Cumulative % Kind (class/dict of class)
0 128384 44 12557528 28 12557528 28 str
1 61545 21 5238528 12 17796056 40 tuple
2 5947 2 3455896 8 21251952 48 unicode
3 3618 1 3033264 7 24285216 55 dict (no owner)
4 990 0 2570448 6 26855664 61 dict of module
5 2165 1 1951496 4 28807160 65 type
6 16067 6 1928040 4 30735200 70 function
7 2163 1 1764168 4 32499368 74 dict of type
8 14290 5 1714800 4 34214168 77 types.CodeType
9 10294 4 1542960 3 35757128 81 list
<1046 more rows. Type e.g. '_.more' to view.>
---------------------------
Total process usage:
- Peak virtual memory size: 503132 kB
- Virtual memory size: 503128 kB
- Locked memory size: 0 kB
- Peak resident set size: 208580 kB
- Resident set size: 208576 kB
- Size of data segment: 192668 kB
- Size of stack segment: 324 kB
- Size of code segment: 396 kB
- Shared library code size: 57740 kB
- Page table entries size: 940 kB
---------------------------
:
Pympler उत्पादन की तुलना अजगर ढेर/वस्तु स्मृति बनाम प्रक्रिया आरएसएस -
कुछ नमूना उत्पादन मेरी बात को वर्णन करने
ध्यान दें कि दोनों मामलों में, रिपोर्ट किए गए ढेर का आकार 40-50 एमबी है, डब्ल्यू प्रक्रिया आरएसएस 200 एमबी + है।
मैं भी objgraph के get_leaking_objects() का इस्तेमाल किया है, अगर एक सी विस्तार बुरा रेफरी की गिनती कर रहा है देखने के लिए प्रयास हालांकि गैर gc'able वस्तुओं की संख्या समय के साथ विशेष रूप से नहीं उगता है।
क्या किसी को इस बारे में कोई अंतर्दृष्टि है कि इसे डिबग करने के बारे में कैसे जाना है? इस बिंदु पर, मैं यह मानते हुए हूँ दो चीजों में से एक मामला है:
- मैं एक सी विस्तार लीक स्मृति आंतरिक
- uwsgi ही स्मृति लीक कर रहा है (हालांकि मैं पर इस का कोई अन्य सबूत खोज पाए, नेट)
यह उल्लेखनीय हो सकता है कि मुझे किसी भी तरह के देव पर्यावरण में इसकी कोई प्रतिकृति नहीं मिली है (हालांकि यह संभव है कि मैं उन पर पर्याप्त ट्रैफिक नहीं फेंक रहा हूं)।
हम मॉड्यूल का एक समूह उपयोग करते हैं जिसमें सी-एक्सटेंशन (सरलजोन, किराए पर लेना आदि) है, इसलिए यह निश्चित रूप से विश्वसनीय है कि वे कारण हो सकते हैं।
इसे ट्रैक करने के लिए दृष्टिकोणों की तलाश में।
आपके पास सेटिंग्स.py DEBUG = गलत है, है ना? – monkut
हां, लेकिन अच्छा सवाल :) – fenn
मैं सोच रहा था कि क्या आप अंत में इस समस्या का सामना कर रहे हैं? हमें ऐसी ही समस्याएं आ रही हैं जो यूवीएसजीआई पर स्विच करने के बाद ही सामने आईं। – Geekfish