Sebelumnya hari ini ketika membangun sesuatu, saya memutuskan untuk menjalankan make
sebagai
$ make -j
mungkin karena kebiasaan dengan program lain seperti cabal
mana -j
default untuk batas yang wajar.
Sekitar 20 detik kemudian, seluruh desktop saya terhenti . Saya mencari berbagai tanda aktivitas. Tidak ada penggemar yang berputar. Lampu HDD berwarna hijau solid, tapi saya tidak mendengar aktivitas disk. Hmmmmm Setelah 10 menit hening, saya akhirnya melihat respons terhadap penekanan tombol pertama yang saya buat berabad-abad yang lalu, dan saya juga mulai mendengar suara yang terlalu akrab dari hard disk. 20 menit kemudian dengan perlahan mencoba mengarungi jalan saya ke terminal pada mesin yang tidak responsif ini, saya menyerah dan menggunakan REISUB.
Pada awalnya, saya pikir aplikasi desktop yang tidak terkait pasti pelakunya, karena saya sudah lama memiliki batas memori yang ditempatkan pada sesi bash interaktif untuk mencegah saya menempatkan diri saya ke dalam situasi seperti ini! Tetapi /var/log/syslog
menceritakan kisah yang berbeda; pembunuh Oom tertinggal beberapa ps
tempat pembuangan yang curiga dikemas dengan c++
dan cc1plus
proses!
Berikut ini adalah analisis frekuensi dari salah satu dump tersebut:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Jadi saya memeriksa halaman manual untuk GNU make: (penekanan ditambahkan)
-j [pekerjaan], --jobs [= pekerjaan] Menentukan jumlah pekerjaan (perintah) untuk dijalankan secara bersamaan. Jika ada lebih dari satu opsi -j, yang terakhir efektif. Jika opsi -j diberikan tanpa argumen, make tidak akan membatasi jumlah pekerjaan yang dapat dijalankan secara bersamaan.
Saya enggan untuk melihat apakah saya dapat mereproduksi masalah (Dokter, itu menyakitkan ketika saya melakukan ini ...) , tetapi hasil penyelidikan sejauh ini tampaknya menjadi home run: Jelas, make -j
dan ratusan proses yang dihasilkan harus memiliki menjadi penyebab hang dan disk meronta-ronta. Yang mengatakan, mencari di internet, saya tidak dapat menemukan banyak peringatan terhadapnya. Apakah saya langsung mengambil kesimpulan?
Apakah make -j
sama berbahayanya dengan saya? Jika demikian, mengapa ada di sana, dan apa yang dapat dilakukan untuk membuktikannya dengan orang bodoh?
make
fasilitas sendiri dan lakukan export MAKEFLAGS="-j 4"
. Untuk penyelidikan lebih lanjut saya sarankan membaca sebelum mengetik . PS: <jumlah core> + 2 telah melayani saya dengan baik selama hampir dua dekade sekarang. Kembali pada hari itu, Linus melakukan final make -j128
sebelum merilis kernel.
alias make="make -j4"
untuk menghilangkan kebutuhan untuk menambahkan-jN
argumen, tapi saya masih belum memikirkan semua konsekuensi yang mungkin terjadi ...