क्या सिस्टमड के निष्पादन के पेड़ को देखने का एक तरीका है?


63

प्रश्न के तहत मेरा क्या मतलब है: क्या ऑर्डर की गई सूची (जैसे प्रक्रियाओं के लिए pstree करता है) को डंप करने का एक तरीका है यह देखने के लिए कि सिस्टमड ने यूनिट्स के आपूर्ति सेट को कैसे निष्पादित किया, अर्थात निर्भरता के समाधान के बाद पेड़ और निष्पादन के लिए नौकरियों को कतारबद्ध किया गया। ? मुझे पता है कि आप सिस्टमड स्टेट डेटा का विश्लेषण करके इसे कर सकते हैं, लेकिन क्या ऐसे पेड़ को देखने का कोई त्वरित तरीका है? यह विफलता की जांच में बहुत मदद करेगा (जैसे अगर आप देखते हैं कि बूट प्रक्रिया कुछ इकाई पर अटक गई थी तो आप अपनी गहन जांच के लिए अनुमानित स्थान को इंगित कर पाएंगे।


मैंने systemd के लिए विज़ुअलाइज़ेशन टूल बनाया है। आप टूल को github.com/ywiyogo/systemd-visual
Yongkie

जवाबों:


71

systemd-analyzeआपका दोस्त है। उदाहरण के लिए systemd-analyze critical-chainडेमॉन के पेड़ को अवरुद्ध करने वाले आउटपुट। उदाहरण के लिए खान:

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─systemd-fsck@dev-sda6.service @8.472s +696ms
                            └─dev-sda6.device @8.471s

NetworkManager उदाहरण में मूल रूप से संपूर्ण बूटअप रखता है।

यदि आप अधिक विस्तृत दृश्य रखना चाहते हैं, तो आप svg फ़ाइल में संपूर्ण निष्पादन श्रृंखला प्रदान कर सकते हैं। systemd-analyze plot > something.svgआउटपुट श्रृंखला के रूप में पूरे श्रृंखला (120+ मॉड्यूल) को उच्च-रिज़ॉल्यूशन svg फ़ाइल के रूप में प्रगति करता है, जो बताता है कि अवरुद्ध और एक अन्य समस्या है।

अंत में आपके पास systemd-analyze dotटूल है जो डॉट फाइल को आउटपुट करता है जो पूरे पदानुक्रम systemd-analyze dot | dot -Tpng -o stuff.png को आउटपुट करता है : डॉट टूल के साथ आप इसे ps और svg फाइल के रूप में भी आउटपुट कर सकते हैं।

उपरोक्त सभी टूल बिल्ट-इन सिस्टमड-एनालिसिस टूल हैं जो डिफ़ॉल्ट रूप से कम से कम आर्केलिनक्स में सिस्टमड के साथ आते हैं। मुझे लगता है कि कुछ 3 पार्टी प्रोजेक्ट भी हैं जो इससे निपट रहे हैं।


आपके उत्तर के लिए धन्यवाद, हालांकि यह प्रश्नों को संबोधित नहीं करता है और मेरे प्रश्न के कुछ हिस्सों को दोहराता है (मैंने उल्लेख किया है कि मुझे सिस्टम के राज्य डेटा का विश्लेषण करके इसे करने के तरीके के बारे में पता है)। इसलिए सवाल यह है कि सभी निर्भरताएं हल हो जाने के बाद बूट अप अनुक्रम का पेस्ट्री जैसा पेड़ कैसे प्राप्त किया जा सकता है (जैसे पोस्ट-बूट)। क्रिटिकल-चेन लगभग यह है (इसके बावजूद कि यह नीचे का पेड़ है) लेकिन सभी शुरू की गई इकाइयों की सूची नहीं है। प्रश्न में क्या पूछा गया है: एक पेड़ जो हर एक इकाई को सूचीबद्ध करता है जिसे कुछ बिंदु तक निष्पादित किया गया था (जैसे मल्टी-user.tgget को मारना)।
आकाशगंगा

4
systemd-analyze plot > something.svgलक्ष्यों के साथ निष्पादन का पूर्ण तीन है (यह निकटतम है जो आप चाहते हैं)। सिस्टमड-एनालिसिस डॉट निर्भरता का पूर्ण ग्राफ है (यह सबसे सही प्रतिनिधित्व है)। क्या ये वो नहीं हैं जो आप चाहते हैं? प्लॉट में सिर्फ लक्ष्य खोजें और देखें कि उसे क्या चलाने की जरूरत है। समान निर्भरताएं वास्तव में सूचीबद्ध ग्राफ़ हैं, अगर यह कुछ ग्राफ़ विश्लेषण टूलकिट को बहुत आग लगाता है और ग्राफ़ बिंदु का चयन करता है जिसके लिए आप निर्भरता देखना चाहते हैं (डॉट टूल में अधिक सेटिंग्स हैं)। मैन पेज देखें: freedesktop.org/software/systemd/man/systemd-analyze.html --order और समान
IBr

1
मैन पेज से: यह किसी भी इकाई के सभी आश्रितों के नाम पर निर्भर करता है, जिसका नाम "अवही-डेमॉन" से शुरू होता है: $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgयह सभी ज्ञात लक्ष्य इकाइयों के बीच निर्भरता को systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
दर्शाता है

1
आईबीआर, लेकिन यह दुर्भाग्य से पाठ कंसोल में अनुपयोगी है। मैं वास्तव में आपके द्वारा उत्तर दिए गए समय की सराहना करता हूं (और यह सही है यदि आप विश्लेषण करने के लिए कुछ डेटा प्राप्त करना चाहते हैं), लेकिन यह मूल प्रश्न को संबोधित नहीं करता है, इसलिए मैं इसे स्वीकार कर सकता हूं। माफ़ करना।
आकाशगंगा

1
ठीक, कोई समस्या नहीं। मैं खुद कमांड लाइन टूल्स से प्यार करता हूं :)
आईबीआर

13

अभी भी पूरी तरह से आपके सवाल का जवाब नहीं दे रहा है लेकिन --fuzzविकल्प के साथ प्रयास करें

systemd-analyze critical-chain --fuzz 1h

ध्यान रखें कि आप इकाई निर्दिष्ट कर सकते हैं रों उनके देखने के लिए महत्वपूर्ण श्रृंखला है, तो आप तक ही सीमित नहीं रहे हैं multi-user.target

systemd-analyze critical-chain network.target local-fs.target

उम्मीद है की यह मदद करेगा


12

सुनिश्चित नहीं है कि मैं प्रश्न को ठीक से समझता हूं, लेकिन निम्नलिखित आदेशों के साथ ट्री विज़ुअलाइज़ेशन उपलब्ध हैं:

sudo systemctl status

और भी :

sudo systemctl list-dependencies 

उम्मीद है की यह मदद करेगा :)

इसके अलावा, यह सिस्टेक्लिंक सीलिंक फोल्डर्स के पेड़ के निर्माण के लिए अन्य उद्देश्यों के लिए उपयोगी हो सकता है:

tree /etc/systemd/system

यह वास्तव में पुरानी / छोटी इकाइयों का पता लगाने के लिए उपयोगी था जो मेरे सिस्टम स्टार्टअप को धीमा कर रहे थे, उन्हें systemctl disableकमांड का उपयोग करके बाद में अक्षम करने के लिए ।

संपादित करें

कहा कि मैं वास्तव में ओपी से सहमत हूं कि यह बुनियादी कार्यक्षमता कमांड-लाइन टूल के माध्यम से दी जानी चाहिए, न कि एक ग्राफिकल टूल ... यदि आप एक्स शुरू नहीं कर सकते हैं तो क्या होगा? आप अपनी svg फाइल से कैसे निपटते हैं?

दरअसल, एक तरीका है। यदि आप scpकिसी अन्य कंप्यूटर पर अपनी फ़ाइल लाने के लिए (ssh टूल) का उपयोग नहीं कर सकते , तो fbiवास्तव में आपकी मदद कर सकते हैं :)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

मेरे TTYs में काम किया। बस तीर के साथ तस्वीर के अंदर नेविगेट करें। सूची बनाने के लिए, ज़ूमिंग विकल्प हैं fbi -h

फिर से मुझे आशा है कि यह मदद करता है। यह Archlinux और Ubuntu repos में उपलब्ध है।

संपादित करें 2:

fbissh पर काम नहीं करता है। आप इस तरह से एक्स अग्रेषण कर सकते हैं ssh -Y user@server, लेकिन आपको अपने रिमोट सर्वर पर चलने वाले एक्स सर्वर की आवश्यकता है।

यहां सबसे अच्छा दांव उपयोग करना है sshfs। यह नौटिलस के साथ उपयोगकर्ताओं के लिए GREAT में काम करता है। थोड़ा कॉन्फ़िगरेशन करना है, देखें:

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs user@remotemachine.com:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount

प्रश्न सभी सक्रिय इकाइयों के निष्पादन के पेड़ के बारे में है जो निर्भरता के समाधान के बाद सिस्टमड के माध्यम से गए। तो यह उत्तर एक मिस है।
आकाशगंगा

शायद आपका प्रश्न एक सुविधा अनुरोध के लिए अच्छी तरह से फिट है? ज़रूर मदद करेगा। वैसे भी, मैंने आपके प्रश्न को ठोकर खाने के बाद इस उत्तर को पोस्ट किया क्योंकि यह किसी अन्य प्रश्न से मिलता-जुलता था, जिस पर मुझे कुछ जानकारी की आवश्यकता थी, और मुझे लगा कि कुछ बुनियादी छूटों का अभाव था (जैसे कि आपने जिन चीजों की कोशिश की है और जो काम नहीं किया है, वह वास्तव में होगा स्पष्ट करने में मदद की), विशेष रूप से मेरे जैसे लोगों के लिए जो सिस्टम वी इनिट और उनकी आसान rconconf फ़ाइल खो जाने के बाद संघर्ष कर रहे थे। क्षमा करें, मेरा उत्तर ठीक नहीं था। हालांकि एक मूल्य के लायक नहीं है।
जोएल .ओ

आपकी समस्या के समाधान के साथ संपादित किया गया। आशा है कि यह फिर से मदद करता है।
जोएल.ओन

मैं अपने सर्वर पर ssh पर fbi का उपयोग करने में सक्षम नहीं था। लेकिन और sshfsभी बेहतर काम करता है। EDIT 2 देखें
जोएल.ओ.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.