2012-12-06 5 views
5

मुझे प्रक्रिया का ढेर आकार कैसे मिल सकता है? /proc/5848/स्थिति मुझे VmStk देता है लेकिन यहकिसी प्रक्रिया के ढेर आकार को मापने के लिए कैसे करें?

कोई फर्क नहीं पड़ता कि मेरे परीक्षण कार्यक्रम में मैं कितना लूप और रिकर्सन करता हूं, यह मान शायद ही कभी बदलता है।

जब मैंने देखा/proc/pid/स्थिति की सभी प्रक्रियाओं में 136k है और यह नहीं पता कि वह मान कहां से आता है।

धन्यवाद,

+1

क्या आप बहु-थ्रेडेड प्रक्रिया के अलग-अलग धागे के ढेर आकार प्राप्त करने की कोशिश कर रहे हैं? –

उत्तर

3

वास्तव में लिनक्स पर "एक प्रक्रिया के ढेर आकार" जैसी कोई चीज नहीं है। प्रक्रियाओं में एक प्रारंभिक ढेर होता है, लेकिन जैसा कि आप देखते हैं, वे शायद ही कभी मानक स्टैक से बहुत अधिक आवंटित करते हैं। इसके बजाए, प्रक्रियाएं ऑपरेटिंग सिस्टम से जेनेरिक मेमोरी आवंटित करती हैं और इसे स्टैक के रूप में उपयोग करती हैं। तो ओएस के बारे में जानने का कोई तरीका नहीं है - वह विवरण केवल प्रक्रिया के अंदर से दिखाई देता है।

एक सामान्य, आधुनिक ओएस में ऑपरेटिंग सिस्टम द्वारा लगाए गए 8 एमबी की स्टैक आकार सीमा हो सकती है। फिर भी प्रक्रिया नियमित रूप से अपने ढेर पर बहुत बड़ी वस्तुओं को आवंटित करती है। ऐसा इसलिए है क्योंकि एप्लिकेशन एक स्टैक का उपयोग कर रहा है जो पूरी तरह से एप्लिकेशन-प्रबंधित है और ओएस के संबंध में एक स्टैक नहीं है।

यह बहु-थ्रेडेड प्रक्रियाओं के लिए हमेशा सत्य है। एकल-थ्रेडेड प्रक्रियाओं के लिए, यह संभव है कि वे वास्तव में बहुत ही बहुत कम ढेर का उपयोग कर रहे हों।

1

शायद आप कुछ प्रक्रिया का पता मानचित्र प्राप्त करना चाहते हैं। प्रक्रिया 1234 के लिए, अनुक्रमिक रूप से /proc/1234/maps छद्म फ़ाइल पढ़ें। अपनी खुद की प्रक्रिया के लिए, पढ़ने के /proc/self/maps

cat /proc/self/maps 

प्रयास करें यह की भावना (उपरोक्त आदेश प्रदर्शित करता है cat प्रक्रिया यह क्रियान्वित करने के पते नक्शा) मिलता है।

विवरण के लिए proc(5) मैन पेज पढ़ें।

आपको प्रक्रिया सीमाओं से भी रुचि हो सकती है, उदा। getrlimit(2) और संबंधित syscalls।

मुझे यकीन नहीं है कि स्टैक आकार में कुछ सटीक अर्थ हैं, विशेष रूप से बहु-थ्रेडेड प्रक्रियाओं के लिए।

शायद आप mmap(2) में MAP_GROWSDOWN के साथ-साथ सेगमेंट में रूचि रखते हैं।

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