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