دليل أداة strace لتتبع نداءات النظام في لينكس

نظرة عامة

يمثل فهم القنوات التي تتواصل بها البرمجيات مع نواة النظام الركيزة الأساسية لتشخيص المشكلات المعقدة في بيئات لينكس. نناقش في هذا الدليل العملي كيفية توظيف أداة الفحص القوية strace لاعتراض نداءات النظام (System Calls)، مع استعراض آليات عملها التحتية وأفضل الممارسات الميدانية لحل الأعطال البرمجية المستعصية.

تثبيت strace والبدء في مراقبة نداءات النظام الأساسية

نستهل التطبيق العملي بتحديث مستودعات الحزم المحلية ومن ثم تثبيت أداة strace على خادم أوبونتو:

تثبيت أداة strace وتحديث الحزم

سنحتاج إلى ملف بيانات بسيط لإجراء اختبارات القراءة والكتابة، لذا نقوم بإنشائه داخل المسار المؤقت بتمرير الأمر echo 'Linux strace test content' > /tmp/testfile.txt:

إنشاء ملف نصي مخصص للاختبار

تقوم فكرة strace على التمركز كوسيط يرصد كافة الإشارات ونداءات النواة المتبادلة بين التطبيق ونواة لينكس فور حدوثها.
فعند تشغيل أداة العرض cat تحت مجهر strace، تظهر الشاشة تسلسلاً دقيقاً لفتح الملف (openat)، واسترجاع محتواه (read)، وتوجيهه إلى مخرجات الشاشة (write)، وصولاً إلى إغلاق مقبض الملف (close).
⚙️ [أهم الخيارات التشغيلية]

-c : يعرض ملخصاً إحصائياً تراكمياً يوضح عدد الاستدعاءات، ونسبة استهلاك الوقت، والأخطاء الناتجة لكل نداء نظام.
-e : يُطبّق معيار تصفية لاقتصار المراقبة على أحداث أو استدعاءات معينة وتجاهل ما عداها.
-o : يُحوّل تدفق السجلات الناتجة ليتم حفظها داخل ملف محدد بدلاً من إغراق شاشة الطرفية.
-p : يربط أداة التتبع بعملية برمجية قيد التشغيل الفعلي عبر رقم المعرف الخاص بها (PID).
-T : يوضح الزمن المستغرق لإتمام كل استدعاء نظام في نهاية كل سطر مطبوع.
-tt : يُرفق طابعاً زمنياً فائق الدقة بالمايكروثانية مع كل حدث مسجل.
-s : يحدد الحد الأقصى لطول السلاسل النصية المعروضة والمدخلة في معاملات الاستدعاء بالبايت.

تتبع نداءات النظام لأمر cat

تصفية استدعاءات نظام محددة عبر الخيار -e trace

يُتيح الأمر strace -e trace=openat,read,write,close cat /tmp/testfile.txt عزل الأحداث الهامة فقط وتجاهل الضجيج الصادر عن مئات الاستدعاءات الهامشية التي يُطلقها cat أثناء تهيئته.
من خلال تجميع النداءات الحيوية مفصولة بفواصل، يسهل التركيز مباشرة على حركة الإدخال والإخراج وفحص سلوك الملف المستهدف دون تشتت.

تصفية نداءات الإدخال والإخراج المحددة

كما يوفر الأمر strace -e trace=file ls -l /tmp/testfile.txt إمكانية تطبيق مصنف المراقبة الشامل file الذي يلتقط تلقائياً كل ما يرتبط بمسارات الملفات وأذوناتها.
تُغني هذه الفئة الجاهزة عن سرد أسماء الاستدعاءات الفردية، وتمنح رؤية متكاملة لعمليات التحقق من مسارات التخزين وبيانات التعريف الوصفية بنقرة واحدة.

تتبع فئة عمليات الملفات باستخدام فلتر file

تحليل الأداء ورصد الاختناقات باستخدام الإحصائيات (-c)

عند تشغيل الأمر strace -c ls -la /usr/bin > /dev/null، يتم إجراء مسح لمحتويات الدليل المزدحم /usr/bin مع تجميع إحصائيات دقيقة للأداء وحجب المخرجات العادية في /dev/null.
بمجرد اكتمال تنفيذ البرنامج، يظهر جدول تفصيلي يكشف النسب المئوية للوقت المصروف، والزمن الكلي لكل وظيفة، ومعدل تكرار الاستدعاءات، وأي إخفاقات واجهت النواة.

تحليل استهلاك الموارد وحجم استدعاءات النظام

وبالمثل، يُستخدم الأمر strace -c grep -rn 'root' /etc/passwd > /dev/null لاختبار سلوك عمليات المسح النصي المكثفة والتعرف على مسببات التأخير.
يساعد توجيه النتائج نحو العدم والاطلاع على الإحصائيات المجردة في تحديد ما إذا كان عبء المعالجة ناتجاً عن كثرة عمليات القراءة المتتابعة أو فتح الملفات المتكرر، مما يكشف عن مواطن الاختناق البرمجي بسرعة.

رصد الأداء وحصر زمن العمليات لأمر البحث grep

تتبع العمليات النشطة وتصدير السجلات عبر الخيارين -p و -o

لبدء محاكاة عملية معالجة مستمرة تعمل في الخلفية دون تدخل مباشر، ننفذ الأمر sleep 100 &:

تشغيل عملية مؤقتة في الخلفية

نقوم بالتقاط معرف العملية الأخيرة (PID) وحفظه داخل متغير بيئي في الصدفة عبر الأمر TARGET_PID=$!:

حفظ معرف العملية داخل متغير البيئة

يعمل الأمر strace -p $TARGET_PID -o /tmp/strace_output.log -t & على إلحاق آلية التتبع بالعملية القائمة بالفعل وكتابة مجريات نشاطها في الخلفية مع توثيق التوقيت بالساعة والدقيقة والثانية داخل ملف السجل.
تتيح هذه الطريقة مراقبة الخدمات الحية وعمليات الـ Daemons في بيئات الإنتاج بأمان تام دون تعطيل سير العمل أو احتكار جلسة المستخدم الحالية.

ربط أداة المراقبة بعملية قائمة وتصدير السجل

نمنح المنظومة مهلة وجيزة قدرها ثانية واحدة عبر الأمر sleep 1 لضمان إتمام عملية الارتباط بالبرنامج المستهدف وتفعيل تسجيل التدفق:

إيقاف مؤقت للتأكد من بدء التتبع

بعد انتهاء التجربة، نقوم بإنهاء المهمة التجريبية العاملة في الخلفية وتنظيف بيئة الاختبار باستخدام الأمر kill $TARGET_PID:

إنهاء العملية المستهدفة من الخلفية

نستعرض الأسطر الأولى من ملف التسجيل المحفوظ بواسطة الأمر head -n 20 /tmp/strace_output.log:
يبرز السجل بوضوح اللحظة التي استقبلت فيها العملية إشارة الإنهاء SIGTERM وكيف تجاوبت النواة لإغلاق العملية وتصفيتها وفق البروتوكول القياسي.

قراءة محتويات ملف السجل وتحليل إشارات التوقف

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