क्या लिनक्स बूट होने में अधिक समय लग रहा है? systemd-analyze की मदद से 3 मिनट में बॉटलनेक सर्विस खोजें और ऑप्टिमाइज़ करें

अवलोकन

यदि आपके लिनक्स सर्वर या पीसी को बूट होने में सामान्य से अधिक समय लग रहा है, तो इसके कारण की पहचान करके अनावश्यक देरी को कम करना आवश्यक है। systemd-analyze कमांड का उपयोग करके आप कुल बूट समय मापने से लेकर बॉटलनेक पैदा करने वाली सिस्टम सर्विसेज को ट्रैक करने और यूनिट फ़ाइलों को सत्यापित करने तक का कार्य आसानी से कर सकते हैं। इस लेख में, हम उन प्रमुख विश्लेषण कमांड्स और प्रदर्शन अनुकूलन (performance optimization) तकनीकों पर चर्चा करेंगे जिन्हें कार्यक्षेत्र में तुरंत लागू किया जा सकता है।

1. बूट समय की जाँच और चरणबद्ध देरी का मापन (time & blame)

systemd-analyze कमांड बूट प्रक्रिया के दौरान लगे कुल समय के साथ-साथ कर्नेल और उपयोगकर्ता स्थान (userspace) के इनिशियलाइज़ेशन समय को मापता है और प्रदर्शित करता है।
निष्पादन परिणाम को देखकर यह पुष्टि की जा सकती है कि सिस्टम को बूट होकर GUI वातावरण यानी graphical.target तक पहुँचने में कुल 315ms का समय लगा।
⚙️ [मुख्य विकल्प]

time : बूट के दौरान कर्नेल और उपयोगकर्ता स्थान में लगे कुल समय को आउटपुट करता है (डिफ़ॉल्ट व्यवहार)।
blame : इनिशियलाइज़ेशन प्रक्रिया के दौरान बूट में देरी उत्पन्न करने वाली सर्विसेज की सूची को उनके द्वारा लिए गए समय के अवरोही क्रम (descending order) में दिखाता है।
critical-chain : बूट में देरी का कारण बनने वाले क्रिटिकल पाथ (समय-संवेदनशील श्रृंखला) के सर्विस डिपेंडेंसी ट्री को प्रदर्शित करता है।
plot : पूरी बूट प्रक्रिया के दौरान प्रत्येक सर्विस के निष्पादन समयरेखा (timeline) को एक 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)

बूट विश्लेषण रिपोर्ट फ़ाइलों को व्यवस्थित रूप से संग्रहीत और प्रबंधित करने के लिए, एक समर्पित निर्देशिका (directory) बनाने हेतु mkdir -p ~/systemd-reports कमांड चलाएँ।

mkdir -p ~/systemd-reports

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg कमांड पूरी बूट प्रक्रिया के दौरान निष्पादित प्रत्येक सर्विस के प्रारंभ समय और निष्पादन अवधि को विज़ुअल टाइमलाइन प्रारूप में SVG ग्राफ़िक फ़ाइल के रूप में जनरेट करके सहेजता है।
ग्राफ़िकल चार्ट की मदद से आप सर्विसेज के समानांतर निष्पादन प्रवाह (parallel execution flow) और देरी वाले अंतरालों को सहजता से देख सकते हैं, जिन्हें केवल टेक्स्ट लॉग से समझना कठिन होता है।

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 कमांड का उपयोग कैसे किया जाता है।
अनावश्यक सेवाओं को हटाकर अपने लिनक्स सिस्टम के लिए एक अधिक सहज और तेज़ बूट वातावरण तैयार करें।