2013-10-31 6 views
7

लिनक्स में, मैं वीएम स्नैपशॉट्स के आकार को कम करने के लिए स्मृति पृष्ठों को कैसे मुक्त कर सकता हूं?वीएम स्नैपशॉट आकार को कम करने के लिए अप्रयुक्त स्मृति को शून्य कैसे करें

गैर-शून्य वाली स्मृति स्नैपशॉट में संग्रहीत की जाती है भले ही उस स्मृति को मुक्त कर दिया गया हो और अब इसका उपयोग नहीं किया गया है। उदाहरण के लिए, स्मृति पृष्ठों के साथ

sync && echo 3 > /proc/sys/vm/drop_caches 

बेकार में स्नैपशॉट में जमा हो जाती है, क्योंकि वे ध्यान केंद्रित किया नहीं किया गया है फाइल सिस्टम कैश से मुक्त कर दिया। जब तक OOM किलर में लात मारता है

अद्यतन वास्तव में एक भयानक समाधान काम करने के लिए प्रतीत होता है कि एक पाश में malloc + memset स्मृति है। यह एक वीएम स्नैपशॉट मैं 400MB के बारे में करने के लिए 800MB के बारे में से परीक्षण किया के आकार को कम कर देता। क्या कोई बेहतर समाधान है?

+0

(हटाए गए जवाब के बाद से संपादित करने के बाद, ऐसा लगता है मैं गलत समझा क्या तुम सच में चाहते थे) – Damon

+0

मुझे लगता है कि यह भी संभव नहीं है। लिनक्स में एक सिंगल गाय शून्य पृष्ठ है जो यह नए आवंटन पर लौटाता है, और यह पहली लेखन पहुंच पर प्रतिलिपि बनाता है (शून्य से भरा एक पृष्ठ बना रहा है, लेकिन यह तकनीकी रूप से शून्य पृष्ठ नहीं है)। इस प्रकार _could_ इस प्रकार सभी भौतिक स्मृति (सिद्धांत में) को स्मृति की एक बड़ी मात्रा आवंटित करके और प्रत्येक पृष्ठ की शुरुआत में '' 0 0' 'लिखकर शून्य करता है, लेकिन बाद में डेटा वाले डेटा होंगे (शून्य, जैसा होता है) शून्य पेज नहीं और यदि आप उन्हें फिर से मुक्त करते हैं, तो वे आपके द्वारा किए गए गैर-शून्य मुक्त पृष्ठों के समान होंगे - केवल वे शून्य होंगे। – Damon

+0

हालांकि आप ऐसा करने का प्रयास कर सकते हैं (बहुत सारी मेमोरी आवंटित कर सकते हैं, और इसे शारीरिक रूप से शून्य बना सकते हैं), और फिर पूरी तरह से 'MADV_MERGEABLE')। शायद कर्नेल समान पृष्ठ विलय करने से चाल चल जाएगी। ध्यान दें कि यह बिल्कुल एक नि: शुल्क ऑपरेशन (सीपीयू-वार) नहीं है। – Damon

उत्तर

1

एक आभासी मशीन के आकार को कम करने के लिए: आभासी मशीन में

  1. प्रवेश करें; एक टर्मिनल खोलने के लिए और टाइप

    cd /home/ 
    
    sudo dd if=/dev/zero of=foo bs=4096 
    
    sudo rm foo 
    
  2. आभासी मशीन को बंद करें, VMware/VmPlayer मेनू में प्रवेश करने के लिए और

    VMware जाना -> आभासी मशीन सेटिंग्स -> HD -> उपयोगिताओं -> कॉम्पैक्ट

    और कॉम्पैक्ट आभासी मशीन

आप आगे आकार को कम करना चाहते हैं, का उपयोग 7-ज़िप। उदाहरण के लिए, लिनक्स पर, आप टाइप कर सकते हैं:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z directory 
+1

यह वर्चुअल हार्ड डिस्क को वर्चुअल हार्ड डिस्क को प्रभावित करता है। सवाल स्नैपशॉट्स के बारे में है, जिसमें हार्ड डिस्क डेटा के साथ-साथ रैम डेटा भी शामिल है। – glglgl

3

कुछ इस तरह डिस्क कैश, तो & memset मुक्त स्मृति की मात्रा alloc (ऋण 32MB, स्वैप से टकराने से बचने के लिए headroom के रूप में) का उपयोग कर dd रिक्त हो जाएगा। उदाहरण के लिए केएसएम के मामले में अस्थायी रूप से वीएम अन-कोव मेमोरी बनायेगा, लेकिन ज़ीरो से भरे मेमोरी ब्लॉक को छोड़ देगा (जिसे आवंटित किया जाएगा), जिसे बाद में अन्य वीएम (केएसएम के साथ) के साथ साझा/घटाया जा सकता है या आसानी से संपीड़ित किया जा सकता है।

#!/bin/bash 

echo 3 > /proc/sys/vm/drop_caches 
memfree=$(free -m | awk '/^Mem/ {print $4-32}') 
if [ $memfree -gt 0 ]; then 
     dd if=/dev/zero of=/dev/null bs=${memfree}M count=1 
fi 
संबंधित मुद्दे