पर प्रक्रिया का आकार Solaris, HP-UX
और AIX
पर प्रक्रिया आकार प्राप्त करने का सही तरीका क्या है? क्या हमें top
या ps -o vsz
या कुछ और उपयोग करना चाहिए?यूनिक्स
यूनिक्स
उत्तर
की सटीक परिभाषा के vsize
, rss
, rprvt
, rshrd
, और अन्य अस्पष्ट दिखने संक्षिप्त रूपों ओएस से ओएस के लिए बदलती हैं। top
और ps
आदेशों के लिए मैन्युअल पृष्ठ कुछ प्रकार के विवरण होंगे, लेकिन ऐसे सभी विवरणों को सरल बनाया गया है (या लंबे समय तक विलुप्त कर्नेल कार्यान्वयन पर आधारित हैं)।
एक अवधारणा के रूप में "प्रक्रिया आकार" सामान्य मामले में पिन करना बेहद मुश्किल है। विशिष्ट उदाहरणों में उत्तर ओएस में वास्तविक स्मृति प्रबंधन कार्यान्वयन पर भारी निर्भर करता है, और शायद ही कभी "उपयोगकर्ताओं के आकार (" अधिकांश डेवलपर्स) के दिमाग में मौजूद "प्रक्रिया आकार" अवधारणा के रूप में संतुष्ट होता है।
उदाहरण के लिए, उन संख्याओं में से कोई भी नहीं (न ही, संभवतः, उनमें से कोई भी संयोजन) आपको यह बताने के लिए उपयोग किया जा सकता है कि कितनी ऐसी प्रक्रियाएं एक ही समय में मुफ्त मेमोरी में चल सकती हैं। लेकिन वास्तव में, आपकी सबसे अच्छी शर्त उस अंत में आना है: आप यह संख्या क्यों चाहते हैं, और आप इसके लिए क्या उपयोग करेंगे? उस जानकारी को देखते हुए, मुझे लगता है कि आपको अधिक उपयोगी उत्तर मिलेंगे।
हां, आप वीएसजेड पर लॉक करने का अधिकार हैं।
ps u
आपको वीएसजेड और आरएसएस देगा, जो वर्चुअल मेमोरी आकार और निवासी सेट आकार हैं। आरएसएस यह है कि प्रक्रिया में कितनी भौतिक स्मृति आवंटित की गई है, और वीएसजेड प्रक्रिया का आभासी स्मृति आकार है। यदि आपके पास प्रोग्राम चलाने की कई प्रतियां हैं, तो वीएसजेड में बहुत सी मेमोरी उन प्रक्रियाओं के बीच साझा की जाएगी।
सोलार्स पर, आप pmap
कमांड के साथ प्रक्रिया के मेमोरी उपयोग पर विस्तृत जानकारी प्राप्त कर सकते हैं। विशेष रूप से, pmap -x <pid>
आपको दिखाता है कि प्रक्रिया की स्मृति कितनी साझा की जाती है और उस प्रक्रिया द्वारा विशेष रूप से कितनी उपयोग की जाती है। यह प्रक्रिया के "सीमांत" स्मृति उपयोग को काम करने के लिए उपयोगी है - इस तकनीक के साथ आप साझा पुस्तकालयों को डबल-गिनती से बच सकते हैं।
मैं इस तरह सभी प्रक्रियाओं (रूट के रूप में) के लिए निवासी समूह का आकार और माथुर:
ps ax -o rss | awk '{rss += $1;} END { print rss}'
VSZ संख्या बेकार है अगर तुम क्या में रुचि रखते हैं स्मृति की खपत है। वीएसजेड मापता है कि प्रक्रिया की * वर्चुअल * मेमोरी स्पेस को प्रक्रिया द्वारा कितनी मेमोरी के रूप में चिह्नित किया गया है, अगर ऑपरेटिंग सिस्टम द्वारा मैप किया जाना चाहिए यदि प्रक्रिया इसे छूने के लिए होती है। लेकिन इसका कोई लेना-देना नहीं है कि क्या उस स्मृति को वास्तव में छुआ और इस्तेमाल किया गया है। वीएसजेड एक आंतरिक विवरण है कि एक प्रक्रिया मेमोरी आवंटन कैसे करती है - अप्रयुक्त स्मृति का एक हिस्सा कितना बड़ा होता है। आरएसएस को मेमोरी पेजों की गिनती के लिए देखें, जिसने वास्तव में इसका उपयोग करना शुरू कर दिया है। –