ഈ സമഗ്രമായ JVM ഗാർബേജ് കളക്ഷൻ ട്യൂണിംഗ് ഗൈഡ് ഉപയോഗിച്ച് നിങ്ങളുടെ ജാവ ആപ്ലിക്കേഷനുകളുടെ പ്രകടനം മെച്ചപ്പെടുത്തുക. വിവിധ ഗാർബേജ് കളക്ടറുകൾ, ട്യൂണിംഗ് പാരാമീറ്ററുകൾ, പ്രായോഗിക ഉദാഹരണങ്ങൾ എന്നിവയെക്കുറിച്ച് അറിയുക.
ജാവ വെർച്വൽ മെഷീൻ: ഗാർബേജ് കളക്ഷൻ ട്യൂണിംഗിനെക്കുറിച്ചൊരു ആഴത്തിലുള്ള പഠനം
ജാവയുടെ ശക്തി അതിൻ്റെ പ്ലാറ്റ്ഫോം സ്വാതന്ത്ര്യത്തിലാണ്, ഇത് ജാവ വെർച്വൽ മെഷീൻ (JVM) വഴിയാണ് സാധ്യമാകുന്നത്. ജെവിഎമ്മിൻ്റെ ഒരു പ്രധാന ഘടകം അതിൻ്റെ ഓട്ടോമാറ്റിക് മെമ്മറി മാനേജ്മെൻ്റാണ്, ഇത് പ്രധാനമായും ഗാർബേജ് കളക്ടർ (GC) ആണ് കൈകാര്യം ചെയ്യുന്നത്. മികച്ച ആപ്ലിക്കേഷൻ പ്രകടനത്തിന്, പ്രത്യേകിച്ച് വൈവിധ്യമാർന്ന ജോലിഭാരങ്ങളും വലിയ ഡാറ്റാസെറ്റുകളും കൈകാര്യം ചെയ്യുന്ന ആഗോള ആപ്ലിക്കേഷനുകൾക്ക്, ജിസി മനസ്സിലാക്കുകയും ട്യൂൺ ചെയ്യുകയും ചെയ്യേണ്ടത് അത്യാവശ്യമാണ്. ഈ ഗൈഡ്, വിവിധ ഗാർബേജ് കളക്ടറുകൾ, ട്യൂണിംഗ് പാരാമീറ്ററുകൾ, നിങ്ങളുടെ ജാവ ആപ്ലിക്കേഷനുകൾ ഒപ്റ്റിമൈസ് ചെയ്യാൻ സഹായിക്കുന്ന പ്രായോഗിക ഉദാഹരണങ്ങൾ എന്നിവ ഉൾക്കൊള്ളുന്ന ജിസി ട്യൂണിംഗിൻ്റെ ഒരു സമഗ്രമായ അവലോകനം നൽകുന്നു.
ജാവയിലെ ഗാർബേജ് കളക്ഷൻ മനസ്സിലാക്കാം
ഒരു പ്രോഗ്രാമിൽ ഇനി ഉപയോഗിക്കാത്ത ഒബ്ജക്റ്റുകൾ കൈവശം വച്ചിരിക്കുന്ന മെമ്മറി സ്വയമേവ വീണ്ടെടുക്കുന്ന പ്രക്രിയയാണ് ഗാർബേജ് കളക്ഷൻ. ഇത് മെമ്മറി ലീക്കുകൾ തടയുകയും, ഡെവലപ്പർമാരെ മാനുവൽ മെമ്മറി മാനേജ്മെൻ്റിൽ നിന്ന് മോചിപ്പിച്ച് വികസനം ലളിതമാക്കുകയും ചെയ്യുന്നു, ഇത് സി, സി++ പോലുള്ള ഭാഷകളെ അപേക്ഷിച്ച് ഒരു പ്രധാന നേട്ടമാണ്. ജെവിഎമ്മിൻ്റെ ജിസി ഈ ഉപയോഗിക്കാത്ത ഒബ്ജക്റ്റുകളെ തിരിച്ചറിഞ്ഞ് നീക്കംചെയ്യുന്നു, ഭാവിയിൽ ഒബ്ജക്റ്റുകൾ നിർമ്മിക്കുന്നതിനായി മെമ്മറി ലഭ്യമാക്കുന്നു. ഗാർബേജ് കളക്ടറിൻ്റെ തിരഞ്ഞെടുപ്പും അതിൻ്റെ ട്യൂണിംഗ് പാരാമീറ്ററുകളും ആപ്ലിക്കേഷൻ പ്രകടനത്തെ കാര്യമായി സ്വാധീനിക്കുന്നു, അവയിൽ താഴെ പറയുന്നവ ഉൾപ്പെടുന്നു:
- ആപ്ലിക്കേഷൻ പോസുകൾ: ജിസി പ്രവർത്തിക്കുമ്പോൾ ആപ്ലിക്കേഷൻ ത്രെഡുകൾ താൽക്കാലികമായി നിർത്തുന്ന 'സ്റ്റോപ്പ്-ദ-വേൾഡ്' ഇവൻ്റുകൾ എന്നും അറിയപ്പെടുന്ന ജിസി പോസുകൾ. ഇടയ്ക്കിടെയുള്ളതോ ദൈർഘ്യമേറിയതോ ആയ പോസുകൾ ഉപയോക്തൃ അനുഭവത്തെ സാരമായി ബാധിക്കും.
- ത്രൂപുട്ട്: ആപ്ലിക്കേഷന് ടാസ്കുകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയുന്ന നിരക്ക്. ജിസി, യഥാർത്ഥ ആപ്ലിക്കേഷൻ ജോലിക്കായി ഉപയോഗിക്കാവുന്ന സിപിയു വിഭവങ്ങളുടെ ഒരു ഭാഗം ഉപയോഗിച്ചേക്കാം, ഇത് ത്രൂപുട്ടിനെ ബാധിക്കുന്നു.
- മെമ്മറി ഉപയോഗം: ലഭ്യമായ മെമ്മറി ആപ്ലിക്കേഷൻ എത്ര കാര്യക്ഷമമായി ഉപയോഗിക്കുന്നു എന്നത്. തെറ്റായി കോൺഫിഗർ ചെയ്ത ജിസി അമിതമായ മെമ്മറി ഉപയോഗത്തിനും ഔട്ട്-ഓഫ്-മെമ്മറി എററുകൾക്കും കാരണമാകും.
- ലേറ്റൻസി: ഒരു അഭ്യർത്ഥനയോട് പ്രതികരിക്കാൻ ആപ്ലിക്കേഷനെടുക്കുന്ന സമയം. ജിസി പോസുകൾ ലേറ്റൻസിയിലേക്ക് നേരിട്ട് സംഭാവന നൽകുന്നു.
ജെവിഎമ്മിലെ വിവിധ ഗാർബേജ് കളക്ടറുകൾ
ജെവിഎം പലതരം ഗാർബേജ് കളക്ടറുകൾ വാഗ്ദാനം ചെയ്യുന്നു, ഓരോന്നിനും അതിൻ്റേതായ ഗുണങ്ങളും ദോഷങ്ങളുമുണ്ട്. ഒരു ഗാർബേജ് കളക്ടറിൻ്റെ തിരഞ്ഞെടുപ്പ് ആപ്ലിക്കേഷൻ്റെ ആവശ്യകതകളെയും ജോലിഭാരത്തിൻ്റെ സ്വഭാവത്തെയും ആശ്രയിച്ചിരിക്കുന്നു. നമുക്ക് പ്രധാനപ്പെട്ട ചിലതിനെക്കുറിച്ച് ചർച്ച ചെയ്യാം:
1. സീരിയൽ ഗാർബേജ് കളക്ടർ
സീരിയൽ ജിസി ഒരു സിംഗിൾ-ത്രെഡഡ് കളക്ടറാണ്, ഇത് സിംഗിൾ-കോർ മെഷീനുകളിൽ പ്രവർത്തിക്കുന്ന ആപ്ലിക്കേഷനുകൾക്കോ അല്ലെങ്കിൽ വളരെ ചെറിയ ഹീപ്പുകളുള്ളവയ്ക്കോ അനുയോജ്യമാണ്. ഇത് ഏറ്റവും ലളിതമായ കളക്ടറാണ് കൂടാതെ പൂർണ്ണമായ ജിസി സൈക്കിളുകൾ നടത്തുന്നു. ഇതിൻ്റെ പ്രധാന പോരായ്മ ദൈർഘ്യമേറിയ 'സ്റ്റോപ്പ്-ദ-വേൾഡ്' പോസുകളാണ്, ഇത് കുറഞ്ഞ ലേറ്റൻസി ആവശ്യമുള്ള പ്രൊഡക്ഷൻ എൻവയോൺമെൻ്റുകൾക്ക് അനുയോജ്യമല്ലാതാക്കുന്നു.
2. പാരലൽ ഗാർബേജ് കളക്ടർ (ത്രൂപുട്ട് കളക്ടർ)
ത്രൂപുട്ട് കളക്ടർ എന്നും അറിയപ്പെടുന്ന പാരലൽ ജിസി, ആപ്ലിക്കേഷൻ്റെ ത്രൂപുട്ട് പരമാവധിയാക്കാൻ ലക്ഷ്യമിടുന്നു. മൈനർ, മേജർ ഗാർബേജ് കളക്ഷനുകൾ നടത്താൻ ഇത് ഒന്നിലധികം ത്രെഡുകൾ ഉപയോഗിക്കുന്നു, ഇത് ഓരോ ജിസി സൈക്കിളിൻ്റെയും ദൈർഘ്യം കുറയ്ക്കുന്നു. ബാച്ച് പ്രോസസ്സിംഗ് ജോലികൾ പോലുള്ള, കുറഞ്ഞ ലേറ്റൻസിയേക്കാൾ ത്രൂപുട്ട് പരമാവധിയാക്കുന്നത് പ്രധാനമായ ആപ്ലിക്കേഷനുകൾക്ക് ഇത് ഒരു നല്ല തിരഞ്ഞെടുപ്പാണ്.
3. സിഎംഎസ് (കൺകറൻ്റ് മാർക്ക് സ്വീപ്പ്) ഗാർബേജ് കളക്ടർ (ഒഴിവാക്കിയത്)
ആപ്ലിക്കേഷൻ ത്രെഡുകൾക്കൊപ്പം ഒരേസമയം ഗാർബേജ് കളക്ഷൻ നടത്തി പോസ് സമയം കുറയ്ക്കുന്നതിനാണ് സിഎംഎസ് രൂപകൽപ്പന ചെയ്തത്. ഇത് ഒരു കൺകറൻ്റ് മാർക്ക്-സ്വീപ്പ് സമീപനം ഉപയോഗിച്ചു. പാരലൽ ജിസിയെക്കാൾ കുറഞ്ഞ പോസുകൾ സിഎംഎസ് നൽകിയിരുന്നെങ്കിലും, ഇതിന് ഫ്രാഗ്മെൻ്റേഷൻ പ്രശ്നങ്ങളും ഉയർന്ന സിപിയു ഓവർഹെഡും ഉണ്ടാകാം. ജാവ 9 മുതൽ സിഎംഎസ് ഒഴിവാക്കിയിരിക്കുന്നു, പുതിയ ആപ്ലിക്കേഷനുകൾക്ക് ഇത് ശുപാർശ ചെയ്യുന്നില്ല. ഇതിന് പകരമായി G1GC വന്നിരിക്കുന്നു.
4. G1GC (ഗാർബേജ്-ഫസ്റ്റ് ഗാർബേജ് കളക്ടർ)
ജാവ 9 മുതൽ ഡിഫോൾട്ട് ഗാർബേജ് കളക്ടറാണ് G1GC, ഇത് വലിയ ഹീപ്പ് വലുപ്പങ്ങൾക്കും കുറഞ്ഞ പോസ് സമയങ്ങൾക്കുമായി രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതാണ്. ഇത് ഹീപ്പിനെ റീജിയണുകളായി വിഭജിക്കുകയും ഏറ്റവും കൂടുതൽ ഗാർബേജ് നിറഞ്ഞ റീജിയണുകൾ ശേഖരിക്കുന്നതിന് മുൻഗണന നൽകുകയും ചെയ്യുന്നു, അതിനാൽ 'ഗാർബേജ്-ഫസ്റ്റ്' എന്ന പേര് വന്നു. ത്രൂപുട്ടും ലേറ്റൻസിയും തമ്മിൽ നല്ലൊരു ബാലൻസ് G1GC നൽകുന്നു, ഇത് വൈവിധ്യമാർന്ന ആപ്ലിക്കേഷനുകൾക്ക് അനുയോജ്യമായ ഒരു തിരഞ്ഞെടുപ്പായി മാറുന്നു. ഇത് പോസ് സമയം ഒരു നിശ്ചിത ലക്ഷ്യത്തിന് (ഉദാഹരണത്തിന്, 200 മില്ലിസെക്കൻഡ്) താഴെ നിർത്താൻ ലക്ഷ്യമിടുന്നു.
5. ZGC (ഇസഡ് ഗാർബേജ് കളക്ടർ)
ജാവ 11-ൽ അവതരിപ്പിച്ച (ജാവ 11-ൽ പരീക്ഷണാടിസ്ഥാനത്തിൽ, ജാവ 15 മുതൽ പ്രൊഡക്ഷൻ-റെഡി) കുറഞ്ഞ ലേറ്റൻസിയുള്ള ഒരു ഗാർബേജ് കളക്ടറാണ് ZGC. ഹീപ്പ് വലുപ്പം പരിഗണിക്കാതെ, ജിസി പോസ് സമയം 10 മില്ലിസെക്കൻഡ് വരെ കുറയ്ക്കാൻ ഇത് ലക്ഷ്യമിടുന്നു. ആപ്ലിക്കേഷൻ ഏതാണ്ട് തടസ്സമില്ലാതെ പ്രവർത്തിക്കുമ്പോൾ, ZGC ഒരേസമയം പ്രവർത്തിക്കുന്നു. ഹൈ-ഫ്രീക്വൻസി ട്രേഡിംഗ് സിസ്റ്റങ്ങൾ അല്ലെങ്കിൽ ഓൺലൈൻ ഗെയിമിംഗ് പ്ലാറ്റ്ഫോമുകൾ പോലുള്ള വളരെ കുറഞ്ഞ ലേറ്റൻസി ആവശ്യമുള്ള ആപ്ലിക്കേഷനുകൾക്ക് ഇത് അനുയോജ്യമാണ്. ഒബ്ജക്റ്റ് റഫറൻസുകൾ ട്രാക്ക് ചെയ്യാൻ ZGC കളേർഡ് പോയിൻ്ററുകൾ ഉപയോഗിക്കുന്നു.
6. ഷെനൻഡോ ഗാർബേജ് കളക്ടർ
റെഡ് ഹാറ്റ് വികസിപ്പിച്ചെടുത്തതും ZGC-ക്ക് ഒരു ബദലായി കണക്കാക്കാവുന്നതുമായ ഒരു ലോ-പോസ്-ടൈം ഗാർബേജ് കളക്ടറാണ് ഷെനൻഡോ. കൺകറൻ്റ് ഗാർബേജ് കളക്ഷൻ നടത്തിക്കൊണ്ട് വളരെ കുറഞ്ഞ പോസ് സമയം നേടാൻ ഇതും ലക്ഷ്യമിടുന്നു. ഷെനൻഡോയുടെ പ്രധാന വ്യത്യാസം, ഇതിന് ഒരേസമയം ഹീപ്പ് കോംപാക്റ്റ് ചെയ്യാൻ കഴിയും, ഇത് ഫ്രാഗ്മെൻ്റേഷൻ കുറയ്ക്കാൻ സഹായിക്കും. ഓപ്പൺജെഡികെയിലും റെഡ് ഹാറ്റിൻ്റെ ജാവ വിതരണങ്ങളിലും ഷെനൻഡോ പ്രൊഡക്ഷൻ-റെഡിയാണ്. കുറഞ്ഞ പോസ് സമയത്തിനും ത്രൂപുട്ട് സ്വഭാവത്തിനും ഇത് പേരുകേട്ടതാണ്. ഷെനൻഡോ ആപ്ലിക്കേഷനുമായി പൂർണ്ണമായും ഒരുമിച്ച് പ്രവർത്തിക്കുന്നു, ഇത് ഏത് നിമിഷവും ആപ്ലിക്കേഷൻ്റെ പ്രവർത്തനം നിർത്തുന്നില്ല എന്ന നേട്ടം നൽകുന്നു. ഒരു അധിക ത്രെഡിലൂടെയാണ് ഈ പ്രവർത്തനം നടക്കുന്നത്.
പ്രധാന ജിസി ട്യൂണിംഗ് പാരാമീറ്ററുകൾ
പ്രകടനം ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന് വിവിധ പാരാമീറ്ററുകൾ ക്രമീകരിക്കുന്നത് ഗാർബേജ് കളക്ഷൻ ട്യൂണിംഗിൽ ഉൾപ്പെടുന്നു. വ്യക്തതയ്ക്കായി തരംതിരിച്ച്, പരിഗണിക്കേണ്ട ചില പ്രധാന പാരാമീറ്ററുകൾ ഇതാ:
1. ഹീപ്പ് വലുപ്പത്തിൻ്റെ കോൺഫിഗറേഷൻ
-Xms
(മിനിമം ഹീപ്പ് വലുപ്പം): പ്രാരംഭ ഹീപ്പ് വലുപ്പം സജ്ജീകരിക്കുന്നു. റൺടൈമിൽ ജെവിഎം ഹീപ്പിൻ്റെ വലുപ്പം മാറ്റുന്നത് തടയാൻ ഇത് സാധാരണയായി-Xmx
-ൻ്റെ അതേ മൂല്യത്തിലേക്ക് സജ്ജീകരിക്കുന്നത് നല്ലതാണ്.-Xmx
(പരമാവധി ഹീപ്പ് വലുപ്പം): പരമാവധി ഹീപ്പ് വലുപ്പം സജ്ജീകരിക്കുന്നു. കോൺഫിഗർ ചെയ്യേണ്ട ഏറ്റവും നിർണായകമായ പാരാമീറ്ററാണിത്. ശരിയായ മൂല്യം കണ്ടെത്തുന്നത് പരീക്ഷണങ്ങളെയും നിരീക്ഷണത്തെയും ആശ്രയിച്ചിരിക്കുന്നു. ഒരു വലിയ ഹീപ്പ് ത്രൂപുട്ട് മെച്ചപ്പെടുത്തുമെങ്കിലും, ജിസിക്ക് കൂടുതൽ കഠിനാധ്വാനം ചെയ്യേണ്ടി വന്നാൽ പോസ് സമയം വർദ്ധിപ്പിച്ചേക്കാം.-Xmn
(യംഗ് ജനറേഷൻ വലുപ്പം): യംഗ് ജനറേഷൻ്റെ വലുപ്പം വ്യക്തമാക്കുന്നു. പുതിയ ഒബ്ജക്റ്റുകൾ പ്രാരംഭമായി അലോക്കേറ്റ് ചെയ്യുന്നത് യംഗ് ജനറേഷനിലാണ്. ഒരു വലിയ യംഗ് ജനറേഷന് മൈനർ ജിസികളുടെ ആവൃത്തി കുറയ്ക്കാൻ കഴിയും. G1GC-ക്ക്, യംഗ് ജനറേഷൻ വലുപ്പം സ്വയമേവ നിയന്ത്രിക്കപ്പെടുന്നു, എന്നാൽ-XX:G1NewSizePercent
,-XX:G1MaxNewSizePercent
എന്നീ പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് ക്രമീകരിക്കാവുന്നതാണ്.
2. ഗാർബേജ് കളക്ടർ തിരഞ്ഞെടുക്കൽ
-XX:+UseSerialGC
: സീരിയൽ ജിസി പ്രവർത്തനക്ഷമമാക്കുന്നു.-XX:+UseParallelGC
: പാരലൽ ജിസി (ത്രൂപുട്ട് കളക്ടർ) പ്രവർത്തനക്ഷമമാക്കുന്നു.-XX:+UseG1GC
: G1GC പ്രവർത്തനക്ഷമമാക്കുന്നു. ഇത് ജാവ 9-ഉം അതിന് ശേഷമുള്ളവയിലും ഡിഫോൾട്ടാണ്.-XX:+UseZGC
: ZGC പ്രവർത്തനക്ഷമമാക്കുന്നു.-XX:+UseShenandoahGC
: ഷെനൻഡോ ജിസി പ്രവർത്തനക്ഷമമാക്കുന്നു.
3. G1GC-ക്കുള്ള പ്രത്യേക പാരാമീറ്ററുകൾ
-XX:MaxGCPauseMillis=
: G1GC-യുടെ ലക്ഷ്യമിടുന്ന പരമാവധി പോസ് സമയം മില്ലിസെക്കൻഡിൽ സജ്ജീകരിക്കുന്നു. ജിസി ഈ ലക്ഷ്യം കൈവരിക്കാൻ ശ്രമിക്കും, പക്ഷേ ഇതൊരു ഉറപ്പല്ല.-XX:G1HeapRegionSize=
: G1GC-ക്ക് വേണ്ടി ഹീപ്പിലെ റീജിയണുകളുടെ വലുപ്പം സജ്ജമാക്കുന്നു. റീജിയൻ്റെ വലുപ്പം വർദ്ധിപ്പിക്കുന്നത് ജിസി ഓവർഹെഡ് കുറയ്ക്കാൻ സാധ്യതയുണ്ട്.-XX:G1NewSizePercent=
: G1GC-യിൽ യംഗ് ജനറേഷനായി ഉപയോഗിക്കുന്ന ഹീപ്പിൻ്റെ മിനിമം ശതമാനം സജ്ജീകരിക്കുന്നു.-XX:G1MaxNewSizePercent=
: G1GC-യിൽ യംഗ് ജനറേഷനായി ഉപയോഗിക്കുന്ന ഹീപ്പിൻ്റെ പരമാവധി ശതമാനം സജ്ജീകരിക്കുന്നു.-XX:G1ReservePercent=
: പുതിയ ഒബ്ജക്റ്റുകളുടെ അലോക്കേഷനായി നീക്കിവച്ചിരിക്കുന്ന മെമ്മറിയുടെ അളവ്. ഡിഫോൾട്ട് മൂല്യം 10% ആണ്.-XX:G1MixedGCCountTarget=
: ഒരു സൈക്കിളിൽ മിക്സഡ് ഗാർബേജ് കളക്ഷനുകളുടെ ലക്ഷ്യം വ്യക്തമാക്കുന്നു.
4. ZGC-ക്കുള്ള പ്രത്യേക പാരാമീറ്ററുകൾ
-XX:ZUncommitDelay=
: ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിലേക്ക് മെമ്മറി അൺകമ്മിറ്റ് ചെയ്യുന്നതിന് മുമ്പ് ZGC കാത്തിരിക്കുന്ന സമയം, സെക്കൻഡിൽ.-XX:ZAllocationSpikeFactor=
: അലോക്കേഷൻ നിരക്കിനുള്ള സ്പൈക്ക് ഫാക്ടർ. ഉയർന്ന മൂല്യം സൂചിപ്പിക്കുന്നത്, ഗാർബേജ് ശേഖരിക്കുന്നതിന് ജിസിക്ക് കൂടുതൽ ശക്തമായി പ്രവർത്തിക്കാൻ അനുവാദമുണ്ടെന്നും കൂടുതൽ സിപിയു സൈക്കിളുകൾ ഉപയോഗിക്കാമെന്നുമാണ്.
5. മറ്റ് പ്രധാന പാരാമീറ്ററുകൾ
-XX:+PrintGCDetails
: ജിസി സൈക്കിളുകൾ, പോസ് സമയം, മെമ്മറി ഉപയോഗം എന്നിവയെക്കുറിച്ചുള്ള വിലപ്പെട്ട വിവരങ്ങൾ നൽകിക്കൊണ്ട് വിശദമായ ജിസി ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുന്നു. ജിസി സ്വഭാവം വിശകലനം ചെയ്യുന്നതിന് ഇത് നിർണ്ണായകമാണ്.-XX:+PrintGCTimeStamps
: ജിസി ലോഗ് ഔട്ട്പുട്ടിൽ ടൈംസ്റ്റാമ്പുകൾ ഉൾപ്പെടുത്തുന്നു.-XX:+UseStringDeduplication
(ജാവ 8u20-ഉം അതിനുശേഷമുള്ളവയും, G1GC): ഹീപ്പിലെ സമാനമായ സ്ട്രിംഗുകൾ ഡ്യൂപ്ലിക്കേറ്റ് ചെയ്യുന്നത് ഒഴിവാക്കി മെമ്മറി ഉപയോഗം കുറയ്ക്കുന്നു.-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
: നിലവിലെ ജെഡികെ-യിൽ എക്സ്പ്ലിസിറ്റ് ജിസി ഇൻവോക്കേഷനുകളുടെ ഉപയോഗം പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക. പ്രൊഡക്ഷൻ എൻവയോൺമെൻ്റിൽ പ്രകടനത്തകർച്ച തടയുന്നതിന് ഇത് ഉപയോഗപ്രദമാണ്.-XX:+HeapDumpOnOutOfMemoryError
: ഒരു OutOfMemoryError സംഭവിക്കുമ്പോൾ ഒരു ഹീപ്പ് ഡംപ് ഉണ്ടാക്കുന്നു, ഇത് മെമ്മറി ഉപയോഗം വിശദമായി വിശകലനം ചെയ്യാനും മെമ്മറി ലീക്കുകൾ കണ്ടെത്താനും അനുവദിക്കുന്നു.-XX:HeapDumpPath=
: ഹീപ്പ് ഡംപ് ഫയൽ എഴുതേണ്ട സ്ഥാനം വ്യക്തമാക്കുന്നു.
പ്രായോഗിക ജിസി ട്യൂണിംഗ് ഉദാഹരണങ്ങൾ
വിവിധ സാഹചര്യങ്ങൾക്കായുള്ള ചില പ്രായോഗിക ഉദാഹരണങ്ങൾ നോക്കാം. ഇവയെല്ലാം ഒരു തുടക്കം മാത്രമാണെന്നും നിങ്ങളുടെ പ്രത്യേക ആപ്ലിക്കേഷൻ്റെ സ്വഭാവസവിശേഷതകളെ അടിസ്ഥാനമാക്കി പരീക്ഷണങ്ങളും നിരീക്ഷണങ്ങളും ആവശ്യമാണെന്നും ഓർക്കുക. ഉചിതമായ ഒരു അടിസ്ഥാനരേഖ ലഭിക്കുന്നതിന് ആപ്ലിക്കേഷനുകൾ നിരീക്ഷിക്കേണ്ടത് പ്രധാനമാണ്. കൂടാതെ, ഹാർഡ്വെയർ അനുസരിച്ച് ഫലങ്ങൾ വ്യത്യാസപ്പെടാം.
1. ബാച്ച് പ്രോസസ്സിംഗ് ആപ്ലിക്കേഷൻ (ത്രൂപുട്ടിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു)
ബാച്ച് പ്രോസസ്സിംഗ് ആപ്ലിക്കേഷനുകൾക്ക്, സാധാരണയായി പ്രധാന ലക്ഷ്യം ത്രൂപുട്ട് പരമാവധിയാക്കുക എന്നതാണ്. കുറഞ്ഞ ലേറ്റൻസി അത്ര നിർണായകമല്ല. പാരലൽ ജിസി പലപ്പോഴും ഒരു നല്ല തിരഞ്ഞെടുപ്പാണ്.
java -Xms4g -Xmx4g -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mybatchapp.jar
ഈ ഉദാഹരണത്തിൽ, നമ്മൾ മിനിമം, മാക്സിമം ഹീപ്പ് വലുപ്പം 4GB ആയി സജ്ജീകരിക്കുന്നു, പാരലൽ ജിസി പ്രവർത്തനക്ഷമമാക്കുകയും വിശദമായ ജിസി ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുകയും ചെയ്യുന്നു.
2. വെബ് ആപ്ലിക്കേഷൻ (ലേറ്റൻസി സെൻസിറ്റീവ്)
വെബ് ആപ്ലിക്കേഷനുകൾക്ക്, നല്ല ഉപയോക്തൃ അനുഭവത്തിന് കുറഞ്ഞ ലേറ്റൻസി നിർണായകമാണ്. G1GC അല്ലെങ്കിൽ ZGC (അല്ലെങ്കിൽ ഷെനൻഡോ) ആണ് പലപ്പോഴും തിരഞ്ഞെടുക്കപ്പെടുന്നത്.
G1GC ഉപയോഗിച്ച്:
java -Xms8g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar
ഈ കോൺഫിഗറേഷൻ മിനിമം, മാക്സിമം ഹീപ്പ് വലുപ്പം 8GB ആയി സജ്ജീകരിക്കുന്നു, G1GC പ്രവർത്തനക്ഷമമാക്കുന്നു, കൂടാതെ ലക്ഷ്യമിടുന്ന പരമാവധി പോസ് സമയം 200 മില്ലിസെക്കൻഡായി സജ്ജീകരിക്കുന്നു. നിങ്ങളുടെ പ്രകടന ആവശ്യകതകൾക്കനുസരിച്ച് MaxGCPauseMillis
മൂല്യം ക്രമീകരിക്കുക.
ZGC ഉപയോഗിച്ച് (ജാവ 11+ ആവശ്യമാണ്):
java -Xms8g -Xmx8g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar
ഈ ഉദാഹരണം സമാനമായ ഹീപ്പ് കോൺഫിഗറേഷനോടൊപ്പം ZGC പ്രവർത്തനക്ഷമമാക്കുന്നു. ZGC വളരെ കുറഞ്ഞ ലേറ്റൻസിക്കായി രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതിനാൽ, സാധാരണയായി ഒരു പോസ് ടൈം ടാർഗെറ്റ് കോൺഫിഗർ ചെയ്യേണ്ടതില്ല. പ്രത്യേക സാഹചര്യങ്ങൾക്കായി നിങ്ങൾക്ക് പാരാമീറ്ററുകൾ ചേർത്തേക്കാം; ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് അലോക്കേഷൻ നിരക്ക് പ്രശ്നങ്ങളുണ്ടെങ്കിൽ, -XX:ZAllocationSpikeFactor=2
പരീക്ഷിക്കാവുന്നതാണ്.
3. ഹൈ-ഫ്രീക്വൻസി ട്രേഡിംഗ് സിസ്റ്റം (വളരെ കുറഞ്ഞ ലേറ്റൻസി)
ഹൈ-ഫ്രീക്വൻസി ട്രേഡിംഗ് സിസ്റ്റങ്ങൾക്ക്, വളരെ കുറഞ്ഞ ലേറ്റൻസി പരമപ്രധാനമാണ്. ആപ്ലിക്കേഷൻ അതിനോട് പൊരുത്തപ്പെടുന്നതാണെങ്കിൽ, ZGC ഒരു അനുയോജ്യമായ തിരഞ്ഞെടുപ്പാണ്. നിങ്ങൾ ജാവ 8 ഉപയോഗിക്കുകയാണെങ്കിൽ അല്ലെങ്കിൽ അനുയോജ്യത പ്രശ്നങ്ങളുണ്ടെങ്കിൽ, ഷെനൻഡോ പരിഗണിക്കുക.
java -Xms16g -Xmx16g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mytradingapp.jar
വെബ് ആപ്ലിക്കേഷൻ ഉദാഹരണത്തിന് സമാനമായി, നമ്മൾ ഹീപ്പ് വലുപ്പം സജ്ജീകരിക്കുകയും ZGC പ്രവർത്തനക്ഷമമാക്കുകയും ചെയ്യുന്നു. ജോലിഭാരത്തെ അടിസ്ഥാനമാക്കി ZGC-യുടെ പ്രത്യേക പാരാമീറ്ററുകൾ കൂടുതൽ ട്യൂൺ ചെയ്യുന്നത് പരിഗണിക്കുക.
4. വലിയ ഡാറ്റാസെറ്റുകളുള്ള ആപ്ലിക്കേഷനുകൾ
വളരെ വലിയ ഡാറ്റാസെറ്റുകൾ കൈകാര്യം ചെയ്യുന്ന ആപ്ലിക്കേഷനുകൾക്ക് ശ്രദ്ധാപൂർവ്വമായ പരിഗണന ആവശ്യമാണ്. ഒരു വലിയ ഹീപ്പ് വലുപ്പം ഉപയോഗിക്കേണ്ടി വന്നേക്കാം, നിരീക്ഷണം കൂടുതൽ പ്രധാനമാകും. ഡാറ്റാസെറ്റ് ചെറുതാണെങ്കിൽ, അതിൻ്റെ വലുപ്പം യംഗ് ജനറേഷൻ്റെ വലുപ്പത്തോട് അടുത്താണെങ്കിൽ ഡാറ്റ യംഗ് ജനറേഷനിൽ കാഷെ ചെയ്യാനും സാധിക്കും.
താഴെ പറയുന്ന കാര്യങ്ങൾ പരിഗണിക്കുക:
- ഒബ്ജക്റ്റ് അലോക്കേഷൻ നിരക്ക്: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ധാരാളം ഷോർട്ട്-ലിവ്ഡ് ഒബ്ജക്റ്റുകൾ ഉണ്ടാക്കുന്നുവെങ്കിൽ, യംഗ് ജനറേഷൻ മതിയായേക്കാം.
- ഒബ്ജക്റ്റിൻ്റെ ആയുസ്സ്: ഒബ്ജക്റ്റുകൾ കൂടുതൽ കാലം നിലനിൽക്കാൻ സാധ്യതയുണ്ടെങ്കിൽ, യംഗ് ജനറേഷനിൽ നിന്ന് ഓൾഡ് ജനറേഷനിലേക്കുള്ള പ്രൊമോഷൻ നിരക്ക് നിങ്ങൾ നിരീക്ഷിക്കേണ്ടതുണ്ട്.
- മെമ്മറി ഫുട്പ്രിൻ്റ്: ആപ്ലിക്കേഷൻ മെമ്മറി-ബൗണ്ട് ആണെങ്കിൽ, നിങ്ങൾക്ക് OutOfMemoryError എക്സെപ്ഷനുകൾ നേരിടുന്നുണ്ടെങ്കിൽ, ഒബ്ജക്റ്റുകളുടെ വലുപ്പം കുറയ്ക്കുകയോ അവയെ ഷോർട്ട്-ലിവ്ഡ് ആക്കുകയോ ചെയ്യുന്നത് പ്രശ്നം പരിഹരിച്ചേക്കാം.
ഒരു വലിയ ഡാറ്റാസെറ്റിന്, യംഗ് ജനറേഷൻ്റെയും ഓൾഡ് ജനറേഷൻ്റെയും അനുപാതം പ്രധാനമാണ്. കുറഞ്ഞ പോസ് സമയം നേടുന്നതിന് താഴെ പറയുന്ന ഉദാഹരണം പരിഗണിക്കുക:
java -Xms32g -Xmx32g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=30 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mydatasetapp.jar
ഈ ഉദാഹരണം ഒരു വലിയ ഹീപ്പ് (32GB) സജ്ജമാക്കുന്നു, കൂടാതെ കുറഞ്ഞ ടാർഗെറ്റ് പോസ് സമയവും ക്രമീകരിച്ച യംഗ് ജനറേഷൻ വലുപ്പവും ഉപയോഗിച്ച് G1GC ഫൈൻ-ട്യൂൺ ചെയ്യുന്നു. അതിനനുസരിച്ച് പാരാമീറ്ററുകൾ ക്രമീകരിക്കുക.
നിരീക്ഷണവും വിശകലനവും
ജിസി ട്യൂണിംഗ് ഒരു ഒറ്റത്തവണ പ്രയത്നമല്ല; ഇത് ശ്രദ്ധാപൂർവ്വമായ നിരീക്ഷണവും വിശകലനവും ആവശ്യമുള്ള ഒരു ആവർത്തന പ്രക്രിയയാണ്. നിരീക്ഷണം എങ്ങനെ സമീപിക്കാമെന്ന് ഇവിടെ വിവരിക്കുന്നു:
1. ജിസി ലോഗിംഗ്
-XX:+PrintGCDetails
, -XX:+PrintGCTimeStamps
, -Xloggc:
പോലുള്ള പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് വിശദമായ ജിസി ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുക. പോസ് സമയം, ജിസി സൈക്കിളുകളുടെ ആവൃത്തി, മെമ്മറി ഉപയോഗ പാറ്റേണുകൾ എന്നിവയുൾപ്പെടെയുള്ള ജിസി സ്വഭാവം മനസ്സിലാക്കാൻ ലോഗ് ഫയലുകൾ വിശകലനം ചെയ്യുക. ജിസി ലോഗുകൾ ദൃശ്യവൽക്കരിക്കാനും വിശകലനം ചെയ്യാനും GCViewer അല്ലെങ്കിൽ GCeasy പോലുള്ള ടൂളുകൾ ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക.
2. ആപ്ലിക്കേഷൻ പെർഫോമൻസ് മോണിറ്ററിംഗ് (APM) ടൂളുകൾ
സിപിയു ഉപയോഗം, മെമ്മറി ഉപയോഗം, പ്രതികരണ സമയം, എറർ നിരക്കുകൾ എന്നിവയുൾപ്പെടെയുള്ള ആപ്ലിക്കേഷൻ പ്രകടനം നിരീക്ഷിക്കാൻ APM ടൂളുകൾ (ഉദാ. Datadog, New Relic, AppDynamics) ഉപയോഗിക്കുക. ജിസിയുമായി ബന്ധപ്പെട്ട തടസ്സങ്ങൾ തിരിച്ചറിയാനും ആപ്ലിക്കേഷൻ സ്വഭാവത്തെക്കുറിച്ച് ഉൾക്കാഴ്ചകൾ നൽകാനും ഈ ടൂളുകൾക്ക് കഴിയും. പ്രൊമിത്തിയസ്, ഗ്രഫാന പോലുള്ള വിപണിയിലെ ടൂളുകളും തത്സമയ പ്രകടന ഉൾക്കാഴ്ചകൾ കാണാൻ ഉപയോഗിക്കാം.
3. ഹീപ്പ് ഡംപുകൾ
OutOfMemoryErrors സംഭവിക്കുമ്പോൾ ഹീപ്പ് ഡംപുകൾ എടുക്കുക (-XX:+HeapDumpOnOutOfMemoryError
, -XX:HeapDumpPath=
എന്നിവ ഉപയോഗിച്ച്). മെമ്മറി ലീക്കുകൾ കണ്ടെത്താനും ഒബ്ജക്റ്റ് അലോക്കേഷൻ പാറ്റേണുകൾ മനസ്സിലാക്കാനും എക്ലിപ്സ് MAT (മെമ്മറി അനലൈസർ ടൂൾ) പോലുള്ള ടൂളുകൾ ഉപയോഗിച്ച് ഹീപ്പ് ഡംപുകൾ വിശകലനം ചെയ്യുക. ഒരു പ്രത്യേക സമയത്തെ ആപ്ലിക്കേഷൻ്റെ മെമ്മറി ഉപയോഗത്തിൻ്റെ ഒരു സ്നാപ്പ്ഷോട്ട് ഹീപ്പ് ഡംപുകൾ നൽകുന്നു.
4. പ്രൊഫൈലിംഗ്
നിങ്ങളുടെ കോഡിലെ പ്രകടന തടസ്സങ്ങൾ കണ്ടെത്താൻ ജാവ പ്രൊഫൈലിംഗ് ടൂളുകൾ (ഉദാ. JProfiler, YourKit) ഉപയോഗിക്കുക. ഈ ടൂളുകൾക്ക് ഒബ്ജക്റ്റ് ക്രിയേഷൻ, മെത്തേഡ് കോളുകൾ, സിപിയു ഉപയോഗം എന്നിവയെക്കുറിച്ചുള്ള ഉൾക്കാഴ്ചകൾ നൽകാൻ കഴിയും, ഇത് ആപ്ലിക്കേഷൻ്റെ കോഡ് ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിലൂടെ ജിസി ട്യൂൺ ചെയ്യാൻ പരോക്ഷമായി സഹായിക്കും.
ജിസി ട്യൂണിംഗിനുള്ള മികച്ച രീതികൾ
- ഡിഫോൾട്ടുകളിൽ നിന്ന് ആരംഭിക്കുക: ജെവിഎം ഡിഫോൾട്ടുകൾ പലപ്പോഴും ഒരു നല്ല തുടക്കമാണ്. അകാലത്തിൽ അമിതമായി ട്യൂൺ ചെയ്യരുത്.
- നിങ്ങളുടെ ആപ്ലിക്കേഷൻ മനസ്സിലാക്കുക: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ ജോലിഭാരം, ഒബ്ജക്റ്റ് അലോക്കേഷൻ പാറ്റേണുകൾ, മെമ്മറി ഉപയോഗ സവിശേഷതകൾ എന്നിവ അറിയുക.
- പ്രൊഡക്ഷൻ പോലുള്ള എൻവയോൺമെൻ്റുകളിൽ പരീക്ഷിക്കുക: പ്രകടന സ്വാധീനം കൃത്യമായി വിലയിരുത്തുന്നതിന് നിങ്ങളുടെ പ്രൊഡക്ഷൻ എൻവയോൺമെൻ്റിനോട് സാമ്യമുള്ള എൻവയോൺമെൻ്റുകളിൽ ജിസി കോൺഫിഗറേഷനുകൾ പരീക്ഷിക്കുക.
- തുടർച്ചയായി നിരീക്ഷിക്കുക: ജിസി സ്വഭാവവും ആപ്ലിക്കേഷൻ പ്രകടനവും തുടർച്ചയായി നിരീക്ഷിക്കുക. നിരീക്ഷിച്ച ഫലങ്ങളെ അടിസ്ഥാനമാക്കി ആവശ്യാനുസരണം ട്യൂണിംഗ് പാരാമീറ്ററുകൾ ക്രമീകരിക്കുക.
- വേരിയബിളുകൾ വേർതിരിക്കുക: ട്യൂൺ ചെയ്യുമ്പോൾ, ഓരോ മാറ്റത്തിൻ്റെയും സ്വാധീനം മനസ്സിലാക്കാൻ ഒരു സമയം ഒരു പാരാമീറ്റർ മാത്രം മാറ്റുക.
- അകാല ഒപ്റ്റിമൈസേഷൻ ഒഴിവാക്കുക: വ്യക്തമായ ഡാറ്റയും വിശകലനവും ഇല്ലാതെ ഒരു സാങ്കൽപ്പിക പ്രശ്നത്തിനായി ഒപ്റ്റിമൈസ് ചെയ്യരുത്.
- കോഡ് ഒപ്റ്റിമൈസേഷൻ പരിഗണിക്കുക: ഒബ്ജക്റ്റ് ക്രിയേഷനും ഗാർബേജ് കളക്ഷൻ ഓവർഹെഡും കുറയ്ക്കുന്നതിന് നിങ്ങളുടെ കോഡ് ഒപ്റ്റിമൈസ് ചെയ്യുക. ഉദാഹരണത്തിന്, സാധ്യമാകുമ്പോഴെല്ലാം ഒബ്ജക്റ്റുകൾ പുനരുപയോഗിക്കുക.
- പുതുമ നിലനിർത്തുക: ജിസി സാങ്കേതികവിദ്യയിലെയും ജെവിഎം അപ്ഡേറ്റുകളിലെയും ഏറ്റവും പുതിയ മുന്നേറ്റങ്ങളെക്കുറിച്ച് അറിഞ്ഞിരിക്കുക. പുതിയ ജെവിഎം പതിപ്പുകളിൽ പലപ്പോഴും ഗാർബേജ് കളക്ഷനിൽ മെച്ചപ്പെടുത്തലുകൾ ഉൾപ്പെടുന്നു.
- നിങ്ങളുടെ ട്യൂണിംഗ് രേഖപ്പെടുത്തുക: ജിസി കോൺഫിഗറേഷൻ, നിങ്ങളുടെ തിരഞ്ഞെടുപ്പുകൾക്ക് പിന്നിലെ യുക്തി, പ്രകടന ഫലങ്ങൾ എന്നിവ രേഖപ്പെടുത്തുക. ഭാവിയിലെ അറ്റകുറ്റപ്പണികൾക്കും ട്രബിൾഷൂട്ടിംഗിനും ഇത് സഹായിക്കുന്നു.
ഉപസംഹാരം
ജാവ ആപ്ലിക്കേഷൻ പ്രകടന ഒപ്റ്റിമൈസേഷൻ്റെ ഒരു നിർണായക വശമാണ് ഗാർബേജ് കളക്ഷൻ ട്യൂണിംഗ്. വിവിധ ഗാർബേജ് കളക്ടറുകൾ, ട്യൂണിംഗ് പാരാമീറ്ററുകൾ, നിരീക്ഷണ രീതികൾ എന്നിവ മനസ്സിലാക്കുന്നതിലൂടെ, പ്രത്യേക പ്രകടന ആവശ്യകതകൾ നിറവേറ്റുന്നതിനായി നിങ്ങളുടെ ആപ്ലിക്കേഷനുകൾ ഫലപ്രദമായി ഒപ്റ്റിമൈസ് ചെയ്യാൻ നിങ്ങൾക്ക് കഴിയും. ജിസി ട്യൂണിംഗ് ഒരു ആവർത്തന പ്രക്രിയയാണെന്നും ഒപ്റ്റിമൽ ഫലങ്ങൾ നേടുന്നതിന് തുടർച്ചയായ നിരീക്ഷണവും വിശകലനവും ആവശ്യമാണെന്നും ഓർക്കുക. ഡിഫോൾട്ടുകളിൽ നിന്ന് ആരംഭിച്ച്, നിങ്ങളുടെ ആപ്ലിക്കേഷൻ മനസ്സിലാക്കി, നിങ്ങളുടെ ആവശ്യങ്ങൾക്ക് ഏറ്റവും അനുയോജ്യമായത് കണ്ടെത്താൻ വിവിധ കോൺഫിഗറേഷനുകൾ പരീക്ഷിക്കുക. ശരിയായ കോൺഫിഗറേഷനും നിരീക്ഷണവും ഉപയോഗിച്ച്, നിങ്ങളുടെ ആഗോള വ്യാപ്തി പരിഗണിക്കാതെ തന്നെ നിങ്ങളുടെ ജാവ ആപ്ലിക്കേഷനുകൾ കാര്യക്ഷമമായും വിശ്വസനീയമായും പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ നിങ്ങൾക്ക് കഴിയും.