জিসি ওভারহেড সীমা ছাড়িয়ে গেছে


93

JVM 'java.lang.OutOfMemoryError: GC ওভারহেড সীমা ছাড়িয়ে গেছে' নিক্ষেপ করার সময়টি কী? আমি জানি আপনি GCTimeLimit এবং GCHeapFreeLimit পরামিতিগুলির সাথে 98% এবং 2% নিয়ন্ত্রণ করতে পারবেন তবে নমুনার সময়টি কী?

উত্তর:


82

থেকে জাভা SE 6 হটস্পট [TM] ভার্চুয়াল মেশিন বর্জ্য সংগ্রহ টিউনিং

পরবর্তী

অতিরিক্ত জিসি সময় এবং আউট অফ মেমরিরির

যদি আবর্জনা সংগ্রহ করতে খুব বেশি সময় ব্যয় করা হয় তবে সমকালীন সংগ্রাহক একটি আউট অফ মেমরিরির ফেলে দেবেন: যদি মোট সময়ের 98% এরও বেশি সময় আবর্জনা সংগ্রহ করতে ব্যয় করা হয় এবং 2% এরও বেশি হিপ পুনরুদ্ধার করা হয় তবে একটি আউটঅফমিউরিওর ফেলে দেওয়া হবে। এই বৈশিষ্ট্যটি খুব কম বা কোনও অগ্রগতির সময় অ্যাপ্লিকেশনগুলিকে সময়কালের জন্য চালানো থেকে বিরত রাখতে ডিজাইন করা হয়েছে কারণ হিপ খুব ছোট too যদি প্রয়োজন হয় তবে এই বৈশিষ্ট্যটি -XX বিকল্পটি যোগ করে অক্ষম করা যেতে পারে: -কমান্ড লাইনে USGCOverheadLimit ব্যবহার করুন।

পলিসি সমান্তরাল সংগ্রহে যেমন একই, সমবর্তী সংগ্রহগুলি সম্পাদন করতে ব্যয় করা সময় বাদে 98% সময়সীমা হিসাবে গণনা করা হয় না। অন্য কথায়, অ্যাপ্লিকেশনকে অতিরিক্ত জিসি সময় গণনা বন্ধ করার সময় কেবল সংগ্রহগুলি সঞ্চালিত হয়। এই জাতীয় সংগ্রহগুলি সাধারণত একযোগে মোড ব্যর্থতা বা স্পষ্ট সংগ্রহের অনুরোধের কারণে হয় (যেমন, সিস্টেম.gc () তে একটি কল)।

আরও নিচে একটি উত্তরণের সাথে একত্রে

স্পষ্ট আবর্জনা সংগ্রহের সবচেয়ে সাধারণ ব্যবহারগুলির মধ্যে একটি আরএমআই বিতরণকৃত আবর্জনা সংগ্রহ (ডিজি) এর সাথে ঘটে। আরএমআই ব্যবহার করে অ্যাপ্লিকেশনগুলি অন্যান্য ভার্চুয়াল মেশিনের বস্তুগুলিকে বোঝায়। মাঝে মাঝে স্থানীয় স্তূপ সংগ্রহ না করে এই বিতরণ অ্যাপ্লিকেশনগুলিতে আবর্জনা সংগ্রহ করা যায় না, তাই আরএমআই পর্যায়ক্রমে সম্পূর্ণ সংগ্রহের জন্য বাধ্য করে। এই সংগ্রহগুলির ফ্রিকোয়েন্সি বৈশিষ্ট্য সহ নিয়ন্ত্রণ করা যেতে পারে। উদাহরণ স্বরূপ,

java -Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000 প্রতি মিনিটে একবারের ডিফল্ট হারের পরিবর্তে প্রতি ঘন্টা একবার সুস্পষ্ট সংগ্রহ নির্দিষ্ট করে। যাইহোক, এর ফলে কিছু বিষয়বস্তু পুনরুদ্ধার করতে আরও বেশি সময় নিতে পারে। ডিজিসি ক্রিয়াকলাপের সময়োপযোগীকরণের জন্য যদি কোনও উচ্চতর আবদ্ধের ইচ্ছা না থাকে তবে এই বৈশিষ্ট্যগুলিকে সুস্পষ্ট সংগ্রহের মধ্যে কার্যকরভাবে অসীম করার জন্য সময়টিকে দীর্ঘ হিসাবে তৈরি করা যেতে পারে MA MAX_VALUE UE

98% নির্ধারণের জন্য মূল্যায়ন সময়টি এক মিনিট দীর্ঘ বলে বোঝায় বলে মনে হচ্ছে, তবে এটি সঠিক সংজ্ঞায়িত করে সূর্যের জেভিএম-তে কনফিগারযোগ্য হতে পারে।

অবশ্যই, অন্যান্য ব্যাখ্যা সম্ভব।


5
আরএমআই বিতরণ করা আবর্জনা সংগ্রহ নিয়মিত আবর্জনা সংগ্রহের সাথে সম্পর্কিত নয় activity সুতরাং আমি দেখতে পাচ্ছি না আপনি কী করেছিলেন তা আপনি কীভাবে অনুমান করতে পারেন।
স্টিফেন সি

4
অনুমানটি নিখুঁত বা এমনকি সঠিক নয়, এ কারণেই "বোঝানো" এর পরিবর্তে "মনে হয়" বোঝানো হয়। যদি আপনি এই পর্যবেক্ষণের সাথে একমত হন যে সূর্যের লোকেরা যদি আরএমআইয়ের জন্য আবর্জনা সংগ্রহের ব্যবধান নির্ধারণে এক মিনিট ব্যবহার করে, তবে মূল প্রোগ্রামটি বন্ধ হয়ে গেলে সমকালীন সংগ্রহে সংগ্রহের সময়টি কেবলমাত্র গণনা করা হয়, এবং বিশ্বাসকে কিছুটা লাফিয়ে তোলে তাহলে, প্রতিক্রিয়াগুলি ভাল হয় 98% এক মিনিটের মধ্যে সংগ্রহ করা হয়। এটি একটি ম্যাজিক নম্বর, তবে এক মিনিট হ'ল একটি ম্যাজিক নম্বর যা প্রায় 3.5 মিনিটের বলার তুলনায় ব্যবহৃত হয়।
এডউইন বাক

@ স্টেফেনসি আপনার অর্থ কি আমরা সেট -XX:+DisableExplicitGC করে দিলেও এটি আরএমআই সম্পর্কিত কনফিগারেশনকে প্রভাবিত করবে না এবং সিস্টেম প্যারামিটারের সাথে ফ্রিকোয়েন্সি সেটটিতে জিসি আবেদন করবে-Dsun.rmi.dgc.server.gcInterval
স্টিফেন

4
@ স্টিফেন - না এটি আমি যা বলছি তা নয়। আমি এই বিবৃতি বিষয়ে কথা বলছি: "পরোক্ষভাবে যে 98% নির্ধারণের জন্য একযোগে এক মিনিট দীর্ঘ মনে হয় ..." । এবং উল্লেখ্য যে এডউইন সম্মত হন যে অনুমানটি "অপূর্ণ"। অনুমানটি এই ধারণার উপর ভিত্তি করে তৈরি করা হয়েছে যে আরএমআই (& ডিজিসি) প্রয়োগকারী সূর্যের লোকেরা জিসি ওভারহেড সীমাবদ্ধতা প্রক্রিয়া প্রয়োগকারী লোকদের সাথে ঘনিষ্ঠ যোগাযোগ করেছিলেন। আমার সন্দেহ হয় যে দুটি বিকাশ আসলেই বিভিন্ন সময়ে ঘটেছিল। নোট করুন যে -Dsun.rmi.dgc.server.gcIntervalসম্পত্তিটি জাভা ১.২ এর পরে রয়েছে।
স্টিফেন সি

4
যাইহোক, এই প্রশ্নের আসল উত্তর সন্ধানের জন্য আরও ভাল পন্থাটি ওপেনজেডিকে উত্স কোডটি দেখানো হবে।
স্টিফেন সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.