2009-03-07 7 views
8

मैं अपने उबंटू 8.10 बॉक्स पर केवल [email protected] क्लाइंट को चलाने के लिए चाहता हूं, जब यह प्रोग्राम की भारी रैम खपत के कारण निष्क्रिय हो।लिनक्स में शेड्यूलिंग: कंप्यूटर निष्क्रिय होने पर एक कार्य चलाएं (= कोई उपयोगकर्ता इनपुट नहीं)

"निष्क्रिय" द्वारा मेरा मतलब है जब कोई उपयोगकर्ता गतिविधि नहीं है (कीबोर्ड, माउस या कोई अन्य)। एफ (एच में सबसे कम CPU प्राथमिकता है क्योंकि उस समय अन्य (शायद भारी) प्रक्रियाओं को चलाने के लिए यह ठीक है। बिंदु सिर्फ उपयोगकर्ता अनुभव को बेहतर बनाने और वह दूर होने पर भारी काम करने के लिए है।

इसे कैसे पूरा करें?

उत्तर

12

जब प्रश्न में मशीन डेस्कटॉप है, तो आप स्क्रीनसेवर में स्टार्ट/स्टॉप स्क्रिप्ट को हुक कर सकते हैं ताकि स्क्रीनसेवर निष्क्रिय हो और इसके विपरीत प्रक्रिया बंद हो।

+1

xscreensaver इसे xscreensaver-command -watch के माध्यम से बनाने की अनुमति देता है (देखें http://www.jwz.org/xscreensaver/faq।एचटीएमएल # घड़ी) – wheleph

+0

उस पर आलेख: http://wheleph.github.io/2009/12/20/fah-xsreensaver/ – wheleph

+0

प्रत्येक उत्तर क्यों मानता है कि एक स्क्रीनसेवर स्थापित है? – Bulletmagnet

1

फ़ाइल /proc/loadavg में सिस्टम वर्तमान लोड है। आप इसे जांचने के लिए बस एक बैश स्क्रिप्ट लिख सकते हैं, और यदि इसके बाद कमांड चलाएं। फिर आप इसे समय-समय पर चलाने के लिए /etc/cron.d में जोड़ सकते हैं।

इस फ़ाइल में सिस्टम लोड के बारे में जानकारी शामिल है। पहले तीन संख्याएं सिस्टम पर सक्रिय कार्यों की संख्या का प्रतिनिधित्व करती हैं - प्रक्रियाएं वास्तव में चल रही हैं - से अधिक औसत 1, 5, और 15 मिनट औसत। प्रक्रियाओं है कि वर्तमान में एक सिस्टम कॉल में अवरुद्ध किया जा रहा बजाय चलाने के लिए निर्धारित हैं - - और सिस्टम पर प्रक्रियाओं की कुल संख्या अगली प्रविष्टि runnable कार्यों की तात्कालिक वर्तमान संख्या को दर्शाता है। अंतिम प्रविष्टि प्रक्रिया की प्रक्रिया आईडी है जो हाल ही में चल रही है।

उदाहरण आउटपुट:

0.55 0.47 0.43 1/210 12437 
+0

भार भारी overcommitment, स्वैप उपयोग, आदि नहीं दिखा वे इस के लिए एक चांदी की गोली नहीं हैं एक कार्यक्रम में निर्णय का प्रकार। –

4

यह प्रक्रिया केवल वर्तमान होने के लिए जब सिस्टम अन्यथा निष्क्रिय होने की व्यवस्था करने की बारीकियों है।

असल में उन परिस्थितियों में प्रोग्राम शुरू करना कठिन नहीं है। आपको प्रोग्राम को साफ़ रूप से बंद करने की व्यवस्था करनी है, और यह पता लगाना है कि यह कैसे और कब करना है।

आपको उस प्रक्रिया के अपने CPU उपयोग, और अन्य प्रोग्रामों के बीच अंतर करने में सक्षम होना चाहिए, ताकि आप यह बता सकें कि सिस्टम ठीक से "निष्क्रिय" है या नहीं।

यह केवल निर्धारित किया जा जब सिस्टम अन्यथा निष्क्रिय होने के लिए एक बहुत प्रक्रिया के लिए आसान है। Folding @ होम क्लाइंट लॉन्च करने के लिए बस 'अच्छा' कमांड का उपयोग करें।

हालांकि यह अपर्याप्त रैम की समस्या का समाधान नहीं करेगा। यदि आपके पास स्वैप स्पेस सक्षम है, तो सिस्टम किसी भी कम प्राथमिकता प्रक्रियाओं को स्वैप करने में सक्षम होना चाहिए, जैसे कि वे उपभोग नहीं कर रहे हैं और वास्तविक संसाधन हैं, लेकिन प्रत्येक बार जब आपका फोल्डिंग @ होम क्लाइंट डिस्क I/O पर एक बड़ी हिट से सावधान रहें राम के अंदर और बाहर स्वैप।

पेज। इस समय रैम बहुत सस्ता है ...

पीपी.एस. यह article

+0

यदि BOINC की तरह कुछ लिखना है तो यह 'मूर्खतापूर्ण' कैसे है? :) –

+0

एक बार पूरा होने के बाद सिस्टम की स्थिति की अपेक्षा नहीं कर रहा है, जिसे मैंने जवाब देने का प्रयास किया था। –

+0

आपके उत्तर के लिए धन्यवाद, Alnitak। मैंने प्रश्न में "निष्क्रिय" के अर्थ को स्पष्ट किया है। – wheleph

2

आप 'निष्क्रिय' निर्धारित करने के लिए कुछ चीजों को देखना चाहते हैं और sysinfo() कॉल का पता लगाने के लिए भी जाना चाहते हैं (लिंक संरचना में अंतर को इंगित करता है जो यह विभिन्न कर्नेल संस्करणों के बीच पॉप्युलेट करता है)।

लिनक्स एक सामान्य तरीके से स्मृति का प्रबंधन नहीं करता है। लोड को न देखें, स्मृति को देखें। विशेष रूप से,/proc/meminfo में Committed_AS के साथ एक अद्भुत रेखा शुरू हुई है, जो आपको दिखाती है कि कर्नेल ने वास्तव में अन्य प्रक्रियाओं के लिए कितनी मेमोरी का वादा किया है। सिसिन्फो से जो आपने सीखा है उसके साथ तुलना करें और आपको पता चलेगा कि 0.00 के एक मिनट के लोड औसत का मतलब यह नहीं है कि 256 एमबी मेमोरी आवंटित करना चाहते हैं, क्योंकि कर्नेल वास्तव में अधिक बिकने वाला हो सकता है। नोट, sysinfo() द्वारा भरे गए सभी मान/proc के माध्यम से उपलब्ध हैं, sysinfo() उन्हें प्राप्त करने का एक आसान तरीका है।

आप यह भी देखना चाहते हैं कि प्रत्येक कोर ने बूट के बाद IOWAIT में कितना समय व्यतीत किया है, जो कि यदि आप I/O संसाधन होग चलाते हैं तो यह भी एक मजबूत संकेतक है। उस जानकारी को/proc/stat में प्राप्त करें, पहली पंक्ति में सभी CPU की कुल गणना होती है। IOWAIT 6 वें क्षेत्र में है। बेशक यदि आप एक सीपीयू के साथ संबंध स्थापित करना चाहते हैं, तो केवल वह सीपीयू ब्याज का होगा (यह अभी भी छठा क्षेत्र है, यूएसER_एचजेड की इकाइयों में या आमतौर पर एक सेकंड के 100 वें में)। बीटाइम के खिलाफ औसत,/proc/stat में भी पाया जाता है।

संक्षेप में, लोड औसत को न देखें।

संपादित

आप उपयोगकर्ता इनपुट की कमी नहीं मानना ​​चाहिए कि बेकार .. क्रॉन नौकरियों को चलाने के लिए करते हैं .. सार्वजनिक सेवाओं समय-समय पर कर लगाया जाता हो, आदि निष्क्रिय अपने सर्वोत्तम अनुमान को पढ़ने के आधार पर बनी हुई है इसका मतलब है मैंने ऊपर सूचीबद्ध मूल्य (या शायद अधिक)।

संपादित 2

/proc/sys में घुंडी मूल्यों को देखते हुए/VM भी आप विशेष swappiness में क्या उपयोगकर्ता सोचता है कि निष्क्रिय होने का एक अच्छा संकेत देता है। मुझे एहसास है कि यह केवल अपने स्वयं के बॉक्स पर कर रहा है लेकिन यह एक आधिकारिक विकी है और प्रश्न शीर्षक सामान्य है :)

+0

दिलचस्प विचारों के लिए धन्यवाद, tinkertim। मैंने दूसरे शब्द में "निष्क्रिय" शब्द का उपयोग किया है जिसे मैंने प्रश्न में स्पष्ट किया है। – wheleph

+0

क्रॉन और अन्य चीजों को देखते हुए, आप इस तरह निष्क्रिय नहीं हो सकते हैं। उपयोगकर्ता इनपुट की कमी का मतलब निष्क्रिय नहीं है, खासकर जब 'अपडेटेड' रात के मध्य में चलता है। –

+1

आप ध्यान देंगे कि आपके द्वारा संपादित किए जाने से पहले उन्होंने स्पष्ट किया कि उन्हें अन्य 'पृष्ठभूमि' कार्यों, केवल इंटरैक्टिव प्रतिक्रिया के बारे में परेशान नहीं है। – Alnitak

4

आपको निष्क्रिय कार्य को कम से कम प्राथमिकता पर सेट करने की आवश्यकता हो सकती है।

+0

यह वास्तव में आपको लिनक्स पर ऐसा करना चाहिए। – Arafangion

+0

प्रक्रिया प्राथमिकता के साथ समस्या यह है कि यह केवल सीपीयू है और इन दिनों डिस्क अक्सर मुख्य समस्या –

+0

हेड रैम उपयोग के बारे में विषय-वस्तु की बात है लेकिन डिस्क उपयोग –

0

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

perl script on ubuntu forums

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