2012-09-30 11 views
5

मैं रेल के साथ मेमोरी लीक समस्या को हल करने का प्रयास कर रहा हूं। मैं न्यू रिलीलिक के माध्यम से देख सकता हूं कि स्मृति का उपयोग कभी भी कम होने के बिना बढ़ रहा है।रेल में मेमोरी लीक के लिए प्रमुख कारक

यह एक बड़े धागे (Memory constantly increasing in Rails app) से एक स्पिनऑफ प्रश्न है जहां मुझे समस्या को शूटिंग में परेशानी है। मुझे अब क्या पता होना चाहिए:

रेल में मेमोरी लीक की बात आने पर प्रमुख कारण/कारक क्या हैं?

जहां तक ​​मैं समझता हूँ: (जैसे @@ चर के रूप में)

  • वैश्विक चर - मैं इन

  • प्रतीकों में से कोई भी (मैं किसी भी विशेष रूप से नहीं बनाया है)

  • सत्र - यहां से क्या बचना चाहिए? आइए मान लें कि मेरे पास साइट पर टेक्स्ट-सर्च करने के लिए उपयोग किए जाने वाले एक विशेष उपयोगकर्ता की आखिरी क्वेरी का ट्रैक रखने का सत्र है। मुझे इसे कैसे मारना चाहिए?

  • "संदर्भ छोड़ना" - इसका वास्तव में क्या अर्थ है? क्या आप एक उदाहरण दे सकते हैं?

  • कोई अन्य खराब कोडिंग उदाहरण जो आप दे सकते हैं वह आम तौर पर मेमोरी लीक बना देगा?

मैं इस जानकारी का उपयोग अपने कोड को देखने के लिए करना चाहता हूं ताकि कृपया उदाहरण प्रदान करें!

आखिरकार, क्या यह "मेमोरी लीकिंग कोड" होगा?

ProductController 
... 
@last_products << Product.order("ASC").limit(5) 
end 

क्या @last_products bloat बना देगा?

उत्तर

5

निम्नलिखित अनुप्रयोगों को नष्ट कर देगा।

Foo.each do |bar| 
    #Whatever 
end 

यदि आपके पास बहुत सारे फ़ूज़ हैं जो उन्हें सभी को स्मृति में खींचेंगे। मैंने ऐप को उड़ा दिया है क्योंकि उनके पास "फूओस" का गुच्छा है और उनके पास एक रेक काम है जो सभी फूज़ के माध्यम से चलता है, और यह रेक कार्य हमेशा के लिए लेता है, वाई सेकंड कहता है, लेकिन हर एक्स चलाता है सेकेंड, जहां एक्स < वाई। तो क्या होता है कि अब वे स्मृति में सभी फूज़ हैं, एक से अधिक बार क्योंकि वे सामान को फिर से याद करते हैं, बार-बार।

हालांकि यह बिल्कुल सामने वाले वेब ऐप के अंदर नहीं हो सकता है, वैसे ही यह बिल्कुल कुशल या इच्छित नहीं है।

ऊपर के बजाय

निम्नलिखित

Foo.find_each do |bar| 
    #Whatever 
end 

कौन सा बातें और बैचों प्राप्त करता है और अपनी स्मृति में एक बार में सभी सामान की एक पूरी गुच्छा डाल नहीं करता है।

और जैसे ही मैंने इसे टाइप करना समाप्त किया, मुझे एहसास हुआ कि इस सवाल को पिछले साल सितंबर में पूछा गया था ... ओह लड़का ...

संबंधित मुद्दे