কীভাবে কোনও নির্দিষ্ট প্রোগ্রামের অদলবদল হওয়া থেকে রোধ করবেন?


23

কোনও ডিস্কে অদলবদল হওয়া থেকে কোনও নির্দিষ্ট প্রোগ্রামকে (যেমন রিদম্বক্স এবং এর নির্ভরতা) প্রতিরোধ করা কি সম্ভব?

আমি জিজ্ঞাসা করছি কারণ যখন কোনও সঙ্গীত প্লেয়ার যখনই ক্রোমিয়াম অত্যধিক মেমরি হোগ করে তখন আমার একটি সমস্যা হয়। এখানে কাজ করার একটি উপায় আছে কি? এটি উইন্ডোতে আর সমস্যা নয় তাই সম্ভবত একটি উপায় আছে।


টমবয়েরও একই সমস্যা। এটা তোলে কারণে কিছু লোক পাল্টেছেন এক GNote
ক্রিশ্চিয়ান সিপিতু

1
আমি মনে করি যে অচলিত সমস্যা অদলবদল অদলবদলের কারণে হয় নি। প্রোগ্রামটি যদি কিছু খেলতে থাকে তবে লিনাক্সের এটি লক্ষ্য করা উচিত এবং এটি অদলবদল করা উচিত নয়। যে প্রোগ্রামগুলি খুব বেশি কিছু করে না সেগুলি হ'ল প্রথমটি অদলবদল হয়। আপনি কি ছুটে গেছেন psবা topদেখুন RSS/ রাইডটম্বক্সটি সত্যিই / RESক্ষেত্রটি পরীক্ষা করে অদলবদল হয়েছে কিনা ? আমি মনে করি আপনার সমস্যাটি বেশিরভাগই অনুপযুক্ত সময়সূচির কারণে ঘটে। reniceআপনার ছড়াছড়ি প্রক্রিয়াটি চেষ্টা করা উচিত বা এর কিছু সেটিংস পরিবর্তন করা উচিত , যেমন অডিও বাফারের আকার।
ক্রিশ্চিয়ান সিউপিতু

1
ধন্যবাদ! কোনও প্রোগ্রামের প্রাথমিক সুন্দর মান সেট করার কোনও উপায় আছে কি? / ইত্যাদি / নিকতাব নাকি কিছু? :)
আলেক্সি আভেরচেঙ্কো

উত্তর:


10

আমি মনে করি যে অচলিত সমস্যা অদলবদল অদলবদলের কারণে হয় নি। কোনও প্রোগ্রাম যদি কিছু খেলতে থাকে তবে লিনাক্সের এটি লক্ষ্য করা উচিত এবং এটি অদলবদল করা উচিত নয়। যে প্রোগ্রামগুলি বেশি কিছু করে না সেগুলি হ'ল প্রথমটি অদলবদল হয়। আপনি PS বা উপরের থেকে RSS/ RESক্ষেত্রটি দেখে প্রোগ্রামটি সত্যই অদলবদল হচ্ছে কিনা তা আপনি পরীক্ষা করতে পারেন । আবাসিক সেট আকার, অ-অদলবদল শারীরিক মেমরি যা কোনও টাস্ক ব্যবহার করছে (কিলোবাইটে)।RSS

আমি মনে করি যে আপনার সমস্যাটি সম্ভবত ভুল সিপিইউ এবং আই / ও শিডিয়ুলিং এবং রিদম্বক্সের কিছুটা অদক্ষতার কারণে সৃষ্টি হয়েছে যা এটি হাই সিস্টেমের বোঝার প্রতি সংবেদনশীল করে তোলে। কমান্ডগুলি সুন্দর এবং রিনিসের সাহায্যে সিপিইউ অগ্রাধিকার পরিবর্তন করা যেতে পারে । আয়নিস কমান্ডের সাহায্যে I / O অগ্রাধিকার পরিবর্তন করা যেতে পারে । কেবলমাত্র সুপার ব্যবহারকারী উচ্চ অগ্রাধিকার ব্যবহার করতে পারেন। আপনার আরও জানা উচিত যে লিনাক্স কার্নেল ছেলেরা বিভিন্ন নিম্ন-ল্যাটেন্সি প্যাচগুলির সাথে ডেস্কটপ সিস্টেমগুলির প্রতিক্রিয়াশীলতা উন্নত করার চেষ্টা করছে, যাতে আপনি সেগুলি ব্যবহার করার বিষয়টি বিবেচনা করতে পারেন। এর মধ্যে একটি হ'ল মাইক গ্যালব্রাইথ দ্বারা লিখিত একটি 200 ডলার লাইন প্যাচ যা লিনাস এমনকি মুগ্ধ করেছে। এই প্যাচের বিকল্প হ'ল লেনার্ট পোয়েটারিংয়ের সিগ্রুপ ট্রিক ফেডোরা 15 এ ডিফল্ট হবে বলে আমি মনে করি।

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

#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei

আপনাকে এটি রুট হিসাবে চালানো দরকার। এটি শুরু করতে আপনি যদি রুট হিসাবে লগইন করতে না চান তবে আপনি হয় suবা ব্যবহার করতে পারেন sudo

এরপরে অগ্রাধিকার পরিবর্তন করার জন্য, আপনি যদি এটির পরিবর্তনের জন্য রুট হিসাবে লগইন করতে খুব অলস হন তবে আপনি প্রতি 5 মিনিটে একটি ক্রোন জব ব্যবহারের চেষ্টা করতে পারেন এবং rhythmboxপ্রক্রিয়াটির অগ্রাধিকার সেট করে থাকেন তবে আমি এটি করার পরামর্শ দিচ্ছি না:

#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`

5

সংক্ষিপ্ত উত্তর: আপনি পারবেন না এবং করা উচিত নয়।

অনেক দিন আগে এক্সিকিউটেবল ফাইলগুলি স্টিকি বিটকে সম্মান +tজানায় যা কার্নেলকে অদলবদল করতে না বললেও আজ তা উপেক্ষা করা হবে।

যদি কার্নেল সিদ্ধান্ত নেয় যে এটি অদলবদল করতে হবে, এটির অবশ্যই একটি বৈধ কারণ রয়েছে। লিনাক্স মেমরির ব্যবহারের ক্ষেত্রে খুব আক্রমণাত্মক, কারণ র‌্যাম যা নিষ্ক্রিয়, এটি একটি নষ্ট সম্পদ।

আপনি যদি সত্যিই অদলবদল করতে না চান, আরও র‌্যাম পান, বা কেবল # swapoff -a(পুনরায় সংশোধনযোগ্য নয়, আপনার সিস্টেমে অকার্যকর হয়ে উঠতে পারে যদি আপনার ইতিমধ্যে সমস্যা থাকে)।

Shouldn'tআপনি যখন কিছু অ্যাপ্লিকেশন বিকাশ করছেন তখন চলে যান এবং এটিকে মোটামুটি অদলবদল করতে চান না। স্ট্যাকওভারফ্লোতে এই পোস্টটি একবার দেখুন ।


2
আমি মনে করি না যে প্রায় 100 এমআইবি সংরক্ষণ করা আমার সিস্টেমকে মেরে ফেলবে। আমার বিশেষ সমস্যা সমাধানের জন্য অন্য উপায় আছে (সম্পাদিত প্রশ্ন দেখুন)?
আলেক্সি আভেরচেঙ্কো

1
যদি আপনি অন্য প্রক্রিয়াগুলির তুলনায় কোনও প্রক্রিয়া উচ্চ স্তরের প্রতিক্রিয়াশীল রাখার মনস্থ করেন তবে উত্তরটি দুর্দান্ত (এটি করতে আপনাকে অবশ্যই মূল হতে হবে)। আপনার হাতটি নোংরা করতে না চাইলে মেমোরি পেজিংয়ের সাথে গোলমাল করা সহজ নয় (প্রক্রিয়াটি বোকা বানানোর জন্য মেমরি বরাদ্দকরণের জন্য ব্যবহৃত ফাংশনটি সামঞ্জস্য করার জন্য কোনও কোডটি পুনরায় সংকলন করুন, অথবা এমনকি LD_PRELOAD করা - আবার কোনও প্রস্তাব দেওয়া হয়নি) । পরামর্শ? প্রক্রিয়াটি পুনরায় ব্যবহার করুন, আরও র‌্যাম পান, বা ট্যাবগুলি খোলার চেষ্টা বন্ধ করুন;)
টোরিয়ান

5
"যদি কার্নেল সিদ্ধান্ত নেয় যে এটি অদলবদল করতে হবে, এটির অবশ্যই একটি যুক্তিসঙ্গত কারণ আছে" এটি সত্য নয়। আজ আমার 1,3 জি ফ্রি মেমরি ছিল। লিনাক্স কার্নেল আমার httpd প্রক্রিয়াগুলিকে অদলবদল (370 এম) এ রেখে দেয়।
bluszcz

@ ব্লসজক্জ (ভাল, অন্যরা এই মন্তব্যটি কতটা পুরানো হয়েছে তা প্রদত্ত): এটি হতে পারে কারণ এটি সিদ্ধান্ত নিয়েছে যে আপনার httpd দ্বারা পরিবেশন করা ফাইলগুলির জন্য ডিস্ক ক্যাশে আপনার httpd নিজেই খুব কম ব্যবহৃত অংশের চেয়ে গুরুত্বপূর্ণ - অন্য উত্তরগুলি দেখুন "অদলবদল" উল্লেখ
জান শিজবাল

@ জানসেচেজবাল তাই করেছেন কারণ লিনাক্স, কমপক্ষে কাউকে না জানিয়ে, কী প্রক্রিয়াগুলি গুরুত্বপূর্ণ বা না তা জানেন না। সার্ভার পরিবেশে, আপনাকে সিস্টেমটি বলতে সক্ষম হওয়া উচিত যে কোন প্রক্রিয়াগুলি গুরুত্বপূর্ণ এবং কোনটি নয়। "আমি অন্য বিষয়গুলির বিষয়ে চিন্তা করি না, তবে এই সার্ভারটি পরিচালনার জন্য এই প্রক্রিয়াগুলি সবচেয়ে গুরুত্বপূর্ণ"
রাহলি


3

এটি করার বিভিন্ন উপায় রয়েছে। আপনি চেষ্টা করার চেষ্টা করতে পারেন লিনাক্সের কাছে "বলছেন" অদলবদলের ( কম ) সাধারণত:

echo 10 > /proc/sys/vm/swappiness

থেকে: https://www.kernel.org/doc/Docamentation/sysctl/vm.txt

swappiness

এই নিয়ন্ত্রণটি নির্ধারণ করতে ব্যবহৃত হয় যে কার্নেল কীভাবে আক্রমণাত্মক মেমরি পৃষ্ঠাগুলি অদলবদল করবে। উচ্চতর মানগুলি আগ্রাসন বাড়িয়ে তুলবে, নিম্ন মানগুলি অদলবদের পরিমাণ হ্রাস করে।

ডিফল্ট মান 60।

অন্যান্য বিকল্পটি সিগ্রুপ কার্নেল ম্যানেজার ব্যবহার করে, এটি প্রতি-প্রক্রিয়া নির্দিষ্ট তবে আপনার কিছু কাজ করতে হবে: এখানে উত্তর দেওয়া হয়েছে: /unix/10214/per-process-swapiness- for -linux # 10227


1
এটি বিশ্বব্যাপী অদলবদলকে প্রভাবিত করে, প্রক্রিয়া-নির্দিষ্ট নয়।
লরেঞ্জো ভন ম্যাটারহর্ন

1
হ্যাঁ, আপনি লক্ষ্য করতে পারেন যে "(সাধারণত)" আমি লিখেছি। প্রতি-প্রক্রিয়া হওয়ার বিকল্পটি হ'ল সিগ্রুপগুলি ব্যবহার করে অন্য উত্তরের লিঙ্ক।
ceinmart

তাহলে আর কোন সাহায্য নেই, তাই না?
কেন শার্প

কেন শার্প: সমস্যার উত্তম সমাধানের মতো যা মনে হয় (অন্তত প্রথম নজরে) তার সাথে সরাসরি যুক্ত এই উত্তরটি। সুতরাং ... আপনি যা বলেছিলেন তার বিপরীতে।
ফিলস

@ ফিলস আপনি কীভাবে এটি কাজ করে তা পান না।
কেন শার্প

0

আপনি mlockall()সিস্কেল ব্যবহার করতে পারেন । মলকাপল () মেমোরি প্রক্রিয়াটিকে আবাসিক হতে বাধ্য করে (= কোনও অদলবদল, কোনও অতিরিক্ত কমিট, ইত্যাদি ...)। আফাইক, এটি করার কোনও শেল কমান্ড নেই, তবে এটি তৈরি করা সহজ। এটি দেখতে যেমন হবে:

if (mlockall(MCL_FUTURE | MCL_CURRENT))
     perror("mlockall");
execvp(argv[0], argv);

নোট, কল করতে আপনাকে রুট হওয়া দরকার mlockall()

যাইহোক, অন্য উত্তরে যেমন বলা হয়েছে, আপনি যা চান তা আসলে এটি বলে আমি মনে করি না।


1
কোডটি মোটেও কাজ করবে না কারণ এক্সক্লুভটি মলকাপলকে পূর্বাবস্থায় ফিরিয়ে আনার একটি অগ্রভাগ। মলক ম্যান-পৃষ্ঠায় নোট বিভাগটি দেখুন।
জোহানেস ম্যাটোকিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.