স্থায়ীভাবে প্রদত্ত প্রক্রিয়ার জন্য সিপিইউ সীমা কীভাবে সেট করবেন। সিপুলিমিট এবং দুর্দান্ত কাজ করে না


12

অনেক অনুরূপ প্রশ্ন আছে তবে তাদের কেউই আমাকে আমার সমস্যায় সহায়তা করে না।

সার্ভারে আমার উবুন্টু ১১.১০ রয়েছে (এটি ডেস্কটপ সংস্করণ)। এটিতে আমার একটি চলমান ওয়েবসাইট রয়েছে। একটি প্রক্রিয়া রয়েছে যা অত্যন্ত গুরুত্বপূর্ণ তবে উচ্চ অগ্রাধিকারের ভিত্তিতে চালিত হতে হবে না। আমি প্রক্রিয়াটির জন্য সিপিইউ স্থায়ীভাবে সীমাবদ্ধ করতে চাই , ব্যবহারকারীর জন্য নয়। এই প্রক্রিয়াটি এক্সিকিউটিভ ফাংশন দ্বারা চালিত হয় (এটি পিএইচপি ফাংশন, সিস্টেম প্রক্রিয়া নয়)।

সুতরাং আমি 2 টি অপশন দেখছি: ১. প্রতিবার ফাংশনটি সম্পাদন করার সময় কিছুটা সীমাবদ্ধতা যুক্ত করুন। 2. এই প্রক্রিয়াটির জন্য স্থায়ীভাবে সিপিইউ ব্যবহার সীমাবদ্ধ করুন।

আমি "সুন্দর" এবং সিপুলিমিট ব্যবহার করার চেষ্টা করেছি, তবে কিছুই কাজ করছে বলে মনে হচ্ছে না। ভালো লাগার কোনও প্রভাব নেই এবং সিপুলিমিট (উই-ই) বলেছেন: "কোনও লক্ষ্য প্রক্রিয়া পাওয়া যায় নি"।

আমি বেশ শিক্ষানবিস, সুতরাং অনুমান করুন আমি প্রায় কিছুই জানি না।


আপনি কি দয়া করে আমাদের বলতে পারেন? cgroups এটি আপনার জন্য করতে পারে।
প্যান্থার

কনফিগারেশন হিসাবে, আপনি cgsnapshot -sনিজেই কনফিগারেশন ফাইল না লিখে তথ্য পুনরুদ্ধার করতে চালাতে পারেন , যার পরবর্তীটি সুপারিশ করা হয় না।
মিংলিয়ং লিউ

আপনি কি প্রকৃতপক্ষে প্রক্রিয়াটি থ্রোলেট করতে চান, অর্থাত্ নিশ্চিত করুন যে এটি কখনই কোনও নির্দিষ্ট সময়ের চেয়ে বেশি হয় না ?
কেন শার্প

আমি এই পদ্ধতিটি ব্যবহার করেছি এবং এটি আমার পক্ষে কাজ করেছে .. ubuntuforums.org/showthread.php?t=992706
মোস্তফা সালমান

উত্তর:


19

অনুরোধ করা বিশদের অভাবে ...

এখানে আমি উবুন্টুতে কীভাবে সিগ্রুপ ব্যবহার করি।

এই পোস্টটির পুরো জুড়ে, আপনার প্রক্রিয়াটি চালিত ব্যবহারকারীর কাছে পরিবর্তনশীল "$ USER" পরিবর্তন করতে হবে

আমি মেমরির জন্য তথ্য যুক্ত করেছি পাশাপাশি এটি একটি এফএকিউ হতে চলেছে, আপনার যদি প্রয়োজন না হয় তবে এটি ব্যবহার করবেন না।

1) ইনস্টল করুন cgroup-bin

sudo apt-get install cgroup-bin

2) রিবুট। cgroups এখন অবস্থিত/sys/fs/cgroup

3) আপনার ব্যবহারকারীর (প্রক্রিয়ার মালিক) জন্য একটি গ্রুপ তৈরি করুন

# Change $USER to the system user running your process.
sudo cgcreate -a $USER -g memory,cpu:$USER

4) আপনার ব্যবহারকারীরা তাদের সংস্থানগুলি পরিচালনা করতে পারে। ডিফল্টরূপে ব্যবহারকারীরা 1024 সিপিইউ ইউনিট (শেয়ার) পান, সুতরাং প্রায় 10% সিপিইউতে সীমাবদ্ধ করতে মেমরিটি বাইটে থাকে ...

# About 10 % cpu
echo 100 > /cgroup/cpu/$USER/cpu.shares

# 10 Mb
echo 10000000 > /cgroup/memory/$USER/memory.limit_in_bytes

৫) আপনার প্রক্রিয়াটি শুরু করুন (এক্সিকিউটে চেজেসেকে পরিবর্তন করুন)

# -g specifies the control group to run the process in
# Limit cpu
cgexec -g cpu:$USER command <options> &

# Limit cpu and memory
cgexec -g memory,cpu:$USER command <options> &

কনফিগারেশন

ধরে নিচ্ছি সিগ্রুপ আপনার জন্য কাজ করছে;)

সম্পাদনা করুন /etc/cgconfig.conf, আপনার কাস্টম সিগ্রুপে যুক্ত করুন

# Graphical
gksudo gedit /etc/cgconfig.conf

# Command line
sudo -e /etc/cgconfig.conf

আপনার সিগ্রুপে যোগ করুন। প্রক্রিয়াটির মালিকানাধীন ব্যবহারকারীর নামটিতে আবার $ USER পরিবর্তন করুন।

group $USER {
# Specify which users can admin (set limits) the group
perm {    
    admin {
        uid = $USER;
    }
# Specify which users can add tasks to this group
    task {
        uid = $USER;
    }
}
# Set the cpu and memory limits for this group
cpu {
    cpu.shares = 100;
    }
memory {
    memory.limit_in_bytes = 10000000;
    }
}

আপনি গ্রুপগুলিও নির্দিষ্ট করতে পারেন gid=$GROUP, /etc/cgconfig.conf ভাল মন্তব্য করা হয়েছে।

এখন আবার আপনার প্রক্রিয়া দিয়ে চালানো cgexec -g cpu:$USER command <options>

আপনি নিজের প্রক্রিয়াটি (পিআইডি দ্বারা) দেখতে পাচ্ছেন /sys/fs/cgroup/cpu/$USER/tasks

উদাহরণ

বোধি @ ufbt: ~ ge cgexec -g সিপিইউ: বোধি ঘুম 100 &

[1] 1499

বোধি @ উফবিটি: $ $ বিড়াল / সিস / এফএস / সিগ্রুপ / সিপিইউ / বোধি / কার্য

1499

অতিরিক্ত তথ্যের জন্য দেখুন: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/ রিসোর্স_ম্যানেজমেন্ট_গুইড /


2
আমি অংশ 1 সমাপ্ত করতে পরিচালিত। এটি কাজ করছে, তবে আপনার এমন তথ্য যুক্ত করা উচিত যা প্রক্রিয়াটি কেবল সীমাবদ্ধ থাকে যখন অন্য কিছু প্রক্রিয়াতে সিপিইউ / মেমরির প্রয়োজন হয়। এটি সুস্পষ্ট নয় - এবং এটি বের করতে আমার অনেক বেশি সময় লাগবে (যেমন আমি ভিক্ষুক)। আমি কি সঠিকভাবে বুঝতে পারি যে "কনফিগারেশন "টি পুনরায় বুটের পরেও সেটিংস সংরক্ষণ করতে হবে?
রাফাল

1
আপনি এটি বাছাই পেয়ে খুশি। এখানে কিছুটা লার্নিং কার্ভ রয়েছে =) হ্যাঁ, কনফিগারেশনটি হ'ল সেটিংসটি বুট করার মধ্য দিয়ে রাখা।
প্যান্থার

আমি যখন কমান্ড লাইন থেকে সিগ্রুপ ব্যবহার করি এটি ভাল কাজ করে। কিন্তু যখন আমি php: (<? Php exec ("cgexec -g cpu: GroupHere NameOfProcess InputFile আউটপুটফায়াল") এ এক্সিকিউশন থেকে একই কমান্ডটি কার্যকর করি; এটি কার্যকর হয় না Only কেবলমাত্র পার্থক্য হ'ল আমি কমান্ড লাইন থেকে ফাইলগুলি ব্যবহার করি) আমি ফোল্ডারে আছি এবং পিএইচপি থেকে আমি সেই ফাইলগুলিতে দীর্ঘ পথ ব্যবহার করি Any কোনও সমস্যা হতে পারে এমন কোনও ধারণা? আমি উভয় ক্ষেত্রেই একই ব্যবহারকারীকে ব্যবহার করি
রাফাল

1
@ রাফাল: আমি আপনার প্রথম মন্তব্যটি সঠিক নয়, অন্য কোনও প্রক্রিয়া খুব বেশি স্মৃতি গ্রহণ না করলেও মেমরি সীমাবদ্ধ করা উচিত।
ফ্লিম

1
@ ফ্লিম মাত্র 2 টি প্রক্রিয়া চলছিল যখন আমি এই সমাধানটি পরীক্ষা করছিলাম - অ্যাপাচি এবং প্রক্রিয়া যা সীমাবদ্ধ হওয়া উচিত। যখন কোনও অ্যাপাচি সংযোগ ছিল না বা অ্যাপাচে কেবলমাত্র একটি সংযোগ ছিল, তখন এই সীমিত প্রক্রিয়াটি 100% সিপিইউ নেয়। অ্যাপাচে বেশ কয়েকটি সংযোগ শেষ হয়ে গেলে এটি সীমাবদ্ধ হয়ে যায় (আমি ওয়েব ব্রাউজার থেকে ওয়েবসাইটটিকে অনেক বেশি রি-ফ্রেশ করে এটি করেছি)। সুতরাং এটি অন্য কোন প্রক্রিয়া চলমান ক্ষেত্রে ছিল।
রাফাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.