मैं केवल आपात स्थितियों के लिए स्वैप स्थान का उपयोग कैसे करूं?


41

मेरे पास 8 जीबी रैम और 16 जीबी स्वैप के साथ एक डेबियन (बस्टर) लैपटॉप है । मैं बहुत लंबे समय तक चलने वाला कार्य कर रहा हूं। इसका मतलब यह है कि मेरा लैपटॉप पिछले छह दिनों के लिए छोड़ दिया गया है जबकि यह मंथन करता है।

ऐसा करते समय मुझे समय-समय पर लैपटॉप के रूप में अपने लैपटॉप का उपयोग करने की आवश्यकता होती है। यह एक समस्या नहीं होनी चाहिए; लंबे समय तक चलने वाला कार्य I / O बाध्य है, USB हार्ड डिस्क पर सामान के माध्यम से काम करता है और ज्यादा RAM (<200 MB) या CPU (<4%) नहीं लेता है।

समस्या यह है कि जब मैं कुछ घंटों के बाद अपने लैपटॉप पर वापस आता हूं, तो यह बहुत सुस्त हो जाएगा और वापस सामान्य होने में 30 मिनट लग सकते हैं। यह इतना बुरा है कि क्रैश-मॉनिटर अपने संबंधित अनुप्रयोगों को फ़्लेग करते हैं (विशेषकर ब्राउज़र विंडो) और चीजें गलत तरीके से दुर्घटनाग्रस्त होने लगती हैं।

सिस्टम मॉनिटर को देखते हुए, लगभग आधे में इस्तेमाल किए गए 2.5 जीबी को स्वैप में स्थानांतरित कर दिया जाता है। मैंने पुष्टि की है कि स्वैप स्थान ( swapoff /dev/sda8) को हटाकर यह समस्या है । अगर मैं इसे स्वैप स्पेस के बिना छोड़ दूं तो यह 24 घंटे के बाद भी लगभग तुरंत जीवन में वापस आ जाता है। स्वैप के साथ, यह व्यावहारिक रूप से पहले पांच मिनट के लिए एक ईंट है जो केवल छह घंटे के लिए छोड़ दिया गया है। मैंने पुष्टि की है कि दूर रहने के दौरान भी मेमोरी का उपयोग 3 जीबी से अधिक नहीं है।

मैं कम करने की कोशिश की है swappiness ( यह भी देखें: विकिपीडिया ) के मूल्यों को 10और 0है, लेकिन समस्या अभी भी बनी हुई है। ऐसा लगता है कि निष्क्रियता के एक दिन बाद कर्नेल का मानना ​​है कि पूरे जीयूआई की अब आवश्यकता नहीं है और इसे रैम से मिटा दिया जाता है (इसे डिस्क पर स्वैप करता है)। लंबे समय तक चलने वाला कार्य एक विशाल फ़ाइल ट्री के माध्यम से पढ़ना और हर फ़ाइल को पढ़ना है। तो यह कर्नेल यह सोचकर भ्रमित हो सकता है कि कैशिंग मदद करेगा। लेकिन ~ 1 बिलियन फ़ाइल नामों के साथ 2 टीबी यूएसबी एचडी के एक सिंगल स्वीप पर, एक अतिरिक्त जीबी रैम प्रदर्शन को अधिक मदद करने वाला नहीं है। यह एक सस्ता लैपटॉप है जिसमें सुस्त हार्ड ड्राइव है। यह बस डेटा को रैम में तेजी से वापस लोड नहीं कर सकता है।

मैं कैसे बता सकता हूँ कि लिनक्स केवल आपात स्थिति में स्वैप स्पेस का उपयोग करता है? मैं स्वैप के बिना नहीं चलना चाहता। अगर कुछ अनपेक्षित होता है, और ओएस को अचानक कुछ अतिरिक्त जीबी की आवश्यकता होती है, तो मैं नहीं चाहता कि कार्यों को मार दिया जाए और वे स्वैप का उपयोग करना पसंद करेंगे। लेकिन इस समय, यदि मैं स्वैप सक्षम छोड़ देता हूं, तो मेरे लैपटॉप का उपयोग तब नहीं किया जा सकता है जब मुझे इसकी आवश्यकता होती है।

"आपातकाल" की सटीक परिभाषा बहस का विषय हो सकती है। लेकिन स्पष्ट करने के लिए कि मेरा क्या मतलब है: एक आपातकालीन स्थिति होगी जहां सिस्टम को स्वैप या हत्या प्रक्रियाओं के अलावा किसी अन्य विकल्प के बिना छोड़ दिया जाता है।


आपातकाल क्या है? - क्या तुम सच में पूछना है? ... मुझे आशा है कि तुम अपने आप को एक जलती हुई इमारत में कभी नहीं पाओगे!

मेरे लिए यह संभव नहीं है कि मैं इस प्रश्न में सब कुछ परिभाषित कर सकूं। लेकिन उदाहरण के लिए, एक इमरजेंसी तब हो सकती है जब कर्नेल को मेमोरी के लिए धकेल दिया जाता है ताकि वह OOM किलर के साथ मारना शुरू कर दे । जब कर्नेल को लगता है कि यह स्वैप का उपयोग करके प्रदर्शन में सुधार कर सकता है, तो आपातकाल नहीं है।


फाइनल एडिट: मैंने एक जवाब स्वीकार किया है, जो ठीक उसी तरह से है जो मैंने ऑपरेटिंग सिस्टम के स्तर पर पूछा है। भविष्य के पाठकों को भी आवेदन स्तर के समाधान की पेशकश के जवाबों पर ध्यान देना चाहिए।


11
"आपातकाल" को परिभाषित करें और इस बारे में कुछ कहें कि यह किसी भी सामान्य स्थिति से अलग है जब स्वैप का उपयोग किया जाएगा।
Kusalananda

4
मैं जानना चाहता था कि क्या आप किसी विशेष प्रकार के आउट-ऑफ-बाउंड्स "आपातकालीन घटना" को परिभाषित करना चाहते हैं, जो कर्नेल को स्वैप का उपयोग करने की अनुमति देगा, लेकिन वह स्वैप अन्यथा उपयोग नहीं किया जाएगा। AFAIK मेमोरी को पृष्ठांकित करता है जो कुछ भी धीमा है और कभी भी "आपात स्थिति में" कभी भी किया जाता है, और "स्वप्नशीलता" चीज केवल एक चीज है जिसका उपयोग आप इस व्यवहार को समायोजित करने में सक्षम हैं (लेकिन मैं लिनक्स उपयोगकर्ता नहीं हूं)।
Kusalananda

2
नहीं, यह सही नहीं है। यह न केवल आपात स्थितियों में किया जाता है। बहुत कम से कम मुझे लगा कि मेरे सवाल ने यह स्पष्ट कर दिया है कि मैंने 8GB में से केवल 3GB का उपयोग किया है ... यह शायद ही एक आपात स्थिति है लेकिन कर्नेल वैसे भी स्वैप कर रहा है। मेरा सुझाव है कि आप स्वैग और आसपास के विषयों पर पढ़ें। स्वैपिंग के विभिन्न कारणों को लेकर काफी चर्चा है। यह प्रशंसनीय है मैं एक अवधारणा के लिए पूछ रहा हूं जो कर्नेल में मौजूद नहीं है, लेकिन इसके लिए पूछने के मेरे कारण यथोचित रूप से उचित हैं ..
फिलिप कौलिंग

4
मैं हमेशा "स्वैप के बिना कभी नहीं चला" सलाह को पहचानता हूं। लेकिन मेमोरी साइज ने हार्ड ड्राइव को बढ़ा दिया है (HDD नहीं SSD) पढ़ने / लिखने की गति का अर्थ है कि स्वैप तेजी से एक बुरा विचार है। ऐसा लगता है कि कुछ लोगों का मानना ​​है कि 8 जीबी रैम + 8 जीबी स्वैप 16 जीबी रैम + 0 स्वैप का प्रदर्शन करेगा। यदि यह वास्तव में करता है तो लिनक्स कर्नेल के साथ कुछ बहुत गलत है।
फिलिप कूपन

7
@Philip Couling: नहीं, बात यह है कि 16 जीबी रैम + 16 जीबी स्वैप से बेहतर प्रदर्शन करेगी 16 जीबी और 0 स्वैप - खासकर जब अपने कोड स्मृति के 17 जीबी :-) की जरूरत के लिए होता
jamesqf

जवाबों:


11

आजकल इतना बड़ा स्वैप होना अक्सर एक बुरा विचार है। जब तक ओएस ने स्वैप करने के लिए बस कुछ जीबी मेमोरी को स्वैप किया, तब तक आपका सिस्टम पहले से ही क्रॉल हो गया था (जैसे आपने देखा था)

एक छोटे से बैकअप स्वैप विभाजन के साथ उपयोग zramकरना बेहतर है । क्रोमओएस, एंड्रॉइड और विभिन्न लिनक्स डिस्ट्रोस जैसे कई ओएस ने साल के लिए डिफ़ॉल्ट रूप से ज़्राम को सक्षम किया है, खासकर कम रैम वाले सिस्टम के लिए। यह एचडीडी पर स्वैप की तुलना में बहुत तेज़ है और आप इस मामले में सिस्टम की जवाबदेही को स्पष्ट रूप से महसूस कर सकते हैं। एक एसएसडी पर कम, लेकिन यहां बेंचमार्क परिणामों के अनुसार यह अभी भी डिफ़ॉल्ट लोजो एल्गोरिथ्म के साथ तेजी से लगता है। आप थोड़े कम संपीड़न अनुपात के साथ बेहतर प्रदर्शन के लिए lz4 में बदल सकते हैं । यह आधिकारिक बेंचमार्क के आधार पर लेजो की तुलना में डिकोडिंग की गति लगभग 5 गुना तेज है

भी नहीं है zswap, हालांकि मैं इसका इस्तेमाल कभी नहीं किया है। शायद एक कोशिश के लायक है और तुलना करें कि कौन सा आपके usecases के लिए बेहतर है

उसके बाद एक अन्य सुझाव उन IO- बाध्य प्रक्रियाओं की प्राथमिकता को कम करना है और संभवत: उच्च प्राथमिकता पर चलने वाला एक टर्मिनल छोड़ना है ताकि आप इस पर कमांड चला सकें, भले ही सिस्टम उच्च भार पर हो

आगे की पढाई


बस इतना कि मैं समझता हूं, आप कह रहे हैं कि मैं एक zramब्लॉक डिवाइस बना सकता हूं , इसे स्वैप के रूप में उपयोग कर सकता हूं , एचडीडी विभाजन के रूप में कम प्राथमिकता वाले स्वैप के साथ?
फिलिप युग्म

@PhilipCouling अगर आप एचडीडी का उपयोग कर रहे हैं, तो हाँ, निश्चित रूप से आपको ज़्राम या इसी तरह के समाधान का उपयोग करना चाहिए। स्वैप की प्राथमिकता zram से कम होनी चाहिए, ताकि लिनक्स पहले zram का उपयोग करने की कोशिश करे, और फिर वह स्वैप पर विचार करेगा। यदि आप उबंटू का उपयोग करते हैं तो zram-config पैकेज पहले से ही आपके लिए प्राथमिकता सेटिंग्स का ध्यान रखता है
phuclv

3
मैं इस जवाब को स्वीकार कर रहा हूं क्योंकि यह वही है जो मैंने पूछा है। यदि मेरे पास अभी भी मेरी 16GB स्वैप कम प्राथमिकता पर सक्षम है, तो कर्नेल केवल इसका उपयोग करेगा जब zswap समाप्त हो गया है। IE: "एक आपात स्थिति में"। डेबियन-बस्टर पर ध्यान दें यह सेटअप करने के लिए बहुत आसान है, बस ज़्राम-टूल्स स्थापित करके।
फिलिप कपलिंग

25

एक तय यह है कि मेमोरी cgroup कंट्रोलर इनेबल हो जाए (मुझे लगता है कि यह डिफ़ॉल्ट रूप से आधे-हाल के कर्नेल में भी है, अन्यथा आपको cgroup_enable=memoryकर्नेल कमांड लाइन में जोड़ना होगा )। फिर आप अपने आई / ओ इंटेंसिव टास्क को एक cgroup में मेमोरी लिमिट के साथ चला सकते हैं, जो कैश की मात्रा को भी सीमित कर सकता है।

यदि आप सिस्टमड का उपयोग कर रहे हैं, तो आप यूनिट में या +MemoryAccounting=yesतो MemoryHigh/ MemoryMaxया MemoryLimit(यदि आप cgroup v1 या v2 का उपयोग कर रहे हैं) पर निर्भर हो सकते हैं, या इसमें एक स्लाइस हो सकता है। यदि इसका टुकड़ा है, तो आप systemd-runप्रोग्राम को स्लाइस में चलाने के लिए उपयोग कर सकते हैं ।

फ़ायरफ़ॉक्स को मेमोरी सीमा के साथ चलाने के लिए मेरे सिस्टम में से एक पूर्ण उदाहरण। ध्यान दें कि यह cgroups v2 का उपयोग करता है और मेरे उपयोगकर्ता के रूप में सेट किया गया है, न कि रूट (v1 पर v2 के फायदों में से एक यह है कि इसे गैर-रूट पर सौंपना सुरक्षित है, इसलिए सिस्टमड इसे करता है)।

$ systemctl --user cat mozilla.slice 
# /home/anthony/.config/systemd/user/mozilla.slice
[Unit]
Description=Slice for Mozilla apps
Before=slices.target

[Slice]
MemoryAccounting=yes
MemoryHigh=5G
MemoryMax=6G

$ systemd-run --user --slice mozilla.slice --scope -- /usr/bin/firefox &
$ systemd-run --user --slice mozilla.slice --scope -- /usr/bin/thunderbird &

मैंने पाया कि उपयोगकर्ता को काम करने के लिए मुझे एक स्लाइस का उपयोग करना था। सिस्टम एक बस सेवा फ़ाइल (या systemctl set-propertyसेवा पर उपयोग ) में विकल्प डालकर काम करता है ।

यहां एक उदाहरण सेवा है (cgroup v1 का उपयोग करके), अंतिम दो पंक्तियों पर ध्यान दें। यह सिस्टम का हिस्सा है (pid = 1) उदाहरण।

[Unit]
Description=mount S3QL filesystem
Requires=network-online.target
After=network-online.target

[Install]
WantedBy=multi-user.target

[Service]
Type=forking
User=s3ql-user
Group=s3ql-user
LimitNOFILE=20000
ExecStartPre=+/bin/sh -c 'printf "S3QL_CACHE_SIZE=%%i\n" $(stat -c "%%a*%%S*.90/1024" -f /srv/s3ql-cache/ | bc) > /run/local-s3ql-env'
ExecStartPre=/usr/bin/fsck.s3ql  --cachedir /srv/s3ql-cache/fs1 --authfile /etc/s3ql-authinfo  --log none «REDACTED»
EnvironmentFile=-/run/local-s3ql-env
ExecStart=/usr/bin/mount.s3ql --keep-cache --cachedir /srv/s3ql-cache/fs1 --authfile /etc/s3ql-authinfo --cachesize ${S3QL_CACHE_SIZE} --threads 4
ExecStop=/usr/bin/umount.s3ql /mnt/S3QL/
TimeoutStopSec=2m
MemoryAccounting=yes
MemoryLimit=1G

डॉक्यूमेंटेशन में है systemd.resource-control(5)


1
क्या आप केवल उपयोग करके कुछ तुलनीय और पोर्टेबल नहीं कर सकते हैं ulimit?
ओल्ड प्रो

1
@OldPro वास्तव में नहीं। सबसे पहले, पृष्ठ कैश सहित कुल मेमोरी उपयोग पर AFAIK का कोई अंतर नहीं है (जो कि उपयोग यहां अत्यधिक हो रहा है)। दूसरा, मेमोरी के लिए अलिमिट प्रति-प्रक्रिया है, लंबे समय से चलने वाले कार्य कांटे के लिए भी cgroups काम करते हैं।
derobert

मुझे लगा कि नए सिस्टम पर डिफ़ॉल्ट रूप से मेमोरी अकाउंटिंग सक्षम होने के कारण systemdसंस्करण २३ reason में बदलाव है ।
sourcejedi

1
@sourcejedi जो अपेक्षाकृत हाल ही में है। जब मेमोरी कंट्रोलर को पहली बार पेश किया गया था, तो बस उपलब्ध होने (उपयोग में भी नहीं) की एक बड़ी पर्याप्त प्रदर्शन लागत थी कि कुछ डिस्ट्रोफ कम से कम इसे डिफ़ॉल्ट रूप से अक्षम कर देते थे और आपको इसे सक्षम करने के लिए उस कर्नेल कमांड लाइन तर्क को पारित करना पड़ता था। प्रदर्शन समस्याओं को ठीक किया गया था, इसलिए यह बदल गया, और हाल ही में सिस्टमड इसे डिफ़ॉल्ट रूप से भी सक्रिय करता है।
derobert

14

ऐसा लगता है कि निष्क्रियता के एक दिन बाद कर्नेल का मानना ​​है कि पूरे जीयूआई की अब आवश्यकता नहीं है और इसे रैम से मिटा दिया जाता है (इसे डिस्क पर स्वैप करता है)।

कर्नेल द राइट थिंग ™ यह विश्वास करते हुए कर रहा है। यह रैम में अप्रयुक्त 1 मेमोरी को क्यों रखेगा और इसलिए अनिवार्य रूप से इसे कैश या कुछ और के रूप में उपयोग करने के बजाय बर्बाद कर देगा?

मुझे नहीं लगता कि लिनक्स कर्नेल पृष्ठ के रूप में गंभीर रूप से या अग्रिम स्वैपिंग कर रहा है, इसलिए यदि ऐसा होता है कि इसे रैम पर कुछ और स्टोर करना होगा, तो यह आपके लंबे समय तक चलने वाले कार्य के प्रदर्शन में सुधार करेगा, या कम से कम इस लक्ष्य के साथ।

यदि आप जानते हैं कि आपको पहले से अपने लैपटॉप का पुन: उपयोग करने की आवश्यकता कब होगी, तो आप स्वैप क्लीनअप ( ) को शेड्यूल करने के लिए atकमांड (या crontab) का उपयोग कर सकते हैं swapoff -a;swapon -a

जैसा कि स्वैप की सफाई ओवरकिल हो सकती है, और यहां तक ​​कि ओओएम किलर को ट्रिगर कर सकते हैं यदि किसी कारण से, रैम में सब कुछ फिट नहीं होता है, तो आप चल रहे एप्लिकेशनों से संबंधित केवल "अनवाप्स" 2 कर सकते हैं जिसे आप पुनर्जीवित करना चाहते हैं।

ऐसा करने का एक तरीका डिबगर gdbको प्रभावित प्रक्रियाओं में से प्रत्येक की तरह संलग्न करना और एक कोर डंप पीढ़ी को ट्रिगर करना होगा:

# gdb -p <pid>
...
generate-core-dump /dev/null
...
quit

जैसा कि आपने लिखा है, आपका लॉन्ग रनिंग एप्लिकेशन शुरुआती पास के बाद पढ़े जाने वाले डेटा का पुन: उपयोग नहीं कर रहा है, इसलिए आप एक विशिष्ट मामले में हैं जहाँ दीर्घकालिक कैशिंग उपयोगी नहीं है। फिर क्रॉलफोर्ड द्वारा सुझाए गए प्रत्यक्ष I / O का उपयोग करके कैश को दरकिनार करना एक अच्छा समाधान होना चाहिए।

वैकल्पिक रूप से, आप बस नियमित रूप से फ़ाइल कैश गूंज से फ्लश हो सकता है 1या 3करने के लिए /proc/sys/vm/drop_cachesछद्म फ़ाइल से पहले ओएस सोचता है कि यह एक अच्छा विचार अपने जीयूआई अनुप्रयोगों और पर्यावरण बाहर स्वैप करने के लिए है।

देखें कि आप लिनक्स सिस्टम पर बफ़र्स और कैश को कैसे खाली करते हैं? ब्योरा हेतु।

1 इस अर्थ में अप्रयुक्त: समय की महत्वपूर्ण अवधि के बाद से अधिक सक्रिय रूप से उपयोग नहीं किया जाता है, स्मृति अभी भी अपने मालिकों के लिए प्रासंगिक है।
2 स्वैप क्षेत्र में संग्रहीत RAM पृष्ठों में वापस रखें।


2
संभावित कारणों पर विचार के लिए धन्यवाद। मैंने सवाल को थोड़ा जोड़ा है क्योंकि यह प्रासंगिक हो सकता है। मुझे आश्चर्य है कि आवेदन की अपनी स्मृति के खिलाफ कैशिंग की प्राथमिकता को कम करने का एक तरीका है।
फिलिप युग्म

5
"मुझे नहीं लगता कि लिनक्स कर्नेल कृतज्ञतापूर्ण या अग्रिम रूप से पृष्ठों को स्वैप करना है, यदि ऐसा होता है, तो रैम पर कुछ और स्टोर करना होगा, इस प्रकार प्रदर्शन में सुधार होगा।" - मुझे लगता है कि यह शब्दांकन थोड़ा अस्पष्ट है। कर्नेल निश्चित रूप से स्वैप करने के लिए पेज लिखेगा, जब भी इसका मौका होगा (जैसे कि थोड़ा डिस्क I / O है)। हालांकि, यह उन्हें रैम से नहीं हटाएगा। इस तरह, आपके पास दोनों दुनिया के सर्वश्रेष्ठ हैं: यदि आपको जल्दी से उन पृष्ठों की फिर से आवश्यकता है, तो वे पहले से ही रैम में हैं, और कुछ भी नहीं करना है। यदि कोई आपातकालीन स्थिति (जैसा कि ओपी इसे डालती है) उत्पन्न होती है, तो आपको बस उन पृष्ठों को रैम में मुक्त करने की आवश्यकता होती है, क्योंकि
Jörg W Mittag

3
... वे पहले से ही स्वैप में हैं। और ठीक यही कारण है कि आप "केवल आपात स्थितियों में" स्वैप का उपयोग नहीं करना चाहते हैं, क्योंकि एक आपात स्थिति के दौरान, सिस्टम पहले से ही तनाव में है और आखिरी चीज जो आप चाहते हैं, उसमें बड़ी मात्रा में डिस्क I / O जोड़ सकते हैं।
जोर्ग डब्ल्यू मित्तग

2
बात यह है कि इसे बाहर स्वैप करने की संभावना लंबी चलने की प्रक्रिया है: यह डिस्क पर फ़ाइलों तक पहुंच है। मेमोरी में उन फ़ाइलों को GUI की मेमोरी की तुलना में हाल ही में उपयोग किया जाएगा।
jpmc26

3
@ JörgWMittag क्या आपके पास सबूत है कि लिनक्स कर्नेल है, जब I / O का उपयोग कम होता है, तो प्राथमिक रूप से स्वैप क्षेत्र "बस के मामले में", यानी RAM से मुक्त किए बिना पृष्ठ लिखना?
२१:०२ पर jlliagre

10

क्या प्रक्रिया आप अपने द्वारा बनाए गए कुछ को चला रहे हैं?

यदि हां, तो O_DIRECTध्वज का उपयोग करके फ़ाइलों को खोलने के लिए आपके कोड को ट्विक करने के लायक हो सकता है , जिसे मैनुअल पेज को उद्धृत करना है -

इस फ़ाइल से I / O के कैश प्रभाव को कम करने का प्रयास करें। सामान्य तौर पर यह प्रदर्शन को कम करेगा, लेकिन यह विशेष परिस्थितियों में उपयोगी होता है, जैसे कि जब अनुप्रयोग अपना कैशिंग करते हैं। फ़ाइल I / O उपयोगकर्ता-स्पेस बफ़र्स से सीधे / के लिए किया जाता है। O_DIRECT ध्वज अपने आप में डेटा को समकालिक रूप से स्थानांतरित करने का प्रयास करता है, लेकिन O_SYNC ध्वज की गारंटी नहीं देता है कि डेटा और आवश्यक मेटाडेटा स्थानांतरित किए जाते हैं। सिंक्रोनस I / O की गारंटी देने के लिए, O_DYECT के अलावा O_SYNC का उपयोग किया जाना चाहिए। आगे की चर्चा के लिए नीचे NOTES देखें।


1
एक अन्य समान (लेकिन शायद आसान है, जैसा कि मुझे पूरा यकीन है कि O_DIRECT में संरेखण प्रतिबंध हैं और आप प्रदर्शन को मार डालेंगे यदि आपकी रीड बड़ी नहीं हैं) कर्नेल को यह बताने के लिए फ़र्ज़ी है कि आपको उस डेटा को फिर से फ्लश करने की आवश्यकता नहीं होगी, इससे पेज कैश। (फोन पर या लिंक प्रदान होता है, खेद)
derobert

1
@derobert एक के लिए, nocacheकमांड ऐसा करने के लिए एक सुविधाजनक हैक है। (यह कुछ libc कॉल को हाईजैक करने के लिए LD_PRELOAD का उपयोग करता है)।
sourcejedi

6

यहाँ एक विचार है, जिसे मैंने खुद आज़माया नहीं है (और मुझे खेद है कि मेरे पास अभी इस पर प्रयोग करने का समय नहीं है)।

मान लीजिए कि आप अपनी पृष्ठभूमि प्रक्रिया के लिए केवल 512MB मेमोरी के साथ एक छोटा वीएम बनाते हैं, तो मुझे यकीन नहीं है कि यदि आप चाहते हैं कि यह आपके स्वैप, आपके कॉल और आपके मेजबान सिस्टम पर स्वैप बंद कर दे।


3

स्वैप को हटा दें या इसे कम कर दें 20% ( सिस्टम के साथ भिन्न हो सकते हैं ) जैसा कि हाल ही में ओएस अब स्वैप का उपयोग नहीं कर रहे हैं, जैसा कि उन्होंने कुछ साल पहले किया था। यह शायद आपके कुछ सवाल का जवाब देता है:

-> आधिकारिक redhat.com

नीचे कुछ Red Hat जानकारी,

अतीत में, कुछ एप्लिकेशन विक्रेताओं ने रैम के बराबर आकार की अदला-बदली की सिफारिश की, या यहां तक ​​कि दो बार रैम की। अब हम उपर्युक्त प्रणाली की कल्पना करते हैं जिसमें 2GB RAM और 2GB स्वैप है। सिस्टम पर एक डेटाबेस गलती से 5GB RAM वाले सिस्टम के लिए कॉन्फ़िगर किया गया था। एक बार भौतिक मेमोरी का उपयोग करने के बाद, स्वैप का उपयोग किया जाता है। चूंकि स्वैप डिस्क रैम की तुलना में बहुत धीमी है, इसलिए प्रदर्शन कम हो जाता है, और थ्रैशिंग होता है। इस बिंदु पर, सिस्टम में लॉगिन भी असंभव हो सकता है। जैसे-जैसे अधिक से अधिक मेमोरी लिखी जाती है, अंततः भौतिक और स्वैप दोनों मेमोरी पूरी तरह से समाप्त हो जाती हैं और OOM किलर एक या अधिक प्रक्रियाओं को मारता है। हमारे मामले में, बहुत अधिक स्वैप उपलब्ध है, इसलिए खराब प्रदर्शन का समय लंबा है।

तथा

https://wiki.debian.org/Swap

ऊपर डेबियन लिंक का हिस्सा,

उपयोग करने के लिए स्वैप की मात्रा से संबंधित जानकारी और विचार:

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

आप कोशिश कर सकते हैं:

"लिनक्स में स्वैप को निष्क्रिय करने का सबसे अच्छा तरीका"


व्यक्तिगत नोट:


चूंकि मैंने 6 जीबी रैम और अपने सभी हाल ही में लिनक्स ओएस में। मैंने कभी भी स्वैप के उपयोग का कोई संकेत नहीं देखा है। मैंने यह निर्धारित किया कि मुझे इसे या तो अंतरिक्ष के लिए बंद करना चाहिए (कुछ गीगाबाइट अधिक) और क्योंकि इसने कभी-कभी मेरे सिस्टम को धीमा कर दिया है।


1
अतीत में, कुछ एप्लिकेशन विक्रेताओं ने रैम के बराबर आकार की अदला-बदली की सिफारिश की, या यहां तक ​​कि दो बार रैम की। मुझे यह देखकर बहुत बड़ा लग रहा है, किसी भी तरह ... भले ही मेरे पास अभी भी ~ 528MB बैरियर में HDD में से एक है और एक 2.5GB भी है, किसी भी तरह वह बोली - वैसे यह बहुत पहले से कुछ है ... दिलचस्प उद्धरण हालांकि यह समझा सकता है कि मैंने कुछ साल पहले इसी तरह की समस्याएं क्यों देखीं। मेरा मानना ​​है कि मैंने इसे ठीक करने के लिए sysctl का उपयोग किया था, लेकिन मुझे याद नहीं है कि अगर यह पूर्व संध्या थी तो क्या सेटिंग थी।
प्रातः
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.