Раніше сьогодні, будуючи щось, я вирішив бігти make
як
$ make -j
може бути , за звичкою з іншими програмами , такими , як , cabal
де по -j
замовчуванням в розумних межах.
Приблизно через 20 секунд весь мій робочий стіл перемелюється . Я шукаю різні ознаки активності. Вболівальники не обертаються. Індикатор жорсткого диска суцільно зелений, але я не чую жодної активності диска. Гммммм. Після 10 хвилин мовчання я нарешті бачу відповідь на перше натискання клавіш, яке я зробив століттями тому, і я також починаю чути надто знайомий звук, що лунає на диску. Через 20 хвилин поволі намагаючись пробратися в термінал на цій невідповідній машині, я заграв і застосував REISUB.
Спочатку я вважав, що винуватець настільного програмного забезпечення для настільних комп'ютерів повинен був бути винуватим, тому що мені давно було встановлено обмеження пам’яті на інтерактивних сесіях bash, щоб не дати мені поставити себе саме в таку ситуацію! Але /var/log/syslog
розповідає іншу історію; ОИЙ вбивця залишив деякі 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 [jobs], --jobs [= jobs] Вказує кількість завдань (команд) для виконання одночасно. Якщо є кілька варіантів -j, останній діє. Якщо параметр -j заданий без аргументу, make не обмежує кількість завдань, які можуть працювати одночасно.
Я неохоче бачу, чи можу я відтворити проблему (лікарю, боляче, коли я це роблю ...) , але результати дослідження поки що здаються домашніми: ясна річ, make -j
і сотні процесів, що виникають в результаті, повинні мати стали причиною зависання та лущення диска. Однак, шукаючи Інтернет, я не можу знайти багато попередження проти цього. Чи я підхоплюю до висновків?
Настільки make -j
небезпечний, як мені здавалося? Якщо так, то чому на землі він є, і що можна зробити, щоб ідіотом це було?
make
власні засоби та робіть export MAKEFLAGS="-j 4"
. Для подальших досліджень я раджу прочитати, перш ніж набрати текст . PS: <кількість ядер> + 2 служить мені добре вже майже два десятиліття. Ще в той час Лінус зробив фінал, make -j128
перш ніж випустити ядро.
alias make="make -j4"
щоб усунути необхідність додавання-jN
аргументів, але я все ще не продумав усі можливі наслідки ...