यह मूल रूप से एक लॉगिंग / काउंटिंग एप्लिकेशन है जो पैकेटों की संख्या की गिनती कर रहा है और एक p2p चैट नेटवर्क पर पैकेट आदि की गिनती कर रहा है। यह 5 मिनट की अवधि में लगभग 4-6 मिलियन पैकेट के बराबर है। और क्योंकि मैं केवल इस जानकारी का "स्नैपशॉट" लेता हूं, मैं केवल हर पांच मिनट में 5 मिनट से पुराने पैकेट निकाल रहा हूं। इसलिए इस संग्रह में आने वाली वस्तुओं की अधिकतम संख्या 10 से 12 मिलियन है।
क्योंकि मुझे अलग-अलग सुपरपेक्टरों के लिए 300 कनेक्शन बनाने की आवश्यकता है, यह संभावना है कि प्रत्येक पैकेट को कम से कम 300 बार डालने की कोशिश की जा रही है (जो शायद इस डेटा को स्मृति में रखना एकमात्र उचित विकल्प है)।
वर्तमान में, मैं इस जानकारी को संग्रहीत करने के लिए एक शब्दकोश का उपयोग कर रहा हूं। लेकिन बड़ी मात्रा में आइटम मैं स्टोर करने की कोशिश कर रहा हूं, इसलिए मैं बड़े ऑब्जेक्ट हीप के साथ मुद्दों में चलता हूं और मेमोरी उपयोग की मात्रा लगातार समय के साथ बढ़ती जाती है।
Dictionary<ulong, Packet>
public class Packet
{
public ushort RequesterPort;
public bool IsSearch;
public string SearchText;
public bool Flagged;
public byte PacketType;
public DateTime TimeStamp;
}
मैंने mysql का उपयोग करने की कोशिश की है, लेकिन यह उन डेटा की मात्रा के साथ रखने में सक्षम नहीं था, जिन्हें मुझे सम्मिलित करने की आवश्यकता है (यह सुनिश्चित करने के लिए कि यह एक डुप्लिकेट नहीं था, जबकि जाँच) और लेनदेन का उपयोग करते समय।
मैंने मोंगोडब की कोशिश की, लेकिन उस के लिए सीपीयू उपयोग पागल था और या तो नहीं रखा।
मेरा मुख्य मुद्दा हर 5 मिनट में उठता है, क्योंकि मैं सभी पैकेटों को हटाता हूं जो 5 मिनट से पुराने हैं, और इस डेटा का "स्नैपशॉट" लेते हैं। जैसा कि मैं एक निश्चित पैकेट प्रकार वाले पैकेट की संख्या की गणना करने के लिए LINQ प्रश्नों का उपयोग कर रहा हूं। मैं डेटा पर एक विशिष्ट () क्वेरी भी कह रहा हूं, जहां मैं keyvaluepair की कुंजी से 4 बाइट्स (आईपी पता) को हटाता हूं, और कुंजीवूपेयर के मूल्य में रिक्वेस्टिंगपोर्ट वैल्यू के साथ संयोजन करता हूं और एक अलग संख्या प्राप्त करने के लिए उपयोग करता हूं। सभी पैकेट से साथियों।
वर्तमान में यह एप्लिकेशन लगभग 1.1GB मेमोरी उपयोग के लिए उपलब्ध है, और जब स्नैपशॉट कहा जाता है तो यह उपयोग को दोगुना करने के लिए इतनी दूर जा सकता है।
अब यह एक मुद्दा नहीं होगा अगर मेरे पास राम की एक पागल राशि है, लेकिन मेरे पास जो vm चल रहा है वह इस समय 2GB RAM तक सीमित है।
क्या कोई आसान उपाय है?