একাধিক ব্যবহারকারী সিস্টেমে, আমি প্রতিটি ব্যবহারকারীর সিপিইউ ব্যবহারের সিপিইউ সময়ের সেকেন্ডে পরিমাপ করতে চাই। এই পরিমাপের উদ্দেশ্যে, আমি ধরে নিয়েছি যে যদি কোনও পিআইডি কোনও ব্যবহারকারীর অন্তর্ভুক্ত থাকে তবে এই ব্যবহারকারী সিপিইউ সময় সৃষ্টি করছে - এটি হ'ল আমি ডিমন এবং কার্নেলটিকে উপেক্ষা করছি।
বর্তমানে আমি প্রতি পাঁচ সেকেন্ডে এটি করছি:
- প্রতিটি ব্যবহারকারী এবং তারা যে পিআইডি চালাচ্ছেন তা পান
ps aux
- প্রতিটি পিআইডি-র জন্য, ইউটিউম, কিউটাইম, স্টাইম এবং সিএসটাইমের
x
যোগফল/proc/[pid]/stat
- গণনা করুন
t = x / interval
(উচ্চ চাপের পরে যখন বিরতি সর্বদা ঠিক 5 সেকেন্ড হয় না)
যদি আমি এটি চালনা করি তবে আমি বোধগম্য মানগুলি পাই। উদাহরণস্বরূপ: এই সিস্টেমে একজন ব্যবহারকারী পাইথন ( while True: pass
) এ ঘুরছিলেন এবং সিস্টেমটি প্রতি সেকেন্ডে প্রায় 750 মিলিসেকেন্ড সিপিইউ সময় দেখায়। যখন সিস্টেমটি কিছুটা স্থির হয়ে গিয়েছিল, তখন এটি 1-সেকেন্ড ইনভার্ভালের জন্য 1600ms রিপোর্ট করেছিল। যা সঠিক সম্পর্কে মনে হয়, তবে আমি অবজ্ঞা করি যে এই মানগুলি ছলচাতুর হতে পারে, বিশেষত প্রদত্ত যে আমি তাদের সত্যই বুঝতে পারি না ।
তাই আমার প্রশ্ন হল এটি:
প্রতি ব্যবহারকারীর ভিত্তিতে সিপিইউ লোড পরিমাপ করার উপযুক্ত এবং সঠিক উপায় কী?
পদ্ধতিটি বরং সঠিক হতে হবে। এই সিস্টেমে অনেক শত শত ব্যবহারকারী থাকতে পারে, সুতরাং এর থেকে শতাংশ আহরণ ps aux
করা যথেষ্ট সঠিক হবে না, বিশেষত স্বল্প-কালীন থ্রেডের জন্য যা অনেকগুলি সফটওয়্যার টুকরো টুকরো টুকরো টানতে পছন্দ করে।
যদিও এটি জটিল হতে পারে, আমি অবশ্যই জানি এটি সম্ভব। এটি আমার সূচনা পয়েন্ট:
কার্নেল একটি প্রসেস তৈরির সময় এবং সিপিইউর সময়কালে যা তার জীবদ্দশায় গ্রাস করে তা ট্র্যাক করে। প্রতিটি ঘড়ির টিক চিহ্ন দেওয়ার পরে, কার্নেল জিফিতে সময় প্রক্রিয়াকরণটি আপডেট করে যা বর্তমান প্রক্রিয়াটি সিস্টেম এবং ব্যবহারকারী মোডে ব্যয় করেছে। - ( লিনাক্স ডকুমেন্টেশন প্রকল্প থেকে )
আমি যে মানটি পরে আছি তা হ'ল সেকেন্ডের পরিমাণ (বা জিফি) যা কোনও ব্যবহারকারী সিপিইউতে ব্যয় করেছে, সিস্টেম লোড বা সিপিইউ ব্যবহারের শতাংশ নয় percentage
প্রক্রিয়াগুলি চলমান থাকা অবস্থায় আমরা সিপিইউ সময় পরিমাপ করা গুরুত্বপূর্ণ। কিছু প্রক্রিয়া কেবল অর্ধেক সেকেন্ড চলবে, কিছু কিছু মাস ধরে চলবে - এবং আমাদের উভয় প্রকারের ধরা দরকার, যাতে আমরা ব্যবহারকারীদের সিপিইউ সময়কে সূক্ষ্ম গ্রানুলারিটির সাথে অ্যাকাউন্ট করতে পারি।
top
ব্যাচ মোড করতে পারেন? top -b -n 1 -u {user} | awk 'NR>7 { sum += $9; } END { print sum; }'
সেই মুহুর্তে {ব্যবহারকারী for এর জন্য বোঝাটি প্রদর্শন করা উচিত।