2009-01-11 9 views
6

हे स्टैक ओवरफ्लो समुदाय!जावा में बहुत कम CPU उपयोग

मुझे कोई समस्या है जहां अत्यधिक शामिल एल्गोरिदमिक प्रोग्राम TOO LITTLE cpu उपयोग का उपयोग कर रहा है: कहीं 3 और 4% के बीच। परिणाम लौटने में बहुत समय लग रहा है, और मुझे विश्वास है कि यह काफी मेहनत नहीं कर रहा है।

क्या आप में से कोई भी प्रतिभाशाली कोई विचार है कि ऐसा क्यों होगा - अगर कुछ भी मैं 100% उपयोग की अपेक्षा करता हूं। एक अतिरिक्त विवरण यह है कि कार्यक्रम एक sqlite3 डेटाबेस में आवेषण करता है, और इस प्रकार हाँ, मुझे लगता है कि sqlite3jdbc लाइब्रेरी के माध्यम से बहुत सारे जेएनआई कॉल हैं। (ध्यान दें कि मैं इन आवेषणों को पहले से तैयार किए गए बैच के साथ रोकना चाहता था, लेकिन इससे बड़ी मेमोरी समस्याएं आईं - इसमें बहुत सारे डेटा हैं)।

अग्रिम धन्यवाद

अद्यतन: फिक्स्ड। हाँ, मैं सिर्फ एक डूफस था, लेकिन मुझे उम्मीद नहीं थी कि स्क्लाइट एक नया लेनदेन शुरू करेगा और इतना अधिक ओवरहेड करेगा।

अब मैं एक प्रीपेर्डस्टेटमेंट और कतार से पहले 32768 प्रविष्टियों का उपयोग करता हूं - मुझे पर्याप्त पर्याप्त संख्या की तरह लग रहा था।

उत्तर

1

स्पष्ट रूप से डेटाबेस कॉल देरी कर रहे हैं। क्या यह छोटे बैच बनाने और परीक्षण करने का विकल्प नहीं है अगर यह मदद करता है ?? हो सकता है कि आप एल्गोरिदम को समानांतर कर सकें और कतार को कहीं नतीजे ले सकें और एक और थ्रेड उस कतार को साफ कर सके?

संपादित करें:

वहाँ भी कुछ अन्य समस्या क्षेत्र हैं:

  • डाटाबेस optimalization (मॉडल)
  • डाटाबेस सर्वर विन्यास
  • डिस्क गति

सभी इन कारकों चाहिए

खाते में लिया जाना चाहिए 210
1

यदि आप बहुत अधिक डेटा लिख ​​रहे हैं, तो ऐसा लगता है कि आप डिस्क बाध्य हो सकते हैं। मशीन पर अपने डिस्क आईओ आंकड़ों पर नज़र डालें, और यदि यह वास्तव में बाधा है, तो या तो बेहतर आईओओ के साथ हार्डवेयर ढूंढें, या कम लिखने के तरीके को समझें।

4

मैं कभी भी सिफारिश नहीं करता कि कोई व्यक्ति जेएनआई के साथ जेडीबीसी ड्राइवर का उपयोग करेगा यदि कोई प्रकार IV, 100% जावा संस्करण उपलब्ध है। Google को this एक मिला।

इसके साथ, मैं बिना किसी जानकारी के कुछ भी बता सकता हूं। क्या ऐप और डेटाबेस एक ही हार्डवेयर पर चल रहे हैं?

आईएनएसईआरटी के बारे में इतना "गहन" क्या है?

मैं अनुमान लगाने और अनुमान लगाने के बजाए कुछ वास्तविक डेटा प्राप्त करने की सिफारिश करता हूं। विश्वास आधारित कंप्यूटिंग मेरे लिए कभी काम नहीं करती है।

0

डिस्क आपके ऐप को धीमा कर रही है। INSERTS डिस्क का उपयोग करता है, डिस्क धीमी है, और ओएस को लिखने के संचालन के समाप्त होने की प्रतीक्षा करनी है।

क्या आप 2 धागे का उपयोग नहीं कर सकते हैं, एक एल्गोरिदम के लिए, और दूसरा आवेषण के लिए? यदि आप केवल इन्सर्ट करते हैं, तो आप एक टेक्स्ट फ़ाइल में भी लिख सकते हैं, और बाद में उन्हें निष्पादित कर सकते हैं

+0

मल्टीथ्रेडेड संचार अपडेट को क्यूइंग करने और उन्हें उसी थ्रेड में फ़्लश करने से धीमा है, और बगफ्री पाने के लिए और भी जटिल है प्रोग्रामर के लिए जो "जन्म थ्रेड-सुरक्षित" नहीं हैं। – Blaisorblade

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

  • कोई संबंधित समस्या नहीं^_^