لقد تمت أرشفة هذا المقال ولم تعد Apple تحدثه.

OS X Server: تقييم الأداء

يوضح هذا المقال كيفية استخدام برنامج نصي لبدء تقييم أداء الخادم الذي يعمل بنظام التشغيل Mac OS X Server الإصدار 10.4 أو إصدار أحدث. إن الهدف الأساسي هو تحديد كيفية استخدام الموارد الرئيسية: وحدة المعالجة المركزية وتخزين القرص والشبكات.

استخدام الموارد

يمكنك استخدام البرنامج النصي Perl (المسمى "top_guide.pl") لتقييم استخدام الموارد الرئيسية بمرور الوقت على الخادم. يعمل هذا البرنامج النصي مع الإصدار 10.4 من Mac OS X Server والإصدارات الأحدث.

يقوم البرنامج النصي بتشغيل top -d، ولكنه يستخرج ويلخص استخدام الموارد الرئيسية بمرور الوقت. بدون وسيطات، يبدو إخراج top_guide.pl مشابهًا لهذا:

-------- ----------- ------------ ------------- ------------- ------------- ------------- ------ استخدام وحدة المعالجة المركزية: 300 ثانية القراءة/الثانية: الكتابة/الثانية: الصافي الوارد/الثانية: الصافي الصادر/الثانية: وقت kernel: متوسط مدة خمول نظام المستخدم. عدد ميغابايت عدد حزم ميغابايت حزم ميغابايت ميغابايت وحدة معالجة مركزية% -------- ----- ----- ----- ----- ------ ------ ------ ------ ------ ------ ------ ------ ------ 08:44:36 0.1 0.1 99.8 99.8 0 0.0 0 0.0 11 0.0 0 0.0 0.4 08:44:46 0.1 0.3 99.6 99.8 0 0.0 0 0.1 12 0.0 0 0.0 0.4 08:44:56 0.0 0.2 99.8 99.8 0 0.0 0 0.0 17 0.0 0 0.0 0.4 08:45:06 0.0 0.2 99.8 99.8 0 0.0 0 0.0 6 0.0 0 0.0 0.4 08:45:16 0.0 0.2 99.8 99.8 0 0.0 0 0.0 9 0.0 0 0.0 0.4 08:45:26 8.7 24.6 66.7 98.6 43 0.8 98 0.6 803 1.0 1399 1.1 5.0 08:45:37 5.7 83.6 10.7 95.7 48 0.4 1085 116.9 95366 1053.1 61830 35.4 72.4 08:45:47 11.5 88.5 0.0 92.4 23 0.2 3228 426.9 337955 3843.6 207872 114.0 284.8 08:45:58 4.6 95.4 0.0 89.0 4 0.0 594 596.7 447499 5215.5 266449 140.9 370.0

يمكنك أن ترى المجالات الرئيسية الثلاثة المحددة: وحدة المعالجة المركزية (CPU)، إدخال/إخراج القرص، والشبكات. الأعمدة:

  • الوقت: وقت انتهاء أحدث سطر ملخص. تكون المدة بين العينات 10 ثوانٍ بشكل أساسي.

  • استخدام وحدة المعالجة المركزية: المستخدم: استخدام وحدة المعالجة المركزية في وضع المستخدم. القيمة هي نسبة مئوية من إجمالي موارد وحدة المعالجة المركزية المتاحة على هذا النظام. على سبيل المثال، في النظام المكون من 8 معالجات، 50% وحدة معالجة مركزية للمستخدم تعني أن إجمالي استخدام وحدة المعالجة المركزية لجميع التطبيقات قيد التشغيل يعادل 4 معالجات.

  • استخدام وحدة المعالجة المركزية: النظام: استخدام وحدة المعالجة المركزية في وضع Kernel كنسبة مئوية من إجمالي وحدة المعالجة المركزية المتاحة.

  • الخمول: وحدة المعالجة المركزية الخاملة، كنسبة مئوية من إجمالي الموارد المتاحة.

  • متوسط 300 ثانية: متوسط ممهَّد للنسبة المئوية لوحدة المعالجة المركزية غير المستخدمة على مدار الـ 300 ثانية الماضية. (لاحظ أن هذا يتغير إذا استخدمت الرمز النصي roption- لضبط متوسط الفاصل الزمني؛ يتغير عنوان العمود بشكل مناسب.)

  • القراءة/الثانية - الرقم: عدد عمليات قراءة القرص الفريدة الصادرة خلال فترة العينة.

  • القراءة/الثانية - ميغابايت: إجمالي الميغابايت التي تمت قراءتها من الأقراص أثناء فترة العينة.

  • الكتابة/الثانية - الرقم: عدد عمليات الكتابة الفريدة الصادرة خلال فترة العينة.

  • الكتابة/الثانية - ميغابايت: إجمالي عدد الميغابايت المكتوبة خلال فترة العينة.

  • الصافي الوارد/الثانية - حزم:مجموع الحزم الواردة خلال فترة العينة.

  • الصافي الوارد/الثانية - ميغابت: إجمالي إدخال الشبكة بالميغابايت في الثانية أثناء فترة العينة.

  • الصافي الصادر/الثانية - حزم: إجمالي حزم الشبكة التي تم إرسالها خلال فترة العينة.

  • الصافي الصادر/الثانية - ميغابت: إجمالي إخراج الشبكة بالميغابايت في الثانية أثناء فترة العينة.

تشمل الخيارات الأخرى التي يوفرها البرنامج النصي ما يلي:

  • -h: عرض معلومات الاستخدام الكاملة.

  • -o اسم الملف: ضع نسخة مفصولة بعلامات جدولة من الإخراج في ملف. يعد نموذج الإخراج هذا مناسبًا للاستيراد إلى جدول بيانات أو برامج نصية أخرى لتحليل البيانات. يشتمل السطر الأول على رؤوس الأعمدة للتأكد من أن الإخراج يشمل وصفًا ذاتيًا دائمًا.

  • -d: عرض التاريخ والطابع الزمني. هذا مفيد بشكل خاص لفترة التسجيل على الخادم طويلة المدى حيث يرغب المسؤول في الحصول على سجل تاريخي.

  • -S processNames: مراقبة عمليات حالة واحدة. يكون هذا مفيدًا إذا كانت خدمة معينة لا تحتوي إلا على معرف عملية واحد مثيرة للاهتمام بشكل خاص على الخادم. مثال على ذلك قد يكون خادمًا يُستخدم بشكل أساسي كخادم AFP. في هذه الحالة، استخدم الوسيطات -S AppleFileServer لإضافة عمود منفصل لاستخدام وحدة المعالجة المركزية للمستخدم لعملية AppleFileServer. يمكن إدراج أكثر من عملية واحدة عن طريق فصل أسماء العمليات بفاصلات.

  • -M processNames: مثل -S، باستثناء الاستخدام عندما يستخدم التطبيق عمليات متعددة. مثال على ذلك smbd، والتي لدينا واحدة منها لكل اتصال. في نظام يُستخدم بكثرة لـ Samba، استخدم -M smbd للحصول على عمود يلخص وحدة المعالجة المركزية الخاصة بالمستخدم لجميع أنشطة Samba.

على الرغم من أن التحليل الكامل لأداء الخادم يتجاوز نطاق هذه المقالة، إلا أن إخراج top_guide.pl يوفر ملخصًا لاستخدام وحدة المعالجة المركزية والقرص وموارد الشبكة على النظام. إن مقارنة ذلك مع الأجهزة وحمل النظام تتيح للمسؤول تحديد المنطقة التي يجب التحقيق فيها بمزيد من التفاصيل. نناقش أدناه بعض الأدوات الإضافية التي قد تساعد عند التحقيق في كل مجال.

استخدام وحدة المعالجة المركزية

إذا كان معدل استخدام وحدة المعالجة المركزية مرتفعًا، فإن السبيل الأساسي للتحقيق هو تحسين كفاءة التطبيق. هذا يُعد خارج نطاق هذا المقال؛ ولكن في بعض الأحيان لا يتم استخدام وحدة المعالجة المركزية. تتوفر العديد من الأدوات لمساعدتك في التحقيق في الموقف الذي توجد فيه موارد كافية للشبكة والقرص لتحميل أعلى، ولكن يظل قدر كبير من وحدة المعالجة المركزية خاملاً.

هاتان طريقتان قد يتم استخدام وحدة المعالجة المركزية فيهما بشكل كافٍ:

  • قفل سلسلة التطبيق

  • قفل مورد Kernel

تم تقديمه في نظام التشغيل Mac OS X 10.5 Leopard، يمكن تشغيل الأمر plockstat(1) على تطبيق معين للتحقيق في تنافس قفل pthread. يمكنك تحديد العمليات التي قد تحتوي على تنافس قفل pthread من خلال فحص إخراج top -d للعمليات التي تحتوي على عدد كبير من أحداث تبديل السياق (عمود CSW). فور تحديد العملية التي تريد التحقيق فيها من أجل تنافس قفل pthread، استخدم: # plockstat -C -e 10 -p .

Mutex block Count nsec Lock Caller ------------------------------------------------------------------------------- 8540 29622 0x805eb0 a.out`process_request+0x3d1 8361 28284 0x805eb0 a.out`release_block+0xac R/W reader block Count nsec Lock Caller ------------------------------------------------------------------------------- 1 3014987 0xa781e8 a.out`key_find+0x121 5 78831 0xa3d158 a.out`key_find+0x121 2 120532 0xa3d158 a.out`key_delete+0x137 R/W writer block Count nsec Lock Caller ------------------------------------------------------------------------------- 10 5336318 0xa781e8 a.out`key_replace+0x80 13 3827632 0xa75fe8 a.out`key_replace+0x80 3 3644946 0xa5fde8 a.out`key_create+0x37 6 161055 0xa3d158 a.out`key_replace+0x80 1 785267 0xa37758 a.out`key_create+0x37

يمكنك فحص هذا الإخراج ومراجعة إجمالي كمية nsec المحظورة خلف الأقفال المختلفة. إذا كانت هذه القيمة عالية بالنسبة إلى الإجمالي، فإن وقت التنفيذ يتأثر بالتنافس على القفل. قد تكون هذه المعلومات مفيدة لكاتب التطبيق في عزل أداء التطبيق وتحسينه. في حالة توفر الرموز، سيحتوي حقل المتصل على الاسم الرمزي للدالة التي تم حظرها. وإذا كان العدد الإجمالي للكتل مرتفعًا، أكثر من 250 تقريبًا في الثانية، فسيقل معدل الكفاءة لإعادة الجدولة بين السلاسل. على الرغم من عدم كفاية استنتاج أنه عامل مقيد للأداء، إلا أن المعدلات العالية للكتل تتطلب التحقيق لأنها في معظم الحالات تشير إلى أن التطبيق قد لا يكون فعالاً كما ينبغي.

في بعض الأحيان تكون مشاكل التنافس على الموارد متعلقة بالموارد داخل نظام تشغيل kernel. يدير نظام تشغيل Mac OS X kernel معظم الموارد متعدد السلاسل باستخدام تقنيات mutex بنظام تشغيل kernel وأقفال القارئ والكاتب (reader-writer). يمكن تقييم تنافس تقنية Mutex عبر البرامج النصية dtrace(1M) مثل:

lockstat:::adaptive-block { @often[arg0, stack(5)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

يؤدي هذا إلى طباعة قائمة مرتبة، مع طباعة أكثر الأقفال والمسارات المتنافس عليها أسفل كل كتلة إخراج بعد خمس ثوانٍ من أخذ العينات. عينة الإخراج:

375517140 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`ip_output_list+0xd34 mach_kernel`tcp_setpersist+0x18b mach_kernel`tcp_output+0x17a0 0 375571960 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`vnode_ref+0x32 mach_kernel`fcntl_nocancel+0x4b3 mach_kernel`unix_syscall64+0x26d 0

في هذه الحالة، يقوم البرنامج النصي بالإبلاغ عن حظر تقنية mutex بنظام تشغيل kernel على 375517140 عبر مسار حيث يقوم tcp_output() باستدعاء tcp_setpersist()، والذي يستدعي ip_output_list(). عدد الكتل في الثانية هو 0 في كلا هذين القفلين، لذلك فإن التنافس على القفل ليس مشكلة. لاحظ أن هذا النموذج من البرنامج النصي لا يجمع كل الحالات مقابل قفل واحد. إذا تم تغيير البرنامج النصي إلى:

lockstat:::adaptive-block { @often[arg0] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

قد يتغير الإخراج إلى:

1301055072 9 1417504384 9 353318336 10 359381776 10 1301055088 11 5387344 165

يشير هذا إلى أن القفل الموجود في عنوان kernel 5387344 هو الوحيد الذي لديه تنافس ملموس، وحتى في هذه الحالة لا يزال مستوى التنافس أقل من المستوى الذي يستدعي القلق لأنه أقل من 250.

وأخيرًا، يمكن أن يركز النص على أقفال القارئ والكاتب (reader-writer) من نظام تشغيل kernel عن طريق تغيير البرنامج النصي قليلاً إلى:

lockstat:::rw-block { @often[arg0, stack(4)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); clear(@often); }

بعض الأشياء التي يجب تذكرها حول استخدام البرامج النصية dtrace(1M) lockstat وplockstat(1):

  • جمع إحصائيات القفل له تأثير على الأداء. قد تؤدي هذه الأدوات إلى إبطاء النظام. قم بتشغيلها بعناية، وتذكر أن تأثير الأداء سيضيف تنافسًا غير موجود في التشغيل العادي.

  • لا تتأثر بعض التصميمات بحظر الأقفال فقط. فكر في قفل أحد الموارد المتغيرة ببطء شديد، حيث يمكنك اختيار استخدام قفل لإدارته. قد يُترك القفل في مكانه منتظرًا اكتمال العملية التي تستغرق وقتًا طويلاً.

قد يكون لمثل هذه الحالات فترات تعليق طويلة قد لا تؤدي إلى تقليل الأداء.

استخدام القرص

iopending(1) يعطي مؤشرًا على عمق قوائم انتظار الإدخال/الإخراج، كمدرج تكراري لعمق قائمة الانتظار. على سبيل المثال:

21 مايو 2008 الساعة 10:35:26، التحميل: 0.99، disk_r: 0 كيلوبايت، disk_w: 392 كيلوبايت

القيمة ------------- التوزيع ------------- العد < 0 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 9298 1 | 12 2 | 5 3 | 4 4 | 2 5 | 3 6 | 2 7 | 2 8 | 3 9 | 2 10 | 3 11 | 2 12 | 2 13 | 2 14 | 2 15 | 0

يشير هذا إلى وجود بعض نشاط القرص، ولكنه لا يمثل مصدر قلق نظرًا لأن جميع قوائم انتظار الإدخال/الإخراج تقريبًا لها عمق 0. بالإضافة إلى ذلك، يمكنك استخدام iopending للتركيز على قرص معين أو وحدة تخزين نظام ملفات. على سبيل المثال، للتركيز على /Volumes/MyRAID، استخدم iopending -m MyRAID.

وأخيرًا، يمكنك نسب الإدخال/الإخراج إلى عمليات معينة وتقييم زمن الانتقال باستخدام fs_usage(1). يمكنك معرفة المزيد حول استخدام Shark وfs_usage(1) في مستند اتصال المطور هذا.

استخدام الشبكة

قد تحتوي العديد من الخوادم على واجهات شبكة متعددة وعملاء على مسافات مختلفة عبر الشبكة. قد يكون تحليل الأداء معقدًا. ومع ذلك، في حالات شبكة LAN التي يكون العملاء فيها مرتبطين بشكل مباشر عبر نسيج بسرعة معروفة، ستوفر المقاييس التي تم الإبلاغ عنها بواسطة top_guide.pl وnetstat -i نظرة ثاقبة حول كيفية استخدام السعة بشكل كامل. عند تفسير هذه الأرقام، ضع في اعتبارك هذه الإرشادات:

شبكات جيجابايت - ازدواج كامل، 1500 بايت MTU

الحد الأقصى للمعدلات - الحزم الصغيرة: 1488 ألف حزمة في الثانية 762 ميجابايت في الثانية

الحد الأقصى لمعدل الحزم - حزم 1500 بايت: 81 ألف حزمة في الثانية 987 ميجابايت في الثانية

(Kpps = آلاف الحزم في الثانية)

عند تحليل أداء الشبكة، من المفيد أيضًا مراجعة إخراج netstat -s لمشاكل مثل معدلات إعادة إرسال الحزم الزائدة (التي تتجاوز نطاق هذا المقال).

اعرف المزيد

يتم تقديم المعلومات حول المنتجات التي لم تُصنّعها Apple أو مواقع الويب المستقلة التي لا تخضع للمراقبة أو الاختبار من جانب Apple بدون توصيات أو موافقة. ولا تتحمّل Apple أية مسؤولية فيما يتعلق باختيار مواقع الويب والمنتجات التابعة لجهات خارجية أو أدائها أو استخدامها. ولا تُقدّم Apple أية ضمانات فيما يتعلق بدقة أو موثوقية مواقع الويب التابعة لجهات خارجية. اتصل بالبائع للحصول على المزيد من المعلومات.

تاريخ النشر: