Linux & Open Source

إتقان أداء نظام لينكس: دليل شامل للمراقبة والتحسين

في مجال إدارة لينكس وتطوير البرمجيات، يعد فهم أداء النظام ليس رفاهية، بل ضرورة. سواء كنت تدير خادم ويب عالي الحركة، أو تستكشف أخطاء قاعدة بيانات بطيئة، أو تحسن بنية الخدمات المصغرة، فإن القدرة على تشخيص الاختناقات بسرعة يمكن أن تكون الفارق بين تجربة مستخدم سلسة وانقطاع كارثي. يغوص هذا الدليل بعمق في الركائز الأساسية لأداء النظام: وحدة المعالجة المركزية (CPU)، والذاكرة، وإدخال/إخراج القرص (Disk I/O)، وتحليل الشبكة، مما يزودك بالأدوات والتقنيات للحفاظ على الكفاءة القصوى.

المعيار الذهبي: nmon ومقاييس النظام

قبل نشر وكلاء مراقبة معقدة، من الضروري إتقان الأدوات المدمجة التي توفر رؤى في الوقت الفعلي. يُعد nmon (مراقب نيجيل) على الأرجح أقوى أداة في هذه الفئة وأقلها تقديرًا للقيمة. فهو يوفر نظرة شاملة على صحة نظامك في شاشة واحدة سهلة القراءة. لتسجيل خط أساس لأداء نظامك، قم بتشغيل الأمر التالي:
nmon -s 5 -c 12 -f -o baseline_result.nmon
يقوم هذا الأمر بأخذ عينات من البيانات كل 5 ثوانٍ لمدة 12 تكرارًا، ويحفظ الإخراج بتنسيق يمكن تصوره باستخدام أداة nmonanalyser. يتيح لك هذا النهج ربط الارتفاعات في استخدام الموارد بالأحداث التطبيقية المحددة.

تحليل وحدة المعالجة المركزية: ما وراء متوسط الحمل

الاعتماد فقط على متوسط الحمل (load average) قد يكون مضللاً، خاصة على الأنظمة التي تحتوي على العديد من نوى وحدة المعالجة المركزية. يجب أن تميز بين عبء العمل الفعلي والعمليات التي تنتظر إدخال/إخراج البيانات. استخدم vmstat 1 لمراقبة تبديلات السياق وأطوال قوائم التشغيل. إذا كانت الأعمدة si (تبديل الدخول) و so (تبديل الخروج) غير صفرية، فإن نظامك يعاني من الإفراط في التبديل (thrashing) بسبب ضغط الذاكرة، مما يؤثر بشدة على كفاءة وحدة المعالجة المركزية. لقياس أداء وحدة المعالجة المركزية بشكل محدد، تُعد top أو htop ممتازة لتحديد أكبر المستهلكين، ولكن للتحليل العميق للعمليات المحددة، فكر في استخدام perf أو systemtap لتحليل الاختناقات على مستوى النواة.

إدارة الذاكرة: التبديل والتخزين المؤقت

في لينكس، الذاكرة الحرة هي ذاكرة مهدرة. تقوم النواة بتخزين صفحات القرص بشكل عدواني في الذاكرة العشوائية (RAM) لتسريع عمليات إدخال/إخراج البيانات. لا تقلق بشأن انخفاض الذاكرة المتاحة إذا كانت عمود buff/cache مرتفعًا. ومع ذلك، عندما يزداد ضغط الذاكرة، قد يقوم قاتل الذاكرة (OOM Killer) بإنهاء العمليات. راقب استخدام الذاكرة باستخدام free -m أو smem. إذا لاحظت استخدامًا مرتفعًا للتبديل (swap)، فاستكشف العمليات المسؤولة باستخدام ps aux --sort=-rss | head -n 10. لتحسين أداء الذاكرة، فكر في تعديل معلمة vm.swappiness في ملف /etc/sysctl.conf. تعيينها إلى قيمة أقل (مثل 10) يثني النواة عن تبديل الذاكرة غير المسمى، مما يحافظ على المزيد من البيانات في الذاكرة العشوائية الفيزيائية حيث يكون الوصول إليها أسرع.

إدخال/إخراج القرص: الاختناق الصامت

غالبًا ما تكون زمن استجابة القرص هو السبب الرئيسي لإبطاء التطبيقات. أدوات مثل iostat و iotop لا غنى عنها هنا.
iostat -x 1 5
ابحث عن نسبة استخدام عالية (%util) أو طول قائمة انتظار متوسط مرتفع (avgqu-sz). إذا كانت نسبة %util قريبة من 100٪، فإن قرصك مشبع. بالإضافة إلى ذلك، تحقق من وقت الخدمة المتوسط (await). إذا كانت هذه القيمة مرتفعة، فهذا يشير إلى أن طلبات إدخال/إخراج الفردية تستغرق وقتًا طويلاً للاكتمال، مما يشير إما إلى عطل في الأجهزة أو تجزئة مفرطة.

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

يمكن أن تكون مشكلات الشبكة خفية ولكنها مؤثرة. استخدم netstat أو الأمر الحديث ss لفحص الاتصالات النشطة وحالات المنافذ (sockets).
ss -s
ابحث عن أرقام غير طبيعية للمنافذ في حالة TCP وهي TIME_WAIT أو CLOSE_WAIT. يمكن تشخيص زمن الاستجابة المرتفع باستخدام ping لأوقات الذهاب والإياب الأساسية أو mtr (My Traceroute) لتحديد مكان حدوث فقدان الحزم أو ارتفاعات في زمن الاستجابة عبر مسار الشبكة. لتحليل على مستوى الحزم، يسمح لك tcpdump أو tshark بفحص الحزم الفردية، مما يساعد في تحديد البيانات المعيبة أو عمليات إعادة الإرسال.

المعايير واستراتيجيات التحسين

لكي تقيس التحسينات، تحتاج إلى معايير موثوقة. لوحدة المعالجة المركزية، استخدم sysbench أو unixbench. لإدخال/إخراج القرص، يُعد fio هو المعيار الصناعي، حيث يوفر تحكمًا دقيقًا في أحجام الكتل، وأعمق قوائم الانتظار، وأنماط إدخال/إخراج البيانات. لا يقتصر التحسين على مجرد تعديل معلمات النواة؛ بل يتعلق غالبًا بالتغييرات المعمارية. تأكد من أن تطبيقك يستخدم ربط الاتصالات (connection pooling) لتقليل عبء مصافحة TCP، واستخدم محركات الأقراص الثابتة الحالة الصلبة (SSDs) أو محركات NVMe لأعباء العمل عالية عمليات الإدخال/الإخراج في الثانية (IOPS)، وفكر في تخزين البيانات التي يتم الوصول إليها غالبًا في الذاكرة باستخدام Redis أو Memcached لتخفيف العبء عن استعلامات قاعدة البيانات.

الخاتمة

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