`Make -j` (কোন যুক্তি ছাড়াই) বিপজ্জনক? [বন্ধ]


13

এর আগে আজ যখন এমন কিছু তৈরি, আমি চালানোর সিদ্ধান্ত নিয়েছে makeহিসাবে

$ make -j

সম্ভবত অন্যান্য প্রোগ্রামের সাথে অভ্যাসের বাইরে cabalযেখানে -jযুক্তিসঙ্গত সীমাতে খেলাপি।

প্রায় 20 সেকেন্ড পরে, আমার পুরো ডেস্কটপটি থামতে পাকানো হয় । আমি ক্রিয়াকলাপের বিভিন্ন চিহ্ন খুঁজছি। কোনও ভক্ত স্পিন আপ না। এইচডিডি লাইটটি শক্ত সবুজ, তবে আমি কোনও ডিস্কের ক্রিয়াকলাপ শুনতে পাই না। Hmmmmm। 10 মিনিটের নীরবতার পরে, অবশেষে আমি কয়েক বছর আগে তৈরি প্রথম কীপ্রেসের প্রতিক্রিয়া দেখতে পাচ্ছি এবং ডিস্কে আঘাতের সমস্ত খুব শব্দ শুনতে পেলাম। এই প্রতিক্রিয়াবিহীন মেশিনে টার্মিনালে যাওয়ার জন্য ধীরে ধীরে আমার চেষ্টা করার 20 মিনিট পরে, আমি রেইউইউবিড করেছিলাম এবং ব্যবহার করি UB


প্রথমে, আমি অনুমান করেছি যে কোনও সম্পর্কযুক্ত ডেস্কটপ অ্যাপ্লিকেশনটি অবশ্যই অপরাধী হতে পারে, কারণ আমাকে দীর্ঘদিন ধরেই আমাকে এই ধরণের পরিস্থিতিতে নিজেকে ঠিকঠাক থেকে আটকাতে ইন্টারেক্টিভ বাশ সেশনে মেমরির সীমাবদ্ধতা রেখেছিল ! তবে /var/log/syslogআলাদা গল্প বলে; ওওম কিলারটি এমন কিছু psডাম্প পিছনে ফেলেছে যা সন্দেহজনকভাবে প্যাক করা c++এবং cc1plusপ্রক্রিয়াগুলি রয়েছে!

এখানে d ডাম্পগুলির মধ্যে একটির ফ্রিকোয়েন্সি বিশ্লেষণ দেওয়া হল:

Command          Number of appearances
'sh'                    322
'c++'                   321
'cc1plus'               321
'chrome'                 27
'make'                   27
'bash'                    3
all else combined       120

সুতরাং আমি জিএনইউ মেক করার জন্য ম্যান পৃষ্ঠাটি পরীক্ষা করে দেখছি: (জোর দেওয়া হয়েছে)

-j [জবস], - জবস [= জবস] একসাথে চালানোর জন্য কাজের সংখ্যা (কমান্ড) নির্দিষ্ট করে। যদি এক -j এর বেশি বিকল্প থাকে তবে শেষটি কার্যকর। যদি -j বিকল্পটি কোনও যুক্তি ছাড়াই দেওয়া হয় তবে মেক একযোগে চলতে পারে এমন কাজের সংখ্যা সীমাবদ্ধ করে না।


আমি বিষয়টি পুনর্গঠন করতে পারি অনিচ্ছুক আছি (ডক্টর, এটি ব্যাথা যখন আমি কি এই ...) কিন্তু তদন্তের ফলাফল এতদূর একটি বাড়িতে রান হবে বলে মনে হচ্ছে: স্পষ্টত, make -jএবং তার ফলে প্রসেস শত শত থাকতে হবে হয়েছে Hang এবং ডিস্কে পিটুনি কারণ। এটি বলেছিল, ইন্টারনেট অনুসন্ধান করে আমি এর বিরুদ্ধে খুব বেশি সতর্কতা পাই না। আমি কি সিদ্ধান্তে ঝাঁপ দিচ্ছি?

আমার কাছে make -jযেমন মনে হবে ততটা বিপদজনক? যদি তা হয় তবে পৃথিবীতে এটি কেন আছে এবং এটি নির্বোধ-প্রমাণের জন্য কী করা যেতে পারে?


দ্রষ্টব্য: শেষ প্রশ্নে আমি যুক্তি যুক্ত alias make="make -j4"করার প্রয়োজনীয়তা অপসারণের জন্য একটি যুক্ত করার কথা বিবেচনা করছি -jN, তবে আমি এখনও সমস্ত সম্ভাব্য পরিণতিটি ভেবে দেখিনি ...
এক্সপ্রেস এইচপি

1
বিশ্বব্যাপী সীমাবদ্ধতার জন্য দয়া করে makeনিজস্ব সুবিধাগুলি ব্যবহার করুন এবং করুন export MAKEFLAGS="-j 4"। আরও তদন্তের জন্য আমি টাইপ করার আগে পড়ার পরামর্শ দিই । PS: <নম্বর সংখ্যা> + 2 প্রায় দুই দশক ধরে আমাকে ভালভাবে পরিবেশন করেছে। দিন ফিরে, লিনাস একটি কার্নেল ছেড়ে দেওয়ার আগে একটি ফাইনাল করেছিল। make -j128
বনাঙ্গুইন

উত্তর:


6

এমন অনেক সরঞ্জাম রয়েছে যা আপনাকে বহু কল্পনাপ্রসূত উপায়ে পায়ে গুলি করতে দেয়। এটি এমন যাতে আপনি অন্য কেউ "বুদ্ধিমান" বলে মনে করেন তা দ্বারা সীমাবদ্ধ না রেখে সমস্যার সমাধানের জন্য আপনার কল্পনাটি ব্যবহার করতে পারেন।

make -jএকটি ছোট প্রকল্পে চালানো পুরোপুরি যুক্তিসঙ্গত। অন্যান্য প্রকল্পে, -jযুক্তি ছাড়াই ব্যবহার করা সিস্টেমের প্রতিক্রিয়াটিকে গুরুতরভাবে পঙ্গু করে দেবে। কিছু প্রকল্পে, সমান্তরাল বিল্ডগুলি এমনকি এমনকি ব্যবহার -j2করে বিল্ডটি সম্পূর্ণরূপে ভেঙে যায় (সমান্তরাল মেক প্রক্রিয়া দ্বারা নির্মিত ফাইলগুলি অন্য কোনও সময়ের জন্য সময় মতো নেই)।

আমি ব্যক্তিগতভাবে এলিয়াসিং এড়াতে হবে makeথেকে make -j4(আপনি বলে বিবেচনা করা হয়, মন্তব্যে)। আমি দেখতে পেয়েছি যে কী করা উচিত তা স্পষ্টভাবে মেশিনকে বলা ভাল, যাতে আমি জানি যে এটি কী করবে। কয়েকদিনের মধ্যে, আমি সেই উপনামটি ভুলে যাব এবং অবাক হয়ে যাব যে আমি পৃথক টার্মিনালগুলিতে যে চারটি প্রকল্প তৈরি করছি তা কেন আমার সিস্টেমকে প্রতিক্রিয়াহীন করে তুলছে।

"বিপজ্জনক" হিসাবে ... শব্দটির অর্থ বিভিন্ন প্রসঙ্গে বিভিন্ন জিনিস। হ্যাঁ, এটি "বিপজ্জনক" কারণ এটি সিস্টেমটিকে প্রতিক্রিয়াহীন করে তুলতে পারে। হ্যাঁ, এটি "বিপজ্জনক" কারণ এটি বিল্ড প্রক্রিয়াটি বিল্ডের মধ্য দিয়ে অর্ধেক অংশে ক্র্যাশ করতে পারে। তবে না, এটি "বিপজ্জনক" এই অর্থে নয় যে এটি আপনার হার্ড ড্রাইভটিকে পুনরায় ফর্ম্যাট করবে বা এলোমেলো ফাইলগুলি মুছতে শুরু করবে।

সুতরাং, কিভাবে এটি বোকা-প্রমাণ?

এখানে একটি নিশ্চিত আগুন ধাপে ধাপে গাইড:

  1. আপনার সরঞ্জামগুলি ব্যবহার করতে শিখুন।

এছাড়াও লক্ষ করুন, -jবিএসডির পতাকাটির জন্য একটি আর্গুমেন্টের প্রয়োজন make হয় এবং এই পতাকাটি মানহীন (ইউনিক্স পসিক্স স্ট্যান্ডার্ড এটি উল্লেখ করে না)।


4

আপনি ব্যবহার করেও সীমাবদ্ধ করতে পারেন -l:

-l [লোড], - লোড-গড় [= লোড] সুনির্দিষ্ট করে যে অন্য কোনও কাজ চলছে এবং লোড গড় কমপক্ষে লোড (একটি ভাসমান-পয়েন্ট সংখ্যা) হলে নতুন কোনও কাজ (কমান্ড) শুরু করা উচিত নয়। কোনও যুক্তি ছাড়াই, পূর্ববর্তী লোড সীমাটি সরিয়ে দেয়।

কিন্তু এটা ভালো এটি চালানোর জন্য সাহায্যের বলে মনে হচ্ছে না দয়া করে মনে রাখবেন: make -j -l4

লোড গড় সীমা ছাড়িয়ে যাওয়ার আগে (আমার অভিজ্ঞতার ভিত্তিতে) প্রচুর কাজ শুরু করা হয়েছে। সুতরাং একটি সমন্বয় কাজ করতে পারে, যেমন make -j8 -l4

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.