कल मैं स्रोत से रूट पैकेज संकलित करने की कोशिश कर रहा था । चूंकि मैं इसे 6 कोर मॉन्स्टर मशीन पर संकलित कर रहा था, इसलिए मैंने कई कोर का उपयोग करके आगे बढ़ने और निर्माण करने का निर्णय लिया make -j 6
। संकलन सुचारू रूप से शुरू हुआ और वास्तव में तेजी से बढ़ा, लेकिन कुछ बिंदु make
पर सिर्फ एक कोर पर 100% सीपीयू का उपयोग करके लटका दिया गया।
मैंने कुछ googling किया और इस पोस्ट को ROOT संदेश बोर्डों पर पाया । चूंकि मैंने खुद इस कंप्यूटर का निर्माण किया था, मुझे चिंता थी कि मैंने हीटसिंक को ठीक से लागू नहीं किया था और सीपीयू ओवरहीटिंग या कुछ और था। दुर्भाग्य से, मेरे पास काम पर यहां एक फ्रिज नहीं है जिसे मैं इसे छड़ी कर सकता हूं। ;-)
मैंने lm-sensors
पैकेज स्थापित किया और make -j 6
फिर से चला गया, इस बार सीपीयू तापमान की निगरानी करना। हालांकि यह उच्च (60 सी के करीब) हो गया, यह कभी भी उच्च या महत्वपूर्ण तापमान से आगे नहीं गया।
मैंने दौड़ने की कोशिश की, make -j 4
लेकिन make
संकलन के दौरान फिर से लटका दिया, इस बार एक अलग स्थान पर।
अंत में, मैंने सिर्फ दौड़ना संकलित make
किया और यह ठीक काम किया। मेरा सवाल है: यह क्यों लटका हुआ था? इस तथ्य के कारण कि यह दो अलग-अलग स्थानों पर रुका है, मुझे लगता है कि यह किसी प्रकार की दौड़ की स्थिति के कारण था, लेकिन मुझे लगता है कि make
यह सही क्रम में सब कुछ पाने के लिए पर्याप्त चतुर होना चाहिए क्योंकि यह -j
विकल्प प्रदान करता है।
-j >1
।
$(shell ...)
था , अंततः एक कमांड चला रहा था जो इनपुट से इंतजार कर रहाstdin
था । यह तब होता है जब एक चर खाली था और कमांड में कोई फ़ाइल तर्क पारित नहीं किया गया था।
strace -p <pid>
और देखने के लिए कि क्या आप पता लगा सकते हैं कि यह क्या / के लिए देख रहा है। स्ट्रेस केवल आपको syscalls (फ़ंक्शन कॉल नहीं) दिखाएगा, लेकिन यह अभी भी आपको बहुमूल्य जानकारी दे सकता है यदि यह किसी विशेष फ़ाइल को देखते समय या उसके लिए कताई कर रहा है।