জাভা আবর্জনা সংগ্রহ লগ বার্তা


96

লগগুলিতে আবদ্ধ আবর্জনা সংগ্রহের তথ্য ( ভার্বোজ জিসি ) জাভা কনফিগার করেছি । লগগুলিতে আবর্জনা সংগ্রহের প্রবেশের অর্থ কী তা সম্পর্কে আমি অনিশ্চিত। এই এন্ট্রিগুলির একটি নমুনা নীচে পোস্ট করা হয়েছে। আমি গুগলে চারপাশে অনুসন্ধান করেছি এবং এর সুনির্দিষ্ট ব্যাখ্যা খুঁজে পাইনি।

আমার কিছু যুক্তিসঙ্গত অনুমান রয়েছে, তবে আমি এমন উত্তরগুলির সন্ধান করছি যা বিশ্বাসযোগ্য উত্স দ্বারা ব্যাক আপ করা এন্ট্রিগুলিতে সংখ্যাগুলি কী বোঝায় তার কঠোর সংজ্ঞা সরবরাহ করে। সমস্ত উত্তরের একটি স্বয়ংক্রিয় +1 যা সূর্যের ডকুমেন্টেশন উল্লেখ করে। আমার প্রশ্নগুলি হ'ল:

  1. পিএস ইউইংগেন কী বোঝায়? আমি ধরে নিয়েছি এর পূর্ববর্তী (তরুণ?) প্রজন্মের সাথে কিছু করার আছে তবে ঠিক কী?
  2. সংখ্যাগুলির দ্বিতীয় ট্রিপলেট এবং প্রথমটির মধ্যে পার্থক্য কী?
  3. একটি নাম (পিএস ইউইংগেন) প্রথম সংখ্যার প্রথম ত্রিপলির জন্য নির্দিষ্ট করা হলেও দ্বিতীয়টি নয়?
  4. ট্রিপলেটের প্রতিটি সংখ্যা (স্মৃতি আকার) এর অর্থ কী mean উদাহরণস্বরূপ 109884 কে-> 14201K (139904K) তে, জিসি 109884k এর আগে থাকা মেমরিটি এবং তারপরে এটি 14201K এ কমে যায়। তৃতীয় নম্বরটি কীভাবে প্রাসঙ্গিক? কেন আমাদের দ্বিতীয় সংখ্যার সেট লাগবে?

8109.128: [জিসি [পিএস ইউংগেন: 109884 কে-> 14201K (139904 কে)] 691015 কে-> 595332 কে (1119040 কে), 0.0454530 সেকেন্ড]

8112.111: [জিসি [পিএস YoungGen: 126649K-> 15528 কে (142336 কে)] 707780K-> 605892 কে (1121472 কে), 0.0934560 সেকেন্ড]

8112.802: [জিসি [পিএস YoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895 কে (1097728 কে), 0.0682690 সেকেন্ড]


পুরো গাদা, গাদা তরুণ প্রজন্মের অংশ, জিসি কীভাবে কাজ করে তার জন্য গৌণ জিসি, উদাহরণস্বরূপ কিউবিড.আর
ব্লগ /

উত্তর:


90

এর বেশিরভাগটি জিসি টিউনিং গাইডে ব্যাখ্যা করা হয়েছে (যা আপনি যেভাবেই পড়তে ভাল করবেন)।

কমান্ড লাইন বিকল্পের -verbose:gcফলে প্রতিটি সংগ্রহে হিপ এবং আবর্জনা সংগ্রহের তথ্য মুদ্রিত হয়। উদাহরণস্বরূপ, এখানে একটি বৃহত সার্ভার অ্যাপ্লিকেশন থেকে আউটপুট দেওয়া হয়েছে:

[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

এখানে আমরা দুটি বড় সংগ্রহ দেখি যার পরে একটি বড় সংগ্রহ। তীরের আগে এবং পরে সংখ্যাগুলি (উদাহরণস্বরূপ, 325407K->83000Kপ্রথম লাইন থেকে) যথাক্রমে আবর্জনা সংগ্রহের আগে এবং পরে লাইভ অবজেক্টের সম্মিলিত আকার নির্দেশ করে। ছোট সংগ্রহের পরে আকারের মধ্যে এমন কিছু জিনিস অন্তর্ভুক্ত থাকে যা আবর্জনা (আর জীবিত নয়) তবে এটি পুনরুদ্ধার করা যায় না। এই বিষয়গুলি হয় টেনারড জেনারেশনে অন্তর্ভুক্ত থাকে, বা টেনারযুক্ত বা স্থায়ী প্রজন্ম থেকে রেফারেন্স হয়।

(776768K)প্রথম বন্ধনী (যেমন প্রথম লাইন থেকে আবার) এর পরবর্তী সংখ্যা হ'ল প্রতিশ্রুতিবদ্ধ আকার: অপারেটিং সিস্টেম থেকে আরও মেমরির অনুরোধ না করে জাভা বস্তুর জন্য ব্যবহারযোগ্য জায়গার পরিমাণ। মনে রাখবেন যে এই সংখ্যাটিতে বেঁচে থাকা জায়গাগুলির মধ্যে একটিও অন্তর্ভুক্ত নেই, যেহেতু যে কোনও সময়ে কোনও একটিই ব্যবহৃত হতে পারে এবং স্থায়ী প্রজন্মকে অন্তর্ভুক্ত করে না, যা ভার্চুয়াল মেশিন দ্বারা ব্যবহৃত মেটাডেটা ধারণ করে।

লাইনের শেষ আইটেমটি (উদাহরণস্বরূপ 0.2300771 secs) সংগ্রহটি সম্পাদন করতে সময় গ্রহণ করে; এক্ষেত্রে প্রায় এক সেকেন্ডের এক চতুর্থাংশ।

তৃতীয় লাইনে প্রধান সংগ্রহের বিন্যাসটি একই।

উত্পাদিত আউটপুট ফর্ম্যাট -verbose:gcভবিষ্যতের রিলিজ পরিবর্তন সাপেক্ষে।

আমি নিশ্চিত না যে কেন আপনার মধ্যে পিএস ইউজগেন রয়েছে; আপনি কি আবর্জনা সংগ্রহকারী পরিবর্তন করেছেন?


জিসি লগ ফাইলগুলি কোথায় পাবেন?
মিঃ লু

7
এই উত্তরটি আসলে আসল প্রশ্নগুলিকে সম্বোধন করে না। আমি অনুভব করি মাইকেলজোসেফের উত্তরটি আরও ভাল। এটি ইথান কর্তৃক জিজ্ঞাসিত প্রশ্নগুলিতে সম্বোধন করে এবং মূল উদাহরণটি ভেঙে আরও ভাল কাজ করে। যদিও তার উত্তরে দুটি সমস্যা রয়েছে (তার লিঙ্কটি এখন মারা গেছে এবং রাফা.ফেরেরিয়া অন্যটিকে নির্দেশ করেছেন), এটি কেবল একটি ওরাকল ডককে পুনরায় সাজানো নয়।
ডার্ক

127
  1. পিএস ইউইংগেন অপ্রয়োজনীয় সংগ্রহের জন্য ব্যবহৃত আবর্জনা সংগ্রহকারীকে বোঝায়। পিএস মানে প্যারালাল স্কেঞ্জ।
  2. সংখ্যার প্রথম সেটটি হ'ল তরুণ প্রজন্মের আকারের আগের / পরে এবং দ্বিতীয় সেটটি পুরো স্তূপের জন্য। ( কোনও আবর্জনা সংগ্রহের সমস্যা নির্ণয় করে ফর্ম্যাটটির বিশদ বিবরণ)
  3. নামটি প্রজন্মের এবং সংগ্রাহককে প্রশ্নযুক্ত, দ্বিতীয় সেটটি পুরো গাদা জন্য।

একটি সম্পর্কিত পূর্ণ জিসির একটি উদাহরণও পুরানো এবং স্থায়ী প্রজন্মের জন্য ব্যবহৃত সংগ্রহকারীদের দেখায়:

3.757: [Full GC [PSYoungGen: 2672K->0K(35584K)] 
            [ParOldGen: 3225K->5735K(43712K)] 5898K->5735K(79296K) 
            [PSPermGen: 13533K->13516K(27584K)], 0.0860402 secs]

অবশেষে, আপনার উদাহরণ লগ আউটপুট একটি লাইন ভেঙে:

8109.128: [GC [PSYoungGen: 109884K->14201K(139904K)] 691015K->595332K(1119040K), 0.0454530 secs]
  • জিসির আগে 107 এমবি ব্যবহৃত হয়, জিসির পরে 14 এমবি ব্যবহার করা হয়, সর্বোচ্চ তরুণ প্রজন্মের আকার 137 এমবি M
  • জিসির আগে 675 এমবি হিপ ব্যবহার করা হয়, জিসির পরে 581 এমবি হিপ ব্যবহার করা হয়, 1 জিবি সর্বোচ্চ হিপ আকার
  • জেভিএম শুরু হওয়ার পরে নাবালক জিসি 8109.128 সেকেন্ড পরেছিল এবং 0.04 সেকেন্ড নেয়

8
একটি সামান্য মন্তব্য, '()' এর মধ্যে মানটি সর্বকালের জন্য সর্বাধিক আকার নয়, মুহুর্তের সর্বোচ্চ আকার। যদি জিসি হিপকে কম কম মুক্ত করতে না পারে তবে অপারেশনাল সিস্টেমের জন্য এই সীমাটি আরও স্থানের প্রয়োজন হবে এবং এই মানটি বাড়বে। অবশ্যই শ্রদ্ধার উপর সীমাটি নির্ধারিত হয়েছে:-এক্সএমএক্স
রাফা.ফেরেরি

@ rafa.ferreira আমি মনে করি প্যারানথেসিসের মান অর্থাৎ 1119040 কে প্রতিশ্রুতিবদ্ধ হিপ আকার। আমার মনে হয় না, জিসি কোথাও 'ম্যাক্স হিপ' আকার মুদ্রণ করে। রেফারেন্স 1 এবং রেফারেন্স 2
রোহিতমোহতা

23

আমি কেবল উল্লেখ করতে চেয়েছিলাম যে কেউ এর সাথে বিস্তারিত জিসি লগ পেতে পারেন

-XX:+PrintGCDetails 

প্যারামিটার তারপরে আপনি PSUngGen বা পিএসপিার্মজেন আউটপুটটিকে উত্তরের মতো দেখতে পাবেন।

এছাড়াও -Xloggc:gc.logমত একই আউটপুট উৎপন্ন বলে মনে হয় -verbose:gcকিন্তু আপনাকে প্রথমে একটি আউটপুট ফাইল নির্দিষ্ট করতে পারেন।

ব্যবহারের উদাহরণ:

java -Xloggc:./memory.log -XX:+PrintGCDetails Memory

তথ্য ভাল ঠাহর করতে চেষ্টা করতে পারেন gcviewer (আরও একটি সাম্প্রতিক সংস্করণ পাওয়া যাবে GitHub )।

প্যারামিটারগুলি সঠিকভাবে লিখতে যত্ন নিন, আমি "+" ভুলে গিয়েছি এবং আমার জেবস কোনও ত্রুটি বার্তা ছাড়াই শুরু হবে না!


4
নোট করুন যে জাভা পুনরায় চালু হওয়ার পরে gc.log ওভাররাইট করা হবে (যেমন, আপনি যদি টমক্যাটটি পুনরায় চালু করেন কারণ এতে মেমরির সমস্যা ছিল, এবং আপনি সেই gc.log দেখতে পছন্দ করবেন)। বা কমপক্ষে এটি হ'ল যদি আপনি জিসি লগগুলি ঘোরান। জিসি লগিং নিয়ন্ত্রণ করতে প্রচুর অন্যান্য বিকল্প রয়েছে। Oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html দেখুন । বিশেষত বিবেচনা করুন-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution
ড্যান প্রিটস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.