2012-11-13 5 views
5

जब मैं अपना प्रोग्राम "शीर्ष" रिपोर्ट चलाता हूं कि मैं "sy" (कर्नेल स्पेस) में 30 +% खर्च कर रहा हूं।मैं कैसे बता सकता हूं कि मेरा पर्ल कोड कर्नेल स्पेस में इतना समय क्यों लगा रहा है (शीर्ष पर "sy")?

मैं इसके बारे में और जानकारी कैसे प्राप्त कर सकता हूं? क्या सिस्टम कॉल इस समय तक सभी खा रहा है, आदि

धन्यवाद प्रतिसाददाताओं:

  • यह Devel की तरह लगता है :: NYTProf पूरे कार्यक्रम की रूपरेखा के लिए अच्छा है - लेकिन मैं मुसीबत उस पर स्थापित करने की थी अमेज़ॅन लिनक्स

  • यदि मैं सिर्फ सिस्टम कॉल का स्नैपशॉट चाहता हूं तो स्ट्रेस बहुत अच्छा प्रतीत होता है।

अपडेटेडः मैंने ऐसा किया और सिस्टम कॉल में बिताए गए समय वास्तव में नगण्य हैं। मेरा सबसे अच्छा अनुमान है कि धागे कुछ संसाधनों पर इंतजार कर रहे हैं। जवाब अभी भी नीचे अच्छे हैं लेकिन कोई सलाह मददगार होगी।

+0

हमें क्या अपने कार्यक्रम है के बारे में कुछ * कर बता *? – ysth

+0

जेनेटिक सहसंबंध – OneSolitaryNoob

उत्तर

10

आप strace(1) - trace system calls and signals का उपयोग कर सकते हैं। -c ध्वज syscall द्वारा समूहीकृत कुल परिणाम उत्पन्न करेगा। -p NUM संलग्न करने के लिए चलने की प्रक्रिया का एक पीआईडी ​​है। (उदाहरण के लिए) एक क्रॉलर निगरानी इस तरह दिखता है:

[email protected]:~/ScrapMe$ strace -c -p 32184                                                
Process 32184 attached - interrupt to quit 
^CProcess 32184 detached 
% time  seconds usecs/call  calls errors syscall 
------ ----------- ----------- --------- --------- ---------------- 
48.00 0.000024   0  128   sendto 
26.00 0.000013   0  76   write 
26.00 0.000013   0  2652  2652 stat 
    0.00 0.000000   0  24   close 
    0.00 0.000000   0  226   poll 
    0.00 0.000000   0  78   rt_sigaction 
    0.00 0.000000   0  26   rt_sigprocmask 
    0.00 0.000000   0  52   alarm 
    0.00 0.000000   0  26   socket 
    0.00 0.000000   0  26  26 connect 
    0.00 0.000000   0  75   recvfrom 
    0.00 0.000000   0  26   getsockname 
    0.00 0.000000   0  26   getpeername 
    0.00 0.000000   0  26   getsockopt 
    0.00 0.000000   0  310   fcntl 
    0.00 0.000000   0  13   epoll_wait 
    0.00 0.000000   0  26   epoll_ctl 
------ ----------- ----------- --------- --------- ---------------- 
100.00 0.000050     3816  2678 total 
+0

ग्रेट धन्यवाद, यह कोशिश कर रहा है। – OneSolitaryNoob

5

मुझे लगता है कि आपको अपनी स्क्रिप्ट को प्रोफ़ाइल करना चाहिए - और मैं इस मामले के लिए Devel::NYTProf मॉड्यूल का उपयोग करने की दृढ़ता से अनुशंसा करता हूं।

यह चलाने में काफी आसान है (perl -d:NYTProf yourscript.pl से कहीं अधिक आसान क्या हो सकता है?), और प्रोफाइलर के काम के परिणाम आसानी से एक पूर्ण उड़ा रिपोर्ट में परिवर्तित हो सकते हैं - या तो इस पैकेज में शामिल उपयोगिताओं के साथ - या अधिक के साथ 'ग्राफिकी' टूल KCachegrind

+1

प्रोग्राम चलाने के दौरान गतिशील रूप से ऐसा करने का कोई तरीका है? – OneSolitaryNoob

संबंधित मुद्दे

 संबंधित मुद्दे