سؤال

هذا السؤال يتعلق ترفض Java البدء - لا يمكنها توفير مساحة كافية لكومة الكائنات وينبغي أن يكون من السهل معرفة ذلك.لكن؛لم تسفر عمليات البحث التي قمت بها عن أي شيء مفيد.

لدينا بشكل أساسي نظامي تشغيل 32 بت (RedHat وSuSE) على أجهزة مختلفة بنفس الأجهزة.كلاهما يستخدم نفس JVM وكلاهما ينفذ نفس سطر الأوامر.يعمل RedHat بشكل جيد تمامًا ولكن SuSE أبلغت بعدم وجود ذاكرة كافية.

نحتاج فقط إلى معرفة ما إذا كان هذا تقييدًا لإصدار SuSE الذي نستخدمه أم أنه شيء آخر.

"cat /proc/version" يعطينا:

Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005

'uname -a' يعطينا ما يلي على كلا النوعين من الأجهزة:

UTC 2005 i686 i686 i386 GNU/Linux
هل كانت مفيدة؟

المحلول

يعتبر حد ذاكرة JVM هو الأكبر مجانًا متجاورة الكتلة المتاحة، وليس مقدار الذاكرة الحرة.ويتراوح الحد الأقصى من حوالي 1.4 غيغابايت إلى ما يزيد قليلاً عن 2.0 غيغابايت، ويعتمد على المكان الذي يضع فيه نظام التشغيل الخاص بك أشياء مختلفة في الذاكرة.لا أعرف تفاصيل المكان الذي يقوم فيه Redhat أو Suse بتحميل الأشياء في الذاكرة، ولكن من الممكن أن يكون هذا الاستخدام هو تعيين بعض المكتبات إلى عنوان في منتصف ذاكرة الوصول العشوائي، حيث قد يقوم Redhat بتعيينها في النهاية (تكهنات).

وتذكر أن استخدامك الفعلي للذاكرة في Java هو أكثر من ما تحدده لـ Xmx.تؤثر إعدادات الذاكرة الأخرى أيضًا على حجم الكومة لديك (مثل بيرمجين).لذلك من الممكن أيضًا أن تكون المساحة المخصصة للتجعيد في Suse أكبر من تلك الموجودة في Redhat.

أيضًا، اعتمادًا على ملف تعريف تخصيص الذاكرة لتطبيقك، قد تفلت من حجم كومة أصغر وخيارات مختلفة لجمع البيانات المهملة.هناك بعض التفاصيل هنا (http://java.sun.com/performance/reference/whitepapers/tuning.html) وغيرها من الأماكن.على سبيل المثال، إذا قمت بتخصيص الكثير من الكتل الصغيرة المؤقتة، فستحتاج إلى إعدادات GC مختلفة عما إذا كان لديك الكثير من الكائنات ذات العمر الطويل.

فيما يتعلق بالسؤال المرتبط، لماذا لا نستخدم Redhat فقط؟قد يكون هذا حلاً مبسطًا، لكنني أضمن أنه سيحل مشكلتك بشكل أسرع من الخوض بعمق في العالم الغامض لضبط جافا وإدارة ذاكرة نظام التشغيل:P

نصائح أخرى

أولا، أنت مجنون ليكون تشغيل OS 32 بت عندما يكون لديك هذا الكم من الضغط مساحة العنوان. الهجرة إلى JVM 64 بت على 64 بت لينكس. كم من الوقت يضيع عليك أن تحاول بالفعل لتشخيص هذه المشكلة التي يجب أن يكون المشتبه فيهم منذ البداية أن تزول مع مساحة عنوان أكبر من نظام 64 بت؟

وثانيا، فإنه من المعروف أن من بين جميع لينكس الباعة ريد هات لديه معظم المهندسين kernel على الموظفين ويجعل بعض القرص خطيرة على حبات في المنتجات RHEL بهم. هذه غالبا ما تشمل بقع لأعباء العمل الكبيرة مثل لك (حسنا، انها عبء كبير لنظام 32 بت، لا شيء خاص على 64 بت). لذلك هناك بعض فرصة السبب في نهاية المطاف هو أن RHEL لديها زبائن آخرين تفعل نفس الأشياء المجنونة كما كنت، وكنت الاستفادة من العمل الذي قاموا به لدعم هؤلاء العملاء.

وأخيرا رغم ذلك، منذ أظن أنك ذاهب إلى الإصرار على محاولة ايجاد وسيلة للقيام بذلك على سوزي 32 بت وسوف نشير إلى أن لينكس يقدم مجموعة متنوعة من مساحة العنوان المفاضلة على 32 بت x86، وانه من الممكن (ولكن ليس من المؤكد) أن أنظمة سوزي الخاص بك فقط لديهم مفاضلة مختلفة المحدد. إذا كان يمكنك إحضار تكوين حبات تشغيل (غالبا في / التمهيد / التكوين ....) ثم يمكنك مقارنة إعدادات مثل HIGHMEM.

وكان الخيار التقليدي حتى سنوات قليلة مضت 2: 2 انقسام، وهذا هو يقتصر مساحة المستخدم إلى 2GiB من مساحة العنوان، حل سهل لبرمجة ولها كفاءة ائقة ولكن في هذا السيناريو الواضح أنك لا يمكن أن يكون طلب الخاص بك كومة نظرا لأنه من شأنه أن يترك أي مساحة للاطلاع على نص البرنامج، كومة الخ وفي الآونة الأخيرة كان الاتجاه لمدة 3: 1 (على غرار مفتاح ويندوز / 3GB) الذي يوسع مساحة العنوان مساحة المستخدم على حساب هدفهم نواة نظام التشغيل نفسه في أقل الفضاء الذي يحتمل أن يسبب مشاكل خاصة بها. وقد تنجح هذه الفكرة، ولكن سيكون ضيقة جدا لذلك أنا أيضا لن يفاجأ إذا لم يعمل لفرص العمل الخاص بك. وأخيرا أحدث نواة لينكس كما تقدم خيارا حيث يمكنك الحصول على مساحة المستخدم 4GiB 32 بت، والتي قد تكون كافية لجعل فرص العمل الخاص بك تشغيل موثوق بها، بتكلفة كبيرة في الأداء منذ ذلك الحين الواضح مساحة المستخدم ونواة عناوين لا يمكن تتعايش.

لمحاولة هذا كنت بحاجة إلى نواة جديدة. قد تكون قادرا على تثبيت واحدة فقط التي تقدمها سوزي (انظر ما اذا كان عرض الآخرين للاختيار من بينها، على سبيل المثال خيار "PAE") أو قد تضطر إلى جمع الخاصة بك، وفي هذه الحالة ربما يبطل عقد دعمكم.

ولكن في الحقيقة، يجب عليك ان تذهب فقط مع الخيار 1، والتحول إلى JVM 64 بت وارفعي قدميك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top