मैं लिनक्स टैग का जवाब दे रहा हूं । मेरा जवाब केवल लिनक्स के लिए विशिष्ट है ।
हां, विशाल पृष्ठ विखंडन से अधिक प्रभावित होते हैं। स्मृति के दो दृश्य हैं, एक आपकी प्रक्रिया (आभासी) और एक कर्नेल का प्रबंधन (वास्तविक) करता है। कोई भी पृष्ठ जितना बड़ा होगा, उतना ही मुश्किल यह होगा कि वह अपने पड़ोसियों के समूह में (और इसे साथ रखें), खासकर जब आपकी सेवा एक ऐसी प्रणाली पर चल रही हो जिसमें दूसरों को भी समर्थन देना होता है जो डिफ़ॉल्ट रूप से आवंटित करते हैं और उनकी तुलना में अधिक मेमोरी लिखने के लिए करते हैं वास्तव में उपयोग समाप्त।
(वास्तविक) दिए गए पते की कर्नेल मैपिंग निजी है। एक बहुत अच्छा कारण है कि उपयोगकर्तास्पेस उन्हें देखता है क्योंकि कर्नेल उन्हें प्रस्तुत करता है, क्योंकि कर्नेल को उपयोगकर्ताओं को भ्रमित किए बिना ओवरक्लिट करने में सक्षम होना चाहिए। आपकी प्रक्रिया को एक अच्छा, सन्निहित "डिज़नीफ़ाइड" पता स्थान मिलता है जिसमें काम करने के लिए, इस बात से बेखबर कि कर्नेल वास्तव में पर्दे के पीछे की स्मृति के साथ क्या कर रहा है ।
लंबे समय तक चलने वाले सर्वरों पर आपके द्वारा अस्वीकृत प्रदर्शन को देखने का कारण सबसे अधिक संभावना है क्योंकि आवंटित ब्लॉक जिन्हें स्पष्ट रूप से लॉक नहीं किया गया है (उदाहरण के लिए mlock()
/ mlockall()
या posix_madvise()
) और थोड़ी देर में संशोधित नहीं किया गया है , जिसका अर्थ है कि आपकी सेवा स्किड्स डिस्क पर है जब इसे पढ़ना होगा उन्हें। इस व्यवहार को संशोधित करने से आपकी प्रक्रिया खराब हो जाती है , यही वजह है कि बहुत से लोग अपने RDBMS को वेब / php / python / ruby / जो भी हो की तुलना में पूरी तरह से अलग सर्वर पर डालते हैं। इसे ठीक करने का एकमात्र तरीका, पवित्र रूप से, सन्निहित ब्लॉकों के लिए प्रतिस्पर्धा को कम करना है।
जब पृष्ठ A स्मृति में है और पृष्ठ B स्वैप करने के लिए स्थानांतरित हो गया है, तो विखंडन वास्तव में केवल ध्यान देने योग्य है (ज्यादातर मामलों में)। स्वाभाविक रूप से, आपकी सेवा को फिर से शुरू करने से यह 'ठीक' हो जाएगा, लेकिन केवल इसलिए कि कर्नेल को अभी तक इस प्रक्रिया को पृष्ठांकित करने का अवसर नहीं मिला है (अब) नए आवंटित किए गए ब्लॉकों को इसके ओवरकम के अनुपात के दायरे में रखा गया है।
वास्तव में, एक उच्च भार के तहत फिर से शुरू (कहने देता है) 'अपाचे' डिस्क को सीधे अन्य सेवाओं के स्वामित्व वाले ब्लॉक भेजने की संभावना है। तो, हाँ, 'अपाचे' थोड़े समय के लिए सुधर जाएगा, लेकिन 'mysql' पीड़ित हो सकता है .. कम से कम तब तक जब तक कर्नेल उन्हें समान रूप से पीड़ित नहीं करता है जब बस पर्याप्त भौतिक स्मृति की कमी होती है।
अधिक मेमोरी जोड़ें, या malloc()
उपभोक्ताओं की मांग को विभाजित करें :) यह न केवल विखंडन है जिसे आपको देखने की आवश्यकता है।
vmstat
वास्तव में जहाँ संग्रहीत किया जा रहा है उसका अवलोकन प्राप्त करने का प्रयास करें ।