क्या `मेक-जे` (बिना किसी तर्क के) खतरनाक है? [बन्द है]


13

इससे पहले कि आज कुछ का निर्माण करते समय, मैंने इसे चलाने का फैसला makeकिया

$ make -j

शायद अन्य कार्यक्रमों जैसे आदत से बाहर cabalजहां -jएक उचित सीमा तक चूक।

लगभग 20 सेकंड बाद, मेरा पूरा डेस्कटॉप रुक गया । मैं गतिविधि के विभिन्न संकेतों की तलाश करता हूं। कोई प्रशंसक नहीं घूमता। एचडीडी प्रकाश एक ठोस हरा है, लेकिन मुझे कोई डिस्क गतिविधि नहीं सुनाई देती है। Hmmmmm। 10 मिनट की चुप्पी के बाद, मुझे आखिरकार मैंने पहले युगों में बनाए गए पहले कीपर की प्रतिक्रिया दिखाई, और मुझे डिस्क थ्रैशिंग की सभी परिचित आवाज भी सुनाई देने लगी। 20 मिनट बाद धीरे-धीरे इस अनुत्तरदायी मशीन पर एक टर्मिनल में अपना रास्ता भटकाने की कोशिश की, मैंने REISUB का इस्तेमाल किया।


सबसे पहले, मुझे लगा कि एक असंबंधित डेस्कटॉप एप्लिकेशन अपराधी होना चाहिए, क्योंकि मेरे पास लंबे समय से इंटरएक्टिव बैश सत्रों में स्मृति सीमाएं थीं जो मुझे खुद को इस तरह की स्थिति में डालने से रोकने के लिए थीं ! लेकिन /var/log/syslogएक अलग कहानी कहता है; OOM किलर कुछ psडंपों को पीछे छोड़ देता है जो संदिग्ध रूप से और प्रक्रियाओं से भरे होते हैं!c++cc1plus

यहाँ उन डंपों में से एक की आवृत्ति विश्लेषण है:

Command          Number of appearances
'sh'                    322
'c++'                   321
'cc1plus'               321
'chrome'                 27
'make'                   27
'bash'                    3
all else combined       120

इसलिए मैं GNU मेक के लिए मैन पेज की जाँच करता हूँ: (जोर दिया)

-j [नौकरियों], - मुखमैथुन [= नौकरियों] नौकरियों (कमांड) की संख्या को एक साथ चलाने के लिए निर्दिष्ट करता है। यदि एक -j विकल्प से अधिक है, तो अंतिम एक प्रभावी है। -J विकल्प के बिना तर्क दिए जाने पर, उन नौकरियों की संख्या को सीमित नहीं किया जाएगा जो एक साथ चल सकती हैं।


मैं अगर मैं इस मुद्दे को दोबारा कर सकते हैं देखने के लिए अनिच्छुक हूँ (डॉक्टर, यह दर्द होता है जब मैं क्या यह ...) , लेकिन जांच के परिणाम अब तक होम रन होने लगते हैं: जाहिर है, make -jऔर जिसके परिणामस्वरूप प्रक्रियाओं के सैकड़ों होना आवश्यक है गया लटका और डिस्क ताड़ना के कारण। उस ने कहा, इंटरनेट खोज, मैं इसके खिलाफ बहुत चेतावनी नहीं मिल सकता है। क्या मैं निष्कर्ष पर कूद रहा हूं?

क्या make -jयह उतना ही खतरनाक है जितना यह मुझे प्रतीत होगा? यदि ऐसा है, तो पृथ्वी पर ऐसा क्यों है, और इसे बेवकूफ बनाने के लिए क्या किया जा सकता है?


नोट: आखिरी सवाल पर, मैं तर्कों को जोड़ने alias make="make -j4"की आवश्यकता को समाप्त करने के लिए एक जोड़ने पर विचार कर -jNरहा हूं, लेकिन मैंने अभी भी सभी संभावित परिणामों के माध्यम से नहीं सोचा है ...
HP HP

1
वैश्विक सीमाओं के लिए कृपया makeअपनी सुविधाओं का उपयोग करें और करें export MAKEFLAGS="-j 4"। आगे की जांच के लिए मैं टाइप करने से पहले पढ़ने की सलाह देता हूं । PS: <कोर की संख्या> + 2 ने मुझे लगभग दो दशकों से अच्छी तरह से सेवा दी है। दिन में वापस, लिनस ने कर्नेल जारी करने से पहले एक फाइनल किया । make -j128
बनगुंगिन

जवाबों:


6

ऐसे उपकरण हैं जो आपको कई कल्पनाशील तरीकों से पैर में खुद को शूट करने की अनुमति देते हैं। यह इतना है कि आप अपनी कल्पना का उपयोग करके समस्याओं को हल करने के बिना प्रतिबंधित कर सकते हैं जो किसी और को लगता है कि "समझदार" है।

make -jएक छोटी परियोजना पर चलना पूरी तरह से उचित है। अन्य परियोजनाओं में, -jएक तर्क के बिना उपयोग करना गंभीर रूप से सिस्टम जवाबदेही को पंगु बना देगा। कुछ परियोजनाओं में, समानांतर बिल्ड का उपयोग करते हुए, यहां तक -j2कि बिल्ड को पूरी तरह से तोड़ देगा (समानांतर मेक प्रक्रिया द्वारा बनाई गई फाइलें एक समय आदि के लिए समय में नहीं हैं)।

मैं व्यक्तिगत रूप makeसे make -j4(जैसा कि आप कहते हैं कि आप विचार कर रहे हैं, टिप्पणियों में) से बचने से बचना होगा । मुझे लगता है कि मशीन को स्पष्ट रूप से बताना बेहतर है कि क्या करना है, ताकि मुझे पता हो कि यह क्या करेगा। कुछ दिनों में, मैं उस उपनाम के बारे में भूल गया हूं, और आश्चर्य होगा कि मैं जिन चार परियोजनाओं को अलग-अलग टर्मिनलों में बना रहा हूं, वे मेरे सिस्टम को गैर-जिम्मेदार बना रहे हैं।

जैसा कि "खतरनाक" के लिए ... शब्द का अर्थ विभिन्न संदर्भों में अलग-अलग चीजें हैं। हां, यह "खतरनाक" है क्योंकि यह सिस्टम को गैर-जिम्मेदार बना सकता है। हां, यह "खतरनाक" है क्योंकि यह बिल्ड के माध्यम से निर्माण की प्रक्रिया को आधा कर सकता है। लेकिन नहीं, यह इस अर्थ में "खतरनाक" नहीं है कि यह आपकी हार्ड ड्राइव को सुधार देगा या यादृच्छिक फ़ाइलों को हटाना शुरू कर देगा।

तो, यह कैसे बेवकूफ-सबूत है?

यहां एक निश्चित चरण-दर-चरण मार्गदर्शिका दी गई है:

  1. अपने उपकरणों का उपयोग करना सीखें।

यह भी ध्यान दें, कि -jबीएसडी करने के लिए ध्वज make है एक तर्क की आवश्यकता होती है, और कहा कि इस ध्वज अमानक है (यूनिक्स POSIX मानक यह उल्लेख नहीं है)।


4

आप का उपयोग कर सीमा भी कर सकते हैं -l:

-l [लोड], - लोड-एवरेज [= लोड] निर्दिष्ट करता है कि कोई नया काम (कमांड) शुरू नहीं किया जाना चाहिए यदि अन्य नौकरियां चल रही हैं और लोड औसत कम से कम लोड (एक फ्लोटिंग-पॉइंट नंबर) है। बिना किसी तर्क के, पिछली लोड सीमा को हटा देता है।

लेकिन ध्यान दें कि यह इसे इस तरह से चलाने में मदद नहीं करता है make -j -l4:।

सीमा के ऊपर लोड औसत बढ़ने (मेरे अनुभव के आधार पर) से पहले बहुत से काम शुरू किए जाते हैं। इस प्रकार एक संयोजन काम कर सकता है, जैसे make -j8 -l4

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.