আমি কীভাবে ব্যবহারকারীর মাধ্যমে সিপিইউ ব্যবহার নিরীক্ষণ করতে পারি?


15

আমাকে দুটি সার্ভারের (উবুন্টু এবং সেন্টোস) ব্যবহারকারীদের সিপিইউ ব্যবহারের উপর নজর রাখতে হবে। উদাহরণ স্বরূপ:

user1     5%
user2    10%
...

এর মতো কোনও সরঞ্জাম রয়েছে topবা htopএটি করতে পারে?


আপনার রিয়েল টাইমে প্রদর্শিত শীর্ষস্থান প্রয়োজন? অন্যথায়, আপনি বিবেচনা করতে top -u userএবং ফলাফলটি কোনও ফাইলে পুনর্নির্দেশ করতে পারেন এবং তারপরে অন্য একজন ব্যবহারকারীকে পর্যবেক্ষণ করতে পারেন। তারপরে একটি নির্দিষ্ট বিরতিতে আপনার ব্যবহারকারীর জন্য ব্যবহারের জন্য একটি মনিটর রাখতে হবে।
লরেন্ট সি 12

আপনি কখন কোন সময়ের উপর মনিটর বলতে? একবারে নাকি একটানা?
slm

আমি রিয়েলটাইম শীর্ষের মতো ব্যবহারকারীদের নিরীক্ষণ করতে সক্ষম হবেন আশা করি।
রোজডম

উত্তর:


17

বর্তমানে লগ ইন করা প্রতিটি ব্যবহারকারীর জন্য মোট সিপিইউ প্রিন্ট করার জন্য এখানে একটি স্ক্রিপ্ট দেওয়া আছে , শোপিরউজারসিপিইউ.শ :

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(who | awk '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

এবং এখানে সমস্ত উপলব্ধ ব্যবহারকারীদের সিপিইউ ব্যবহার (তবে শূন্যের সিপিইউ ব্যবহারের সাথে বাদ দেওয়া), শোআলপ্লেরউজারসিপিইউ.শ এর সামান্য পরিবর্তিত সংস্করণ রয়েছে :

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

প্রথম কলামটি ব্যবহারকারীর নাম, দ্বিতীয় কলামটি সংহত সিপিইউ ব্যবহার এবং তৃতীয় কলামটি সিপিইউ কোরের সংখ্যা অনুসারে নর্মাল সিপিইউ ব্যবহার করে।

প্রতিটি ব্যবহারকারীর জন্য মোট মেমরির ব্যবহার দেখানোর জন্য সম্পর্কিত স্ক্রিপ্টও রয়েছে : showPerUserMem.sh

লাইভ-মনিটরিংয়ের জন্য watchকমান্ডের মাধ্যমে সময়-সময় এই স্ক্রিপ্টগুলি সম্পাদন করুন ।

সিপিইউ ব্যবহার অনুসারে বাছাইয়ের জন্য আউটপুটটি পাইপ করুন sort -k2 -nr


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

আমি মনে করি না যে সমস্ত বড় হাতের অক্ষর অবশ্যই পরিবেশের ভেরিয়েবল হতে হবে। তবে আমি সম্মত হই যে ইতিমধ্যে বিদ্যমান ভেরিয়েবলগুলি ওভাররাইট করা খুব সুন্দর শৈলী নয়।
স্কাই

1
রাহুল যে কারণে উল্লেখ করেছেন, তার জন্য ব্যাশ-এ UPPERCASE ব্যবহার করা সাধারণত একটি খারাপ ধারণা। এটি তখন আরও খারাপ হয় যখন আপনি একটি পরিবর্তনশীল নাম ব্যবহার করেন যা ইতিমধ্যে পরিবেশগত হিসাবে উপস্থিত রয়েছে (এন ব্যাশ, $USERইতিমধ্যে আপনার ব্যবহারকারীর নাম, তাই id -nuআপনি যে কমান্ডটি ব্যবহার করছেন তা ঠিক একই রকম ut এটি পরিবর্তন করতে আমি আপনার পোস্ট সম্পাদনা করেছি
টার্ডন

শেল স্ক্রিপ্টগুলিতে বড় হাতের অক্ষরগুলি ব্যবহার করা অবশ্যই কোনও খারাপ ধারণা নয় কারণ আমার /etc/init.d/ডিরেক্টরিতে দশটির মধ্যে নয়টি স্ক্রিপ্টও এটি করছে are বিপরীতে বিদ্যমান পরিবেশের ভেরিয়েবলগুলি ওভাররাইটিং এড়ানো উচিত।
স্কাই 15

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