2013-03-29 5 views
6

में रोकता है मैं वर्तमान में एक आवेदन चला रहा हूं जिसके लिए अधिकतम 16 जीबी आकार का ढेर आकार की आवश्यकता है।लंबे जीसी आवेदन

वर्तमान में मैं कचरा संग्रह को संभालने के लिए निम्नलिखित झंडे का उपयोग करता हूं।

-XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=50, -XX\:+DisableExplicitGC, -XX\:+PrintGCDateStamps, -XX\:+PrintGCDetails, -Xloggc\:/home/user/logs/gc.log 

हालांकि, मैंने देखा है कि कुछ कचरा संग्रह के दौरान, कुछ सेकंड के लिए आवेदन ताले और फिर किया जाता है पर है - यह पूरी तरह से अस्वीकार्य है कि यह एक खेल सर्वर के रूप में।

मेरे कचरा संग्रहण लॉग से एक एक्सर्ट here पाया जा सकता है।

इन लंबी विरामों को कम करने के लिए मुझे क्या बदलना चाहिए, इस बारे में कोई सलाह बहुत सराहना की जाएगी।

+4

मेरा मानना ​​है कि इस कारण कई लोगों को वास्तविक समय खेल के लिए जावा से अधिक C++ पसंद करते हैं में से एक है । लेकिन इसके लिए * मेरा * शब्द न लें ... – Mysticial

+0

क्या आप कुछ विशिष्ट लाइनें प्रदान कर सकते हैं जिनमें लंबे जीसी पॉज़ थे? पाठकों को – noahlz

+0

लाइनों के लिए लॉग फ़ाइल के माध्यम से शिकार करने की अपेक्षा करने के बजाय मैं 1 जीबी से अधिक के लिए हीप मेमोरी का उपयोग करना पसंद करता हूं। बंद ढेर मेमोरी के लिए कोड करना अधिक कठिन है लेकिन जीसी विराम के समय पर इसका बहुत कम प्रभाव पड़ता है। –

उत्तर

4

इन लंबी विरामों को कम करने के लिए मुझे क्या बदलना चाहिए, इस बारे में कोई सलाह बहुत सराहना की जाएगी।

संभावना है कि सीएमएस जीसी आपके सिस्टम द्वारा उत्पन्न कचरे की मात्रा के साथ नहीं रह सकता है। लेकिन जीसी को जो काम करना है वह वास्तव में है जो आपके सिस्टम को बनाए रखने वाले गैर-कचरे की मात्रा से संबंधित है।

तो ...

  • प्रयास आपके आवेदन की वास्तविक स्मृति उपयोग को कम करने के लिए; जैसे इतनी सारी चीज़ें कैश नहीं करके, या अपने "दुनिया" के आकार को कम करके।
  • उस दर को कम करने का प्रयास करें जिस पर आपका एप्लिकेशन कचरा उत्पन्न करता है।
  • अधिक कोर वाले मशीन पर अपग्रेड करें ताकि आवश्यक होने पर समांतर जीसी थ्रेड चलाने के लिए और अधिक कोर उपलब्ध हों।

Mysticial करने के लिए:

हाँ मसा में, यह बेहतर हो सकता है C++ में सर्वर को लागू करने। हालांकि, हम "खेल" के बारे में कुछ नहीं जानते हैं। यदि इसमें जटिल विषम डेटा संरचनाओं के साथ एक जटिल दुनिया मॉडल शामिल है, तो इसे C++ में कार्यान्वित करना का अर्थ यह हो सकता है कि आप "जीसी विराम" समस्या को उस समस्या के साथ प्रतिस्थापित करते हैं जो सर्वर द्वारा प्रबंधित होने वाली समस्याओं के कारण हर समय क्रैश होता है इसकी डेटा संरचनाएं।

+0

मेरा मतलब जावा को बाश करने का नहीं था। सी ++ और जावा अलग-अलग चीजों के लिए सिर्फ अलग-अलग टूल हैं। – Mysticial

+0

यदि सर्वर चल रहा है तो गेम 'Minecraft' है यदि यह बिल्कुल मदद करता है। – Gontroller

+3

आह ... तो मूल रूप से, आपका प्रश्न Minecraft को ट्यून करने के बारे में है। वास्तव में एक प्रोग्रामिंग समस्या बिल्कुल नहीं है। मुझे लगता है कि Minecraft प्रारूपों पर आप इसके लिए बेहतर जवाब प्राप्त करेंगे। –

0

जावा का आप किस संस्करण का उपयोग कर रहे हैं? http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html कक्षा में आवृत्ति चर के उपयोग को कम करने के लिए बेहतर प्रयास करें। उदाहरण के लिए वैरिएबल की तुलना में स्थानीय चर पर प्रदर्शन करना बेहतर होगा। यह प्रदर्शन को प्राप्त करने में मदद करता है और सिंक्रनाइज़ेशन समस्या से सुरक्षित है। कार्यक्रम से बाहर होने से पहले ऑपरेशन के अंत में यदि आप आवृत्ति चर का उपयोग कर रहे हैं और आवश्यक होने पर फिर से सेट करें तो हमेशा उपयोग किए गए चर को रीसेट करें। यह प्रदर्शन को बढ़ाने में और मदद करता है। जावा के संस्करण के अलावा एक अच्छी कचरा संग्रह नीति लागू की गई है। यदि यह खाली हो तो नए संस्करण में जाना बेहतर होगा। आप विजुअल वीएम के माध्यम से कचरा कलेक्टर विराम समय की निगरानी भी कर सकते हैं और जब आप अधिक कचरा संग्रह कर रहे हैं तो आप अधिक विचार प्राप्त कर सकते हैं।

1

मैं जावा कचरा संग्रह पर एक विशेषज्ञ नहीं हूं, लेकिन ऐसा लगता है कि समवर्ती कलेक्टर (UseConcMarkSweepGC ध्वज) का उपयोग करके आप सही काम कर रहे हैं, मानते हैं कि सर्वर में एकाधिक प्रोसेसर हैं। http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#cms पर समस्या निवारण के लिए सुझावों का पालन करें।यदि आपके पास पहले से है, तो हमें बताएं कि आपने कब प्रयास किया था।

2

आपके लॉग देख रहे हैं, मुझे कोई लंबा विराम नहीं दिखाई देता है। लेकिन युवा जीसी बहुत बार है। हालांकि प्रोमोशन रेट बहुत कम है (युवा जीसी द्वारा इसे कचरा साफ़ किया जाना चाहिए)। उसी समय आपका पुराना अंतरिक्ष उपयोग कम है।

बीटीडब्ल्यू क्या हम Minecraft सर्वर के बारे में बात कर रहे हैं?

युवा जीसी की आवृत्ति को कम करने के लिए आपको अपना आकार बढ़ाना चाहिए। मैं इस तरह के बड़े युवा अंतरिक्ष के लिए -XX:NewSize=8G -XX:MaxNewSize=8G

साथ शुरू सुझाव है, आप भी उत्तरजीवी अंतरिक्ष आकार -XX:SurvivorRatio=512

जीसी ट्यूनिंग परीक्षण और त्रुटियों की एक पथ है, तो आप कुछ और पुनरावृत्तियों और फेरबदल की आवश्यकता हो सकती कम करना चाहिए।

आप म्यू ब्लॉग पर उपयोगी लेख की जोड़ी पा सकते हैं

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