2010-11-03 13 views
7

मैंने अपने कोड प्रतिक्रिया समय को प्रोफाइल करने के लिए अपाचे बेंच का उपयोग करके कुछ प्रयोग किए हैं, और यह मेरे लिए सही प्रकार का डेटा उत्पन्न नहीं करता है। मुझे उम्मीद है कि यहां अच्छे लोगों के विचार हैं।मेरी कोड की गति प्रोफाइलिंग के लिए अपाचेबेन्च के विकल्प

विशेष रूप से, मैं एक उपकरण है जो

  • नेटवर्क पर HTTP अनुरोध करता है की जरूरत है संभव (कम से कम एक के रूप में के रूप में सही रूप में
  • रिकॉर्ड्स प्रतिक्रिया समय (यह बहुत फैंसी कुछ करने की ज़रूरत नहीं है) कुछ मिलीसेकंड)
  • आगे की प्रक्रिया के बिना एक फाइल करने के लिए प्रतिक्रिया समय डेटा लिखता है (या, मेरे कोड को यह प्रदान करता है अगर एक पुस्तकालय)

मैं के बारे में ab -e पता है, जो डेटा को डेटा प्रिंट करता है। समस्या यह है कि यह केवल मात्रात्मक डेटा प्रिंट करता है, जो उपयोगी है, लेकिन मुझे जो चाहिए वह नहीं। ab -g विकल्प काम करेगा, सिवाय इसके कि यह उप-दूसरे डेटा प्रिंट नहीं करता है, जिसका अर्थ है कि मेरे पास आवश्यक संकल्प नहीं है।

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

मुझे ऐसा कुछ चाहिए जो उच्च प्रदर्शन, दोहराने योग्य और भरोसेमंद है।

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

कम संख्या में उत्तरों और विचारों के कारण यहां एक बक्षीस फेंकना।

+1

मैंने पाइथन और libcurl के संयोजन का उपयोग करके अपने माप लेने के लिए एक कस्टम उपकरण का निर्माण समाप्त हो गया। libcurl http अनुरोध/प्रतिक्रिया प्रक्रिया के प्रत्येक भाग के लिए अच्छा रिज़ॉल्यूशन समय माप प्रदान करता है, जिससे मुझे आवश्यक सटीक माप प्राप्त करने की अनुमति मिलती है। –

उत्तर

1

मैंने इसे दो तरीकों से किया है।

"लोडरुनर" के साथ जो एक अद्भुत लेकिन सुंदर महंगा उत्पाद है (मुझे लगता है कि इन दिनों एचपी लगता है)।

संयोजन perl/php और कर्ल पैकेज के साथ। मैंने सीआरएल एपीआई को PHP से उपयोग करने में थोड़ा आसान पाया। अपने स्वयं के GET और PUT अनुरोधों को रोल करना बहुत आसान है। मैं फ़ायरफ़ॉक्स के साथ कुछ नमूना अनुरोधों के माध्यम से मैन्युअल रूप से चलने की भी सिफारिश करता हूं और LiveHttpHeaders आपको आवश्यक HTTP अनुरोधों के सटीक प्रारूप को कैप्चर करने के लिए जोड़ता है।

+0

लोडरनर सॉफ्टवेयर के एक महान टुकड़े की तरह लगता है। निश्चित रूप से मेरे बजट से बाहर (और ओवरकिल - मैं वास्तव में मुख्य रूप से यहां आंकड़े कर रहा हूं)। मुझे वास्तव में केवल HEAD अनुरोध करने की आवश्यकता है, लेकिन पुस्तकालय के रूप में कर्ल का उपयोग करने का विचार एक अच्छा लगता है। –

+0

क्या आपको पता है कि कर्ल को जीवित सत्रों के लिए समय करने के लिए आश्वस्त किया जा सकता है? –

+0

बस यहां एक फॉलोअप - कर्ल (वास्तव में पाइथन में libcurl) सीधे उन बिंदुओं से संबंधित जानकारी का एक बड़ा धन प्रदान करता है जिन्हें मैं जांचना चाहता था। मुझे लगता है कि अपनी खुद की समस्या के लिए अपने स्वयं के औजारों का निर्माण करना वास्तव में कभी-कभी सही जवाब है। बोनस के रूप में, libcurl किसी भी नेटवर्क कोड से कहीं अधिक कुशल है जो मैं खुद लिख सकता हूं। –

1

JMeter बहुत आसान है। इसमें एक जीयूआई है जिसमें से आप अपने अनुरोध और थ्रेडपूल सेट अप कर सकते हैं और इसे कमांड लाइन से भी चलाया जा सकता है।

+0

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

+0

सटीकता के बारे में - ApacheBench (या जो भी आप भरोसा करते हैं) के साथ एक परीक्षण चलाएं और दूसरा जेएमटर के साथ। यदि आपका सर्वर निरंतर प्रदर्शन-आधारित है, तो आपको दोनों रनों से नजदीकी परिणाम मिलना चाहिए। इस तरह आप यह सुनिश्चित कर सकते हैं कि कोई जीयूआई ओवरहेड है या नहीं। – mindas

+0

@ मिंडस मुझे एक परीक्षण की तुलना में कहीं अधिक सटीकता की आवश्यकता है जैसे कि प्रकट होगा। –

1

यदि आप जावा में कोड कर सकते हैं, तो आप JUnitPerf + HttpUnit के संयोजन को देख सकते हैं।

नकारात्मकता यह है कि आपको स्वयं और चीजें करना होगा। लेकिन इस की कीमत पर आप जीयूआई उपकरणों के साथ तुलना में असीमित लचीलापन और यकीनन अधिक यथातथ्यता मिल जाएगा, एचटीएमएल पार्स, JavaScript निष्पादन, आदि का उल्लेख नहीं

वहाँ भी एक अन्य परियोजना जो एक समान कार्य के लिए ठान लिया जा रहा है Grinder कहा जाता है लेकिन मुझे इसके साथ कोई अनुभव नहीं है।

+0

हाँ ... लेकिन मुझे एचटीएमएल पार्सिंग, जावास्क्रिप्ट इत्यादि की आवश्यकता नहीं है। मुझे बस उस समय की आवश्यकता है जब यह मेरी मशीन छोड़ने के लिए और मेरे लिए एक हेड अनुरोध की शुरुआत करने के लिए अनुरोध करे। JUnitPerf शायद मुझे अपेक्षा से थोड़ा अधिक स्तर है, लेकिन मैं इसे देख लूंगा। –

+0

मैंने द ग्राइंडर पर एक नज़र डाली। ऐसा लगता है कि मैं जो खोज रहा हूं उसके करीब है, लेकिन अभी भी कुछ अक्षमताएं हैं जो मुझे चिंता करती हैं। उदाहरण के लिए, "HTTP क्लाइंट दो पीडीयू के रूप में एक पोस्ट भेजता है ... यह HTTP क्लाइंट में HTTP/1.1 पाइपलाइनिंग के रूढ़िवादी कार्यान्वयन का एक परिणाम है।" –

1

ओपनसोर्स कार्यक्षमता परीक्षण उपकरण का एक अच्छा संदर्भ: http://www.opensourcetesting.org/performance.php

आप विवरण और एक "सबसे लोकप्रिय" सूची

0

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

  • अलग यूआरएल के लिए कॉल के रीयल दुनिया वितरण:

    यह मेरा आवश्यकताओं जो थे संतुष्ट।

  • भार के आधार पर रुझान प्रदर्शन।
  • उसी बॉक्स पर अन्य गहन ओप चलाकर वेब ऐप को प्रभावित नहीं कर रहा है।

मैंने एक शेल स्क्रिप्ट के रूप में नियंत्रक किया था कि फोरच सर्वर ने प्रत्येक यूआरएल पर कॉलिंग कॉलिंग में सभी यूआरएल पर लूप को पृष्ठभूमि में एक प्रक्रिया शुरू की थी। मैंने पर्ल में लॉग प्रोसेसर लिखा क्योंकि मैं उस समय अधिक पर्ल कर रहा था।

1

httperf बहुत शक्तिशाली है।

+0

उन्होंने आवश्यक भाग - टूल का नाम शामिल किया। – mmlac

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