2008-10-10 11 views
38

क्या सिस्टम एक्सपी मेमोरी सीमा सेट करने का कोई तरीका है जो एक प्रक्रिया विंडोज एक्सपी में उपयोग कर सकती है? मेरे पास कुछ अस्थिर ऐप्स हैं जो अधिकांश समय के लिए ठीक काम करते हैं लेकिन एक बग हिट कर सकते हैं जिसके परिणामस्वरूप सेकंड के मामले में पूरी मेमोरी खाती है (या कम से कम मुझे लगता है कि यह है)। इसका परिणाम हार्ड रीसेट में होता है क्योंकि विंडोज पूरी तरह उत्तरदायी नहीं होता है और मैं अपना काम खो देता हूं।विंडोज़ प्रक्रिया (या उपयोगकर्ता) मेमोरी सीमा सेट करें

मैं लिनक्स पर/etc/सीमाओं की तरह कुछ करने में सक्षम होना चाहता हूं - उदाहरण के लिए एम 0 9 0 (एक उपयोगकर्ता को आवंटित करने के लिए 90% अधिकतम मेमोरी सेट करने के लिए)। तो प्रणाली शेष 10% चाहे कोई फर्क नहीं पड़ता।

+0

BartPE ऐसा कुछ करता है, इसलिए यह संभव होना चाहिए। हालांकि कोई विचार नहीं है। – OregonGhost

+2

@ माइकल मिनिकी, क्या आप विस्तारित जवाब दे सकते हैं कि चयनित उत्तर ने आपकी मदद कैसे की है? अफैक्ट, यह वर्णन करता है कि WINAPI का उपयोग करके समस्या को कैसे दूर किया जाए, लेकिन कोई ऐप प्रदान नहीं किया गया है जो सामान्य प्रक्रियाओं को 'CreateJobObject' में सामान्य रूप से निलंबित, हुक और लपेटता है। मैं क्या खो रहा हूँ? –

+0

@OregonGost, क्या आपके पास उस क्षमता पर अधिक जानकारी है? –

उत्तर

28

विंडोज Job Objects उपयोग के साथ प्रत्येक प्रक्रिया के लिए यह एक बार स्थापित करने के लिए संभव है। नौकरियां प्रक्रिया समूहों की तरह हैं और स्मृति उपयोग और प्रक्रिया प्राथमिकता को सीमित कर सकती हैं।

4

आपके अनुप्रयोगों के आधार पर, भाषा दुभाषिया उपयोग की स्मृति को सीमित करना आसान हो सकता है। उदाहरण के लिए जावा के साथ आप जेएम को आवंटित रैम की मात्रा निर्धारित कर सकते हैं।

अन्यथा यह खिड़कियों एपीआई

SetProcessWorkingSetSize Function

+8

यह वास्तव में स्मृति की मात्रा को सीमित नहीं करता है, एक प्रक्रिया किसी भी विशिष्ट समय पर केवल उस राशि को ही सीमित कर सकती है। यह मूल पोस्टर के लिए अधिकतर समय काम कर सकता है लेकिन कुल मेमोरी की मात्रा को सीमित करने का सही उत्तर एक प्रक्रिया का उपयोग कर सकता है जो नौकरी ऑब्जेक्ट का उपयोग करना है। –

3

ऐसा करने का कोई तरीका नहीं है जिसे मैं जानता हूं, हालांकि अगर किसी के पास कोई अच्छा जवाब है तो मैं पढ़ने के लिए उत्सुक हूं। मैं अपनी कंपनी द्वारा बनाई गई ऐप्स में से किसी एक को जोड़ने के बारे में सोच रहा हूं, लेकिन इसे करने का कोई अच्छा तरीका नहीं मिला है।

एक चीज जिसे मैं सोच सकता हूं (हालांकि सीधे बिंदु पर नहीं) यह है कि मुझे विश्वास है कि आप विंडोज़ में COM + अनुप्रयोग के लिए कुल मेमोरी उपयोग को सीमित कर सकते हैं। इसके लिए ऐप को COM + में चलाने के लिए लिखा जाना चाहिए, लेकिन यह मुझे सबसे नज़दीक तरीका है।

कामकाजी सेट सामान अच्छी है (जॉब ऑब्जेक्ट्स वर्किंग सेट को भी नियंत्रित करता है), लेकिन यह कुल मेमोरी उपयोग नहीं है, केवल वास्तविक स्मृति उपयोग (पेजेड इन) किसी भी समय। यह आपके इच्छित कार्यों के लिए काम कर सकता है, लेकिन afaik यह कुल आवंटित स्मृति को सीमित नहीं करता है।

+1

जॉब ऑब्जेक्ट्स वर्चुअल मेमोरी की अधिकतम मात्रा को भी नियंत्रित कर सकता है जो नौकरी या प्रक्रिया कर सकता है। SetInformationJobObject और JOBOBJECT_EXTENDED_LIMIT_INFORMATION संरचना देखें। –

19

माइक्रोसॉफ्ट से Application Verifier (AppVerifier) उपकरण का उपयोग करें।

  1. जोड़ा अपने आवेदन
  2. अनियंत्रित बेसिक
  3. चेक किए गए कम संसाधन सिमुलेशन
      :

      मेरे मामले में मैं अब स्मृति अनुकरण करने के लिए उपलब्ध कराया जा रहा तो मैं उपकरण में निम्नलिखित किया था की जरूरत है

    • बदल गया समय 120000 तक - मेरा आवेदन सामान्य रूप से कुछ भी प्रभावी होने से पहले 2 मिनट के लिए चलाएगा। ढेर आवंटन त्रुटि
    • सेट सच करने के लिए ढेर के 100% मौका - -
    • 100 में बदला गया HeapAlloc ढेर अन्य कोई बड़ी
  4. सहेजें
  5. विकसित करने के लिए अपने आवेदन शुरू नहीं कर सकेंगे

2 मिनट के बाद मेरा प्रोग्राम अब नई मेमोरी आवंटित नहीं कर सका और मैं यह देखने में सक्षम था कि सब कुछ कैसे संभाला गया था।

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