2009-01-29 12 views
8

हमारा निर्माण कष्टप्रद धीमा है। यह एक जावा सिस्टम है जो Ant के साथ बनाया गया है, और मैं विंडोज एक्सपी पर अपना चल रहा हूं। हार्डवेयर के आधार पर, इसे पूरा करने में 5 से 15 मिनट लग सकते हैं।मैं फ़ाइल I/O कैसे प्रोफाइल कर सकता हूं?

मशीन पर समग्र प्रदर्शन मीट्रिक देखने के साथ-साथ निर्माण के समय के साथ हार्डवेयर मतभेदों को सहसंबंधित करने से संकेत मिलता है कि प्रक्रिया I/O बाध्य है। यह भी दिखाता है कि प्रक्रिया लेखन से बहुत अधिक पढ़ाई करती है।

हालांकि, मुझे निर्धारित करने का कोई अच्छा तरीका नहीं मिला है, जो फ़ाइलों को पढ़ा या लिखा जा रहा है, और कितनी बार। मेरा संदेह यह है कि हमारे कई सबप्रोजेक्ट्स और कंपाइलर के बाद के इनवोकेशन के साथ, बिल्ड कई बार उपयोग की जाने वाली लाइब्रेरी को दोबारा पढ़ रहा है।

कुछ प्रोफाइलिंग टूल क्या हैं जो मुझे बताएंगे कि कौन सी फाइलें किस फाइल के साथ कर रही हैं? नि: शुल्क अच्छा है, लेकिन आवश्यक नहीं है। के शीर्ष पर लगभग सभी डिस्क गतिविधि के पढ़ रहा था और पुस्तकालयों की फिर से पढ़ने, "rt.jar" और अन्य पुस्तकालयों में से JDK के प्रतियों के साथ:


Process Monitor, as suggested by Jon Skeet, का उपयोग करते हुए मैं अपने संदेह की पुष्टि करने में सक्षम था सूची। मैं अपने द्वारा उपयोग की जाने वाली सभी पुस्तकालयों को पकड़ने के लिए काफी बड़ी रैम डिस्क नहीं बना सकता, लेकिन रैम डिस्क कट पर "सबसे गर्म" पुस्तकालयों को बढ़ाना लगभग 40% का निर्माण करता है; स्पष्ट रूप से, विंडोज़ फाइल सिस्टम कैशिंग एक अच्छी नौकरी नहीं कर रही है, भले ही मैंने विंडोज़ को इसके लिए अनुकूलित करने के लिए कहा है।

मैंने देखा एक दिलचस्प बात यह है कि JAR फ़ाइल पर विशिष्ट 'पढ़ा' ऑपरेशन केवल कुछ दर्जन बाइट है; आम तौर पर इनमें से दो या तीन होते हैं, इसके बाद फ़ाइल में कई किलोबाइट्स छोड़ते हैं। यह थोक पढ़ने के लिए उपयुक्त नहीं प्रतीत होता है।

मैं फ्लैश ड्राइव पर अपने तीसरे पक्ष के पुस्तकालयों के सभी के साथ और अधिक परीक्षण करने जा रहा हूं, और देखें कि इसका क्या प्रभाव है।

+0

एक त्वरित प्रश्न एरिक्सन, आपने यह कैसे पता लगाया कि ProcessMonitor के साथ कितने बाइट पढ़ रहे हैं? मुझे Windows XP –

+0

के साथ हमारे निर्माण को प्रोफ़ाइल बनाने का प्रयास करने में एक ही समस्या है, उदाहरण के लिए, अभी ऑफसेट: एन बाइट्स, लंबाई: एम बाइट्स, और इसी तरह के बारे में बताएं। –

उत्तर

7

यदि आप केवल विंडोज के लिए इसकी आवश्यकता है, SysInternals Process Monitor आपको जो कुछ भी जानने की आवश्यकता है उसे दिखाना चाहिए। आप प्रक्रिया का चयन कर सकते हैं, फिर प्रत्येक ऑपरेशन को देखते हुए देखें और फ़ाइल ऑपरेशन का सारांश भी प्राप्त करें।

+0

धन्यवाद जॉन। मैंने अतीत में प्रक्रिया एक्सप्लोरर का उपयोग किया है। क्या यह उस उत्पाद का उत्तराधिकारी है, या कुछ पूरी तरह से अलग है? – erickson

+0

प्रक्रिया एक्सप्लोरर कार्य प्रबंधक विकल्प का प्रकार है। प्रक्रिया मॉनीटर आपको प्रत्येक I/O ऑपरेशन दिखाता है जैसे फ़ाइल खोलना, रजिस्ट्री आदि को लिखना ... – lacop

0

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

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

यदि आप यह देखने के लिए एक लिनक्स बिल्ड सर्वर स्थापित करने के इच्छुक नहीं हैं, तो यह कम से कम आपके विंडोज मशीन की हार्ड ड्राइव को डिफ्रैगमेंट करने का प्रयास कर सकता है। यह मेरे काम कंप्यूटर पर सी ++ बनाता है के लिए एक बड़ा अंतर बनाता है। JkDefrag आज़माएं, जो कि विंडोज के साथ आने वाले डीफ्रैगमेंटर से बहुत बेहतर लगता है।

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

+0

जबकि मुझे संदेह नहीं है कि लिनक्स में स्विचिंग प्रदर्शन में सुधार करेगी, यह शायद विंडोज़ – sgibbons

+0

पर प्रोफाइलिंग आईओ के संबंध में किसी प्रश्न का उत्तर नहीं है धन्यवाद rmeador । हमारे बहुत से डेवलपर लिनक्स चलाते हैं, और इससे मदद मिलती है। विंडोज़ की तुलना में इसका फाइल सिस्टम कैश बहुत बेहतर लगता है। कुछ संदेह भी है कि माइक्रोसॉफ्ट ने जानबूझकर गैर-एम $ कोड द्वारा कर्नेल कॉल के प्रदर्शन को झुका दिया है। ;) हालांकि, लिनक्स का निर्माण भी बहुत धीमा है। – erickson

1

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

लेकिन ईमानदारी से, लिनक्स में जाने के बाद, डिस्क विखंडन ऐसा कुछ है जिसे मैं कभी और चिंता नहीं करता।

एक अन्य कारण लिनक्स पर अपने निर्माण, कम से कम एक बार कोशिश करने के लिए है, ताकि आप को देखने के लिए क्या फ़ाइलें अपने निर्माण छू है (खुला पर कॉल के लिए grepped) चला सकते हैं strace है।

+1

प्रोमन/फाइलमोन स्ट्रेस करने के लिए समान (वास्तव में) जानकारी देते हैं। मैं हर खुली, मेटा-डेटा क्वेरी, पढ़ने और ऑपरेशन लिखने में सक्षम था। – erickson

1

एक बूढ़ा लेकिन एक गुडिया: एक रैम डिस्क बनाएं और वहां से अपनी फ़ाइलों को संकलित करें।

+0

आईओ प्रोफाइलिंग के साथ मेरा लक्ष्य यह पता लगाने के लिए है कि रैम डिस्क पर होने से सबसे ज्यादा फायदा होगा। – erickson

0

असल में FileMon ProcMon से अधिक प्रत्यक्ष उपकरण है।

  • प्रवाह
  • विलंबता (बाइट प्रति सेकंड की पढ़ें/लिखें की गति) (कितना पढ़ने के लिए कतार में प्रतीक्षा में: सामान्य तौर पर, जब डिस्क मैं के लिए प्रदर्शन विश्लेषण के चलने/हे, निम्नलिखित दो पर विचार/लिखने)

एक बार जब आप ऊपर के मामले में आपके सिस्टम के प्रदर्शन का मूल्यांकन, यह टोंटी की पहचान करने और सुधारात्मक कार्रवाई आसान है: तेजी से डिस्क प्राप्त करने या अपने कोड (जो भी सस्ता बाहर काम करता है) बदल जाते हैं।

+2

असल में फ़ाइलमॉन आपके द्वारा उत्तर दिए जाने तक ProcMon का बहिष्कृत सबसेट संस्करण रहा था। -1। – 0xC0000022L

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