2009-05-27 14 views
8

का उपयोग करने के लिए जावा सेट करना मेरे पास एक ऐसा एप्लिकेशन है जिसमें सीपीयू की एक निश्चित संख्या के लिए लाइसेंस है और मैं चेक करने से पहले जावा में 1 से 1 तक चलने वाले सीपीयू की संख्या निर्धारित करने में सक्षम होना चाहता हूं। मैं सोलारिस चला रहा हूं और pbind पर देखा है, लेकिन सोचा कि अगर मैंने एप्लिकेशन शुरू किया और फिर पबिंद का इस्तेमाल किया तो यह लाइसेंस की जांच कर लेगा इससे पहले कि जावा इस्तेमाल कर सकने वाले CPU की संख्या निर्धारित कर सके।एक सीपीयू

क्या किसी को सोलार्स पर सीपीयू की एक निश्चित संख्या के साथ एप्लिकेशन शुरू करने का तरीका पता है?

उत्तर

-1

गुगलिंग ओवर, मैंने पाया कि आप सही हैं, pbind प्रोसेसर को प्रक्रियाओं को बांधता है।

अधिक जानकारी और उदाहरण है: http://docs.sun.com/app/docs/doc/816-5166/pbind-1m?a=view

+0

हाँ, धन्यवाद, लेकिन दुर्भाग्यवश जो वास्तव में मेरे प्रश्न का उत्तर नहीं देती है। –

3

यह एक समाधान नहीं है, लेकिन Solaris 10 का उपयोग कर आप एक ही उपलब्ध सीपीयू के साथ एक क्षेत्र की स्थापना की और इसके बाद उस क्षेत्र के अंदर आवेदन चला सकते हैं। एक पूर्ण उदाहरण here

Runtime runtime = Runtime.getRuntime(); 
int nrOfProcessors = runtime.availableProcessors(); 

:

आप पूर्ण आवेदन चलने के बिना परीक्षण करना चाहते हैं, Java के इस बिट सबसे अधिक संभावना है कि वे क्या CPU के की संख्या प्राप्त करने का उपयोग कर रहे है।

+0

मुझे यह जानने में काफी दिलचस्पी होगी कि क्या Pbind का उपयोग उपलब्ध प्रोसेसर्स() के परिणाम को बदलता है। –

+0

यह करना चाहिए, टास्कसेट उपलब्ध प्रोसेसर्स() के परिणामों को बदलता है। –

1

यह एक पूरा समाधान नहीं है, लेकिन एक में विकसित होने के लिए पर्याप्त हो सकता है। निश्चित रूप से एक बिंदु है जिस पर java प्रक्रिया मौजूद है (और इस प्रकार pbind द्वारा नियंत्रित किया जा सकता है) और जिस बिंदु पर यह प्रोसेसर जांच करने के लिए अभी तक कोड नहीं चला है। यदि आप अपने काम को लॉन्च करने तक एप्लिकेशन के लॉन्च को रोक सकते हैं, तो यह ठीक होना चाहिए (मान लीजिए कि पबिंद विचार सीपीयू-चेकिंग पॉइंट व्यू से काम करेगा)।

ऐसा करने का एक तरीका है जो निश्चित रूप से उचित स्थान पर JVM को रोकना चाहिए, रिमोट डीबगर्स के लिए सॉकेट अटैचमेंट और निलंबन मोड से शुरू करना है।

-Xdebug -Xrunjdwp: आप java मंगलाचरण के लिए निम्न तर्क पार कर लेते हैं परिवहन = dt_socket, पता = 8000, को निलंबित = y, सर्वर = y

तो JVM शुरू करने के बाद रोक देगा जावा प्रक्रिया लेकिन मुख्य श्रेणी को निष्पादित करने से पहले, जब तक डीबगर/एजेंट पोर्ट 8000 से जुड़ा हुआ न हो।

तो शायद इन पैरामीटर के साथ पृष्ठभूमि में प्रोग्राम शुरू करने के लिए एक रैपर स्क्रिप्ट का उपयोग करना संभव होगा, एक के लिए सो जाओ दूसरा या तो, जावा प्रक्रिया के लिए प्रोसेसर की संख्या को सेट करने के लिए पबिंद का उपयोग करें, फिर ए ttach और बंदरगाह 8000 के लिए कुछ एजेंट को अलग करें (जो निष्पादन के साथ आगे बढ़ने के लिए जावा प्राप्त करने के लिए पर्याप्त होगा)।

इस विचार में त्रुटियों या संभावित हिचकिचाहट यह होगा कि डीबग मोड में चलना आपके ऐप के प्रदर्शन को प्रभावित करेगा (यह सामान्य रूप से बड़ा प्रभाव नहीं प्रतीत होता है), चाहे आप किसी प्रकार का नो-ऑप नियंत्रित कर सकें कमांड लाइन से जेडीडब्लूपी एजेंट, और क्या आप मशीन पर बंदरगाह खोलने में सक्षम हैं। ऐसा कुछ नहीं है जिसे मैंने पहले स्वचालित करने की कोशिश की है (हालांकि मैंने जावा प्रक्रिया के nice नेस को ढीला करने से पहले मैन्युअल तरीके से कुछ समान रूप से उपयोग किया है), इसलिए अन्य समस्याएं जिन्हें मैंने अनदेखा कर दिया है।

1

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

% pbind -b 0 $$ 
% java ... 
संबंधित मुद्दे