الحصول على استخدام وحدة المعالجة المركزية في البرنامج النصي شل؟

StackOverflow https://stackoverflow.com/questions/50312

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أركض بعض JMeter اختبارات مقابل عملية Java لتحديد مدى استجابة تطبيق الويب تحت التحميل (أكثر من 500 مستخدم).سيعطي JMeter وقت الاستجابة لكل طلب ويب، وقد قمت بكتابة برنامج نصي لتنفيذ الأمر ping على Tomcat Manager كل X ثانية مما سيعطيني الحجم الحالي لكومة JVM.

أرغب في جمع الإحصائيات على الخادم الخاص بنسبة % من وحدة المعالجة المركزية التي يستخدمها Tomcat.حاولت القيام بذلك في برنامج نصي شل باستخدام ps مثله:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...تشغيل الأمر كل X ثانية وإلحاق النتائج بملف نصي.(لمن يتساءل pmem = % استخدام الذاكرة و nlwp هو عدد المواضيع)

ومع ذلك، فقد وجدت أن هذا يعطي تعريفًا مختلفًا لـ "% من استخدام وحدة المعالجة المركزية" عما أريد - وفقًا لصفحات الدليل الخاصة بـ ps، pcpu يعرف ب:

استخدام وحدة المعالجة المركزية للعملية بتنسيق "##.#".إنه وقت وحدة المعالجة المركزية المستخدم مقسومًا على الوقت الذي تم فيه تشغيل العملية (نسبة cputime/realtime)، ويتم التعبير عنه كنسبة مئوية.

بعبارة أخرى، pcpu يعطيني نسبة استخدام وحدة المعالجة المركزية لعملية حياة من العملية.

نظرًا لأنني أرغب في أخذ عينة كل X ثانية، فأنا أرغب في جمع استخدام وحدة المعالجة المركزية للعملية في الوقت الحالي فقط - على غرار ما top سوف تعطيني (استخدام وحدة المعالجة المركزية للعملية منذ التحديث الأخير).

كيف يمكنني جمع هذا من داخل برنامج Shell النصي؟

هل كانت مفيدة؟

المحلول

يستخدم top -b (والمفاتيح الأخرى إذا كنت تريد مخرجات مختلفة).سيتم تفريغها فقط في stdout بدلاً من القفز إلى نافذة الشتائم.

نصائح أخرى

الأداة الأكثر فائدة التي وجدتها لمراقبة الخادم أثناء إجراء اختبار مثل JMeter عليه هي com.dstat.فهو لا يوفر لك مجموعة من الإحصائيات من الخادم فحسب، بل يُخرجها إلى ملف CSV لتسهيل استيرادها إلى جدول بيانات ويتيح لك توسيع الأداة بوحدات مكتوبة بلغة Python.

تحميل المستخدم: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//'تحميل النظام: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//'الحمل الخامل: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

كل نتيجة هي رقم عشري مستدير.

من أعلى رأسي، سأستخدم طريقة عرض نظام الملفات /proc لحالة النظام - انظر إلى رجل 5 بروك لرؤية تنسيق الإدخال لـ /proc/PID/stat، الذي يحتوي على معلومات استخدام وحدة المعالجة المركزية الإجمالية، واستخدم /proc/stat للحصول على معلومات النظام العامة.للحصول على استخدام "الوقت الحالي"، ربما تقصد حقًا "استخدام وحدة المعالجة المركزية في آخر N ثانية"؛خذ عينتين على مسافة قصيرة من بعضهما البعض لمعرفة المعدل الحالي لاستهلاك وحدة المعالجة المركزية.يمكنك بعد ذلك تحويل هذه القيم إلى شيء مفيد.على الرغم من ذلك، ربما تكون هذه مهمة Perl/Ruby/Python أكثر من كونها نصًا برمجيًا خالصًا.

قد تتمكن من الحصول على البيانات التقريبية التي تبحث عنها باستخدام /proc/PID/status، والذي يوفر متوسط ​​السكون لهذه العملية.على الرغم من البيانات الخشنة جدا.

استخدم أيضًا 1 كعدد تكرار، لذلك ستحصل على اللقطة الحالية دون انتظار الحصول على لقطة أخرى في وقت تأخير $.

top -b -n 1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top