هل إقلاع لينكس بطيء؟ اكتشف خدمات عنق الزجاجة وحسّنها في 3 دقائق باستخدام systemd-analyze

نظرة عامة

إذا كان وقت إقلاع خادم لينكس أو جهاز الكمبيوتر يستغرق وقتًا أطول من المعتاد، فيجب تحديد السبب وتقليل حالات التأخير غير الضرورية. باستخدام الأمر systemd-analyze، يمكنك بسهولة قياس إجمالي وقت الإقلاع، وتتبع خدمات النظام المسببة لعنق الزجاجة، والتحقق من صحة ملفات الوحدات (Unit Files). يتناول هذا المقال أوامر التحليل الأساسية وتقنيات تحسين الأداء التي يمكن تطبيقها فورًا في البيئات العملية.

1. التحقق من وقت الإقلاع وقياس التأخير حسب المراحل (time & blame)

يقيس الأمر systemd-analyze ويعرض الوقت الإجمالي المستغرق أثناء عملية الإقلاع، بالإضافة إلى وقت تهيئة النواة (Kernel) ومساحة المستخدم (userspace).
عند الاطلاع على نتيجة التنفيذ، يمكن التأكد من أن النظام استغرق إجمالاً 315ms للإقلاع والوصول إلى بيئة الواجهة الرسومية graphical.target.
⚙️ [الخيارات الرئيسية]

time : يعرض إجمالي الوقت المستهلك في النواة ومساحة المستخدم أثناء الإقلاع (السلوك الافتراضي).
blame : يعرض قائمة بالخدمات التي تسببت في تأخير الإقلاع أثناء عملية التهيئة، مرتبة تنازليًا حسب الوقت المستغرق.
critical-chain : يعرض شجرة تبعيات الخدمات للمسار الحرج (السلسلة الزمنية الحرجة) الذي تسبب في تأخير الإقلاع.
plot : يُخرج مخططًا زمنيًا مرئيًا لتنفيذ كل خدمة طوال عملية الإقلاع كملف رسومي بصيغة SVG.
dot : ينشئ علاقات التبعية بين الخدمات بصيغة Graphviz dot.

systemd-analyze

يقوم الأمر systemd-analyze blame | head -n 10 بفرز وعرض أعلى 10 خدمات استغرقت أطول وقت في التهيئة أثناء الإقلاع بترتيب تنازلي.
تُظهر نتيجة التنفيذ أن systemd-resolved.service (بواقع 68ms) و ldconfig.service (بواقع 67ms) قد استهلكتا أطول وقت أثناء عملية التهيئة الأولية للإقلاع.

systemd-analyze blame | head -n 10

2. تتبع المسار الحرج لتأخير الإقلاع (critical-chain)

يعرض الأمر systemd-analyze critical-chain شجرة التبعيات (المسار الحرج) للخدمات التي أثرت بشكل مباشر على اكتمال إقلاع النظام.
في المخرجات، يشير الرمز @ إلى الوقت الذي تم فيه تفعيل الوحدة أو بدؤها، بينما يشير الرمز + إلى الوقت المستغرق في تنفيذ تلك الوحدة نفسها.
بالنظر إلى شجرة النتائج، يتبين أنه حتى الوصول إلى graphical.target (بواقع 315ms)، ارتبطت خدمات مثل systemd-resolved.service (بواقع 68ms) و systemd-journald.service (بواقع 39ms) بالتسلسل، مما يشكل مسار عنق الزجاجة الأساسي المتسبب في تأخير إجمالي عملية الإقلاع.

systemd-analyze critical-chain

يقوم الأمر systemd-analyze critical-chain networking.service بتحديد خدمة معينة (هنا networking.service) وتتبع السلسلة الحرجة المؤدية إلى بدء تشغيل هذه الخدمة فقط بشكل انتقائي.
يُعد هذا الخيار مفيدًا للغاية عندما تريد عزل وتحليل تبعيات عنق الزجاجة لخدمة شبكة أو خدمة خلفية معينة، بدلاً من فحص مسار النظام بأكمله.

systemd-analyze critical-chain networking.service

3. إنشاء تقرير SVG مرئي للمخطط الزمني للإقلاع (plot)

لتخزين ملفات تقارير تحليل الإقلاع وإدارتها بشكل منظم، قم بتشغيل الأمر mkdir -p ~/systemd-reports لإنشاء مجلد مخصص.

mkdir -p ~/systemd-reports

يقوم الأمر systemd-analyze plot > ~/systemd-reports/boot-analysis.svg بإنشاء وحفظ ملف رسومي بصيغة SVG يعرض نقطة البداية والوقت المستغرق لكل خدمة تم تنفيذها طوال عملية الإقلاع في شكل مخطط زمني مرئي.
يتيح لك المخطط الرسومي التحقق بسهولة وبشكل بديهي من مسارات التنفيذ المتوازي وفترات التأخير بين الخدمات، وهو ما يصعب استيعابه من خلال السجلات النصية وحدها.

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg

يتحقق الأمر ls -lh ~/systemd-reports/boot-analysis.svg من وجود ملف تقرير SVG الذي تم إنشاؤه ويعرض تفاصيله مثل حجم الملف (59KB).
يمكن فتح ملف SVG الناتج عبر متصفح ويب أو عارض صور لتحليل مخطط الإقلاع الزمني المفصل بصريًا.

ls -lh ~/systemd-reports/boot-analysis.svg

4. التحقق من أخطاء إعدادات وحدات الخدمات وحالتها الأمنية (verify & security)

يتحقق الأمر sudo systemd-analyze verify /lib/systemd/system/ssh.service مسبقًا من وجود أي أخطاء نحوية أو إعدادات مفقودة في ملف الوحدة المحدد.
عدم ظهور أي رسائل في مخرجات التنفيذ يعني أن ملف وحدة الخدمة خالٍ من العيوب النحوية أو أخطاء التكوين.

sudo systemd-analyze verify /lib/systemd/system/ssh.service

يقوم الأمر systemd-analyze security ssh.service بتشخيص إعدادات العزل الأمني ومستوى التعرض للتهديدات (Security Exposure) لوحدة الخدمة المحددة.
من خلال نتائج التنفيذ، يمكنك فحص حالة تطبيق عناصر الأمان الرئيسية ومستوى نقاط التعرض للمخاطر بالتفصيل، مثل التشغيل بصلاحيات الجذر (User=)، والتحكم في الوصول إلى الأجهزة (PrivateDevices=)، ومنع تصعيد الصلاحيات (NoNewPrivileges=).

systemd-analyze security ssh.service

استعرضنا حتى الآن بإيجاز كيفية تحديد خدمات عنق الزجاجة المسببة لتأخير الإقلاع وتحسينها باستخدام الأمر systemd-analyze.
جرّب تنظيم الخدمات غير الضرورية لتوفير بيئة إقلاع أسرع وأكثر سلاسة لنظام لينكس.