2008-09-25 17 views
15

मैं एक वेब ऐप पर काम कर रहा हूं जो पर्ल का उपयोग करता है और मुझे ऐप के तेज़ हिस्सों को देखने की आवश्यकता है।मैं एक पर्ल वेब ऐप कैसे प्रोफाइल करूं?

मैंने सोचा कि मैं भाग रहा जांच करने के लिए इच्छा के लिए विशेष रूप से कॉल की रूपरेखा शुरू कर दूं। मैंने पर्ल कोड प्रोफाइलिंग पर कुछ खोज की है, लेकिन दुर्भाग्य से मुझे जो कुछ मिलता है वह कहता है कि मुझे कमांड लाइन से -d:DProf myapp के साथ अपना पर्ल कोड चलाया जाना चाहिए। यह मेरे लिए काफी काम नहीं करता है क्योंकि मेरा कोड वेब ऐप के भीतर है। मुझे अपाचे के साथ काम करने के लिए प्रोफाइलिंग प्राप्त करने का एक तरीका मिला, लेकिन दुर्भाग्यवश, प्रोफाइलर से वापस आने वाले "सबसे अधिक इस्तेमाल किए गए" मॉड्यूल सभी सीपीएएन मॉड्यूल - कक्षा :: xyz, आदि इत्यादि थे। बहुत उपयोगी नहीं।

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

उत्तर

18

आप Devel::NYTProf की कोशिश की (ज्यादा बेहतर Devel :: DProf से) है, जो अपाचे के तहत काम कर सकते हैं है? आप किस वेबसर्वर का उपयोग कर रहे हैं? क्या यह एक वेनिला सीजीआई स्क्रिप्ट है, एक mod_perl बात है, या कुछ और?

आप डेटाबेस सामान कर रहे हैं, DBI::Profile कर सकते हैं बेंचमार्क आपके प्रश्नों, जो काम एक अन्य कार्यक्रम में क्या हो रहा है।

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

+0

हाँ, मैंने कोशिश की है, और यह सब बदल गया सभी सीपीएन मॉड्यूल था।मैं वास्तव में इन विशिष्ट तरीकों को लक्षित करना चाहता हूं और देख सकता हूं कि वे अधिकतर समय कहां खर्च कर रहे हैं। – Leanan

+1

कौन सा सीपीएएन मॉड्यूल सूचीबद्ध करता है? यदि आप बहुत सारे डेटाबेस कॉल कर रहे हैं तो यह काफी संभव है कि आपकी सूची के शीर्ष पर डीबीआई और डीबीडी मॉड्यूल होंगे। ऐसा इसलिए नहीं है क्योंकि पर्ल बहुत अधिक काम कर रहा है, लेकिन क्योंकि आपके डीबी प्रश्न धीमे हैं। इसके बजाए प्रोफाइलिंग शुरू करें। – mpeters

+1

मुझे किसी को 'कोड व्यवस्थित करने' के लिए सलाह देने का बिंदु नहीं दिखता है यदि आप उन्हें यह नहीं समझते हैं कि यह कैसे करें, या यहां तक ​​कि बस यह कैसे पता करें कि यह कैसे करें। – jwg

1

आप कोर मॉड्यूल का उपयोग के साथ कर सकते हैं: hireswallclock विकल्प यदि आप वास्तव में आंतरिक रूप से चीजें करना चाहते हैं। लेकिन वास्तव में, आप कमांड लाइन से प्रोफाइल करने में सक्षम होना चाहिए। आपको सीजीआई अनुरोध के कुछ हिस्सों का अनुकरण करने के लिए टेस्ट स्क्रिप्ट लिखना पड़ सकता है, लेकिन प्रदर्शन बाधाओं की तलाश करते समय डीपीआरओफ़ अत्यंत उपयोगी हो सकता है।

विशेष रूप से, जहां अपने कोड CPAN मॉड्यूल कोड बुला रहा है के लिए देखो। आप इसे लूप में आवश्यक से कहीं अधिक कर सकते हैं, इसलिए जब सीपीएएन मॉड्यूल में समय बिताया जाता है, तो आपके कोड को दोबारा सुधारने से समस्या ठीक हो सकती है।

10

आप CGI.pm का उपयोग कर रहे हैं, तो आप तर्क अपने पर्ल स्क्रिप्ट के कमांड लाइन पर पारित कर सकते हैं और CGI.pm उन्हें व्याख्या करेगा रूप में यदि वे HTTP पर पैरामीटर के रूप में पारित किए गए। तो यदि आप डिबगिंग कर रहे हैं, उदा।

http://example.com/scripts/example.pl?action=browse&search=grommet&restrict=blah

तो तुम सिर्फ कमांड लाइन, उदा से कह सकते हैं

perl -d:NYTProf documentroot/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

1

मुझे पता है यह इस बिंदु पर इसके लिए देर से एक सा है, लेकिन इस कारण यह CGI::Application उपयोग करने के लिए अच्छा है या किसी अन्य वास्तुकला, जिसमें वेब अनुप्रयोग बस वेब का एक बहुत ही संक्षिप्त सा है में से एक है -फैसिंग कोड जो वास्तविक कार्यक्षमता को लागू करने के लिए आपके द्वारा लिखे गए मॉड्यूल के समूह का उपयोग करता है। इस तरह के डिज़ाइन का उपयोग करना वेब पहलू के बारे में चिंता किए बिना, व्यक्तिगत रूप से या सामूहिक रूप से कमांड लाइन से किसी भी मॉड्यूल को प्रोफ़ाइल (या बस परीक्षण) करने के लिए बहुत सरल बनाता है।

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