ก่อนหน้านี้ในวันนี้เมื่อมีการสร้างสิ่งที่ฉันตัดสินใจที่จะทำงานmake
เป็น
$ make -j
บางทีอาจจะออกมาจากนิสัยกับโปรแกรมอื่น ๆ เช่นcabal
ที่-j
เริ่มต้นที่วงเงินที่เหมาะสม
ประมาณ 20 วินาทีต่อมาสก์ท็อปของฉันทั้งหมด grinds ต้องหยุดชะงัก ฉันมองหาสัญญาณต่าง ๆ ของกิจกรรม ไม่มีแฟน ๆ ปั่น ไฟ HDD เป็นสีเขียวค้าง แต่ฉันไม่ได้ยินการทำงานของดิสก์ 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
ดังนั้นฉันจะตรวจสอบ man page สำหรับ GNU make: (เน้นการเพิ่ม)
-j [jobs], --jobs [= jobs] ระบุจำนวนงาน (คำสั่ง) เพื่อให้ทำงานพร้อมกัน หากมีมากกว่าหนึ่งตัวเลือก -j ตัวเลือกสุดท้ายจะมีผลบังคับใช้ หากกำหนดอ็อพชัน -j โดยไม่มีอาร์กิวเมนต์ให้จะไม่ จำกัด จำนวนงานที่สามารถรันพร้อมกัน
ฉันลังเลที่จะตรวจสอบว่าฉันสามารถทำซ้ำปัญหา(หมอมันเจ็บเมื่อฉันทำเช่นนี้ ... )แต่ผลการสอบสวนจนถึงตอนนี้ดูเหมือนจะเป็นวิ่งกลับบ้าน: ชัดเจนmake -j
และกระบวนการที่เกิดขึ้นหลายร้อยต้อง เคยเป็นสาเหตุของการแฮงค์และดิสก์ thrashing ที่กล่าวว่าการค้นหาอินเทอร์เน็ตฉันไม่สามารถหาคำเตือนได้มากนัก ฉันกำลังกระโดดไปสู่ข้อสรุป?
คือmake -j
เป็นอันตรายก็จะดูเหมือนกับผมหรือเปล่า ถ้าเป็นเช่นนั้นทำไมบนโลกถึงอยู่ที่นั่นและสิ่งที่สามารถทำได้เพื่อพิสูจน์ความงี่เง่า?
alias make="make -j4"
เพื่อกำจัดความจำเป็นในการเพิ่ม-jN
อาร์กิวเมนต์ แต่ฉันยังไม่ได้คิดถึงผลที่จะเกิดขึ้นทั้งหมด ...