स्ट्रेस स्विच का प्रकार जो मैं उपयोग करता हूं वह यह है।
strace -ffttT -p pid -o /tmp/strace.out
इसका एक उदाहरण जैसा दिखेगा,
19:35:57.485493 mprotect(0x7f35e7472000, 16384, PROT_READ) = 0 <0.000037>
19:35:57.485599 mprotect(0x7f35e7692000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485697 mprotect(0x7f35e78b7000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485782 munmap(0x7f35e7896000, 129588) = 0 <0.000037>
19:35:57.485875 set_tid_address(0x7f35e78949d0) = 10730 <0.000029>
19:35:57.485960 set_robust_list(0x7f35e78949e0, 0x18) = 0 <0.000024>
19:35:57.486048 futex(0x7fff8f58628c, FUTEX_WAKE_PRIVATE, 1) = 0 <0.000025>
19:35:57.486131 futex(0x7fff8f58628c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f35e7894700) = -1 EAGAIN (Resource temporarily unavailable) <0.000024>
आप सिस्टम कॉल के दायीं ओर स्थित समय अंतर को दिखाते हैं कि एक सिस्टम कॉल से दूसरे में जाने में कितना समय लगा है।
यह आपको सिस्टम कॉल के बीच के समय के अंतर को पकड़ लेगा। इसलिए, जब आप देखते हैं कि अगले सिस्टम कॉल के साथ सिस्टम कॉल में कुछ सेकंड का अंतर है, तो यह कुछ शोर कर रहा है।
एक और तरीका यह है कि इसे गॉर्क के साथ coredump किया जाए। हालांकि, कि gdb के माध्यम से नेविगेट करने के लिए थोड़ा अनुभव की आवश्यकता होती है।
लेकिन, यदि धागा एक कर्नेल थ्रेड है, तो आप इसे स्ट्रेस या कॉर्डपंप नहीं कर सकते। उस मामले में, हमें कुछ अधिक जटिल का उपयोग करना होगा। आरएचईएल 5 कर्नेल में, हम अफीम का उपयोग करते हैं। RHEL6 में, हम perf का उपयोग करते हैं। मैं ऑप्रोफाइल पर परफेक्ट पसंद करता हूं। सिस्टम कॉल को दिखाने वाले प्रारूप जैसे ग्राफ के साथ परफेक्ट डेटा एकत्र किया जा सकता है जहां अधिकतम प्रतिशत सीपीयू का उपयोग किया जा रहा है।
एक परीक्षण पूर्ण के साथ, मैं इसे देखता हूं।
38.06% swapper [kernel.kallsyms] [k] mwait_idle_with_hints ↑
29.45% swapper [kernel.kallsyms] [k] read_hpet
4.90% swapper [kernel.kallsyms] [k] acpi_os_read_port ▒
4.74% swapper [kernel.kallsyms] [k] hpet_next_event
यह कर्नेल फ़ंक्शन को दिखाता है जहां 38% CPU समय बिताया जा रहा है। अब, हम फ़ंक्शन की जांच कर सकते हैं और देख सकते हैं कि यह क्या कर रहा है और इसे क्या करना चाहिए।
कुछ उदाहरणों के साथ, यह उतना कठिन नहीं है।