আমি কি কোনও প্রক্রিয়া নির্দিষ্ট সময় / সিপিইউ চক্রের মধ্যে সীমাবদ্ধ রাখতে পারি?


16

আমাদের কাছে একটি স্ক্রিপ্ট রয়েছে যা আমাদের ওয়েব সার্ভারগুলিতে চলে, গ্রাহক পদক্ষেপ দ্বারা ট্রিগার করে, যা কিছু ক্যাশে ফাইল উত্পন্ন করার জন্য ইউনিক্স প্রক্রিয়া শুরু করে। যেহেতু এই প্রক্রিয়াটি আমাদের গ্রাহক দ্বারা সরবরাহ করা ফাইলগুলির উপরে কাজ করে, এটি কখনও কখনও দুর্ব্যবহার করে, এতক্ষণ চলতে থাকে যে পিএইচপি প্রক্রিয়াটি এটির সময় বের করে দেয় বা এত বেশি সিপিইউ সময় ব্যবহার করে যে সিসাদমিন এটি মেরে ফেলবে।

এমন কোন কমান্ড আছে যা আমি চালাতে পারি যা সিপিইউ সময় / রানটাইম প্রক্রিয়াটির সীমাবদ্ধ করে? আমি এমন একটি কমান্ড সন্ধান করছি /usr/bin/time, যেখানে আমি এই কমান্ডটি চালাতে পারি এবং এটি চালানো এবং সীমাবদ্ধ করতে চান এমন কমান্ডলাইনটি পাস করতে পারি।

উত্তর:


13

গিলিসের উত্তরের পাশাপাশি সিপুলিমিট সরঞ্জাম রয়েছে যা আপনি যা চান ঠিক তেমন করে - রানটাইম সংশোধন সহ। অতিরিক্তভাবে এটি কেবলমাত্র নির্দিষ্ট সিপিইউ / কোর আইআইআরসি-তে সীমাবদ্ধ করতে পারে।


12

একটি প্রোগ্রামের মধ্যে থেকে কল করুন setrlimit(RLIMIT_CPU, ...)। শেল থেকে, কল করুন ulimit -t 42(এটি স্ট্যান্ডার্ড নয় তবে বেশিরভাগ শেল (বাশ ও কেএস সহ) বেশিরভাগ ইউনিক্স ভেরিয়েন্টে সমর্থন করে)। এটি একবারে সিপিইউয়ের এন সেকেন্ড সময় ব্যবহার করে বর্তমান প্রক্রিয়াটিকে হত্যা করার কারণ ঘটায়। সীমাবদ্ধতা শিশু প্রক্রিয়া দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত। (ulimit -t 42; runaway_process)আপনি যদি একই শেল থেকে পরে অন্যান্য সীমাহীন প্রক্রিয়া চালাতে সক্ষম হতে চান তবে একটি সাধারণ শেল আইডিয়াম ।

আরও দেখুন ইউনিক্সে কোনও বিশেষ প্রক্রিয়া ব্যবহার করতে পারে এমন মেমোরির পরিমাণ সীমিত করার কোনও উপায় আছে কি? । নীতিটি একই, আপনি কেবল একটি ভিন্ন সংস্থান সীমাবদ্ধ করছেন।


সমস্যাটি হ'ল, প্রোগ্রামটির উত্স কোডটি আমার কাছে নেই সুতরাং আমি যুক্ত করতে পারি না setrlimitএবং আমি এটি পিএইচপি এর মাধ্যমে তৈরি করছি যাতে আমার কোনও শেল নেই ...
জোশ

6
@ জোশ: আপনি যদি অনুরূপ কোনও নির্মাণের সন্ধান করছেন তবে আপনি এটি time php /cgi/foo.phpব্যবহার করতে পারেন bash -c 'ulimit -t 42; exec "$0" "$@"' php /cgi/foo.php
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ জোশ আপাচে? এছাড়াও আমি মনে করি এই
জিনিসটি

@ এক্সেনোটেরাসাইড হ্যাঁ এটি অ্যাপাচি, তবে আমি কেবল এই একটি প্রক্রিয়া সীমাবদ্ধ করতে চাই, সমস্ত অ্যাপাচি প্রক্রিয়া নয়। গিলসের ব্যাশ অনেলিনার দুর্দান্ত কাজ করতে পারে!
জোশ

3

timeoutনির্দিষ্ট সময়ের চেয়ে বেশি সময় চলতে থেকে কোনও প্রক্রিয়া অবরুদ্ধ করতে আপনি কমান্ডটিও ব্যবহার করতে পারেন ।

উদাহরণ

$ date
Mon May  6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May  6 07:35:14 EDT 2013

দেখুন সময়সীমার man পৃষ্ঠা আরও বিস্তারিত জানার জন্য।

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