मैं एक बड़े प्रयोग के हिस्से के रूप में क्लस्टर पर NetLogo (जावा सिमुलेशन फ्रेमवर्क) सिमुलेशन चलाने की कोशिश कर रहा हूं। मैं (अपेक्षाकृत) सरल सिमुलेशन की प्रतीत होता है कि भारी स्मृति आवश्यकता पर आश्चर्यचकित था। क्लस्टर पर यह "java.lang.OutOfMemoryError: जावा हीप स्पेस" फेंकता है "-Xmx2500M" से कम कुछ भी के लिए अपवाद। एक निष्पादन को चलाने के लिए 5 घंटे लगते हैं। मैंने अपने मैक (आईमैक और मैकबुक प्रो) दोनों पर एक ही प्रयोग चलाया, और उन्होंने "-Xmx1024" के साथ कोई त्रुटि नहीं देकर एक घंटे से भी कम समय में निष्पादित किया। क्लस्टर नौकरियों के लिए "-XX: MaxPermSize = 250M" की आवश्यकता होती है जबकि मेरे मैक पर डिफ़ॉल्ट से ऊपर कोई वृद्धि आवश्यक नहीं होती है। मैं सभी मामलों में सटीक उसी जार का उपयोग करके, वही कोड चलाता हूं, वही इनपुट करता हूं।वही प्रोग्राम, एक ही जेवीएम, लेकिन विभिन्न मशीनों पर काफी अलग मेमोरी आवश्यकताएं और निष्पादन समय - क्यों?
64 बिट JVMs प्रत्येक मामले में उपयोग किया जाता है (और जहाँ तक पता के रूप में मैं इन सुंदर समान हैं):
<on the cluster>
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
<on my macs>
$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-10M3646)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
और मैं (सभी मामलों में ग्राहक JVM चला रहा हूँ शुरू में क्लस्टर पर सर्वर का उपयोग किया गया था, स्विचिंग ग्राहक को कोई फर्क नहीं पड़ता)। मैंने जावा 7 के साथ क्लस्टर पर निष्पादन करने की कोशिश की है, वही विशाल स्मृति और निष्पादन समय के मुद्दे।
मैं पूरी तरह से परेशान हूं, मैंने इसे समझाया नहीं है। क्या इससे पहले कोई भी इस पर आ गया है? किसी भी मदद की बहुत सराहना की!
हो सकता है कि आपको -x: + HeapDumpOnOutOfMemoryError के साथ एक हीप डंप बनाना चाहिए और फिर मैट का उपयोग करना या स्मृति का उपयोग करने के समान दिखाना चाहिए। –
मैं विजुअलVM या आपके किट जैसे वाणिज्यिक मेमोरी प्रोफाइलर का उपयोग करूंगा। –
मुझे लगता है कि आपके पास दो अलग-अलग जेवीएम संस्करण भी हैं। यह नहीं कह रहा कि यह आपका मुद्दा है, लेकिन यह योगदान दे सकता है। – Matt