2012-02-08 17 views
9

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

जब मैं एक Windows Server 2008 R2, 2 * 6 कोर के साथ पर एक ही आवेदन के 2 उदाहरणों चलाने के लिए और 2 एप्लिकेशन द्वारा बनाए गए 2 लॉग तुलना करने की कोशिश, मैं ध्यान दें कि अक्सर पैकेट के समय वही नहीं है

अधिकांश पैकेट एक ही समय (Milis) में 2 एप्लिकेशन द्वारा प्राप्त कर रहे हैं, लेकिन अक्सर वहाँ 2 एप्लिकेशन द्वारा एक ही पैकेट के स्वागत के समय के बीच 1-7ms के बारे में भिन्नता की एक अंतर है।

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

कोई ड्रॉप पैकेट समस्या नहीं देखी गई थी, और बैंडविड्थ समस्या की संभावना नहीं है।

विचार/राय का स्वागत है। धन्यवाद।

+1

AFAIK ओएस इंटरप्ट आवृत्ति 1 प्रति 10ms है, इस प्रकार ओएस उस समय से अधिक समय सटीक की गारंटी नहीं दे सकता है। –

उत्तर

6

डिफ़ॉल्ट रूप से विंडोज टाइमर इंटरप्ट आवृत्ति 100 हर्ट्ज (10 टिक प्रति 1 टिक) है। इसका मतलब है कि ओएस गारंटी नहीं दे सकता कि जावा थ्रेड उच्च परिशुद्धता पर जागृत हो जाएंगे।

यहाँ जावा में समय के बारे में एक प्रमुख James Holmes article से एक अंश है - यह अपने मामले हो सकता है:

विंडोज उपयोगकर्ताओं, विशेष रूप से डुअल कोर या मल्टी-प्रोसेसर सिस्टम पर के लिए (और यह 64 पर सबसे अधिक लगता है एएमडी सिस्टम) यदि आप अपने सिस्टम पर या तो जावा, या अन्य अनुप्रयोगों (गेम, मल्टी-मीडिया प्रेजेंटेशन) में अनियमित समय व्यवहार देखते हैं, तो अपनी boot.ini फ़ाइल में/usepmtimer स्विच जोड़ने का प्रयास करें।

पीएस: विंडोज़ प्रदर्शन से ऑप्टिमाइज़ेशन के क्षेत्र में मैं विश्वसनीय नहीं हूं, विंडोज 2008 एचपीईटी से भी शुरू होता है, लेकिन यह टाइमर इंटरप्ट फ्रीक्वेंसी से कैसे संबंधित है, यह मेरे लिए एक रहस्य है।

0

7ms 6 कोर मशीन के लिए बहुत अच्छा परिणाम है, और यदि कचरा कलेक्टर में प्रवेश होता है तो जावा में बहाव उससे अधिक होगा। यह न भूलें कि जावा रनटाइम के पास भी इसका ओवरहेड है।