JavaRush /Java блогу /Random-KY /Java эс тутумун башкаруу боюнча колдонмо (жана кодуңузду ...
pandaFromMinsk
Деңгээл
Минск

Java эс тутумун башкаруу боюнча колдонмо (жана кодуңузду сактоо)

Группада жарыяланган
Котормочунун эскертүүсү: нотаны которуу каалоосу июнь айынын таңында аны метродо жарым уктап жатып окугандан кийин пайда болгон. Максаттуу аудитория: Java дүйнөсүндө алгачкы кадамдарын жасап жаткан адамдар жана алардын негизги техникалык бorминин же каалоосунун табиятынан улам, Java капотунун астына кирип, бардык “электродинамикалык” процесстерди үйрөнүүнү абдан каалашат. Муну окугандар үчүн бул JVM жана GC конфигурациялоо дүйнөсүнө саякат үчүн башталгыч чекит болот деп ишенем. Адал шамал! Бул жердеги оригиналдуу макала Иштеп чыгуучу катары, сиз Java тиркемесиндеги мүчүлүштүктөрдү тазалап, керектүү жерде иштешине жетишүү үчүн сансыз сааттарды коротасыз. Сыноо учурунда сиз тиркеме акырындап жайыраак иштеп жатканын байкайсыз, акырында ал толугу менен бузулат же жөн эле начар иштешин көрсөтөт. Акыры, эс тутумдун агып кетишин кабыл алыңыз. Таштанды жыйноочу Java бул агып кетүү менен күрөшүү үчүн колунан келгендин баарын кылат. Бирок ушул сыяктуу жагдайларга туш болгондо жасай турган нерселер көп. Сизге эстутумдун агып кеткен чалууларын аныктоо, себептерин аныктоо жана жалпы колдонмонун иштешине таасир этүүдө Java таштанды жыйгычынын ролун түшүнүү жолдору керек.

Java эс тутумунун агып кетүүсүнүн негизги белгилери

Тиркеменин эс тутумдун агып кетүү көйгөйлөрү бар экенин көрсөткөн бир нече белгилер бар. Колдонмонун күтүлбөгөн жерден бузулушуна караганда, аткаруунун бир аз төмөндөшү эс тутумдун агып кетишин гана көрсөтөт. Көйгөй иш учурунда же тиркеме чоң көлөмдөгү маалымат менен иштей баштаганда же, тескерисинче, сиз тиркемени масштабдай баштаганда гана пайда болушу мүмкүн. Колдонмо, балким, эстутумдагы катаны көрсөтөт. Эгер сиз тиркемени кайра иштетип, эң жакшы нерсеге үмүттөнсөңүз, агып кеткен жер оңдолгонго чейин кайталанган каталарга туш болосуз. Жалпысынан, эстутумдун агып кетиши эстутумду бошотуунун ордуна an object шилтемелери топтолгондо болот. Алар бардык жеткorктүү эстутумду ээлейт жана тиркемеге керектүү ресурстарга кирүү мүмкүнчүлүгүн бербейт.

Конфигурация каталары эстутумдун агып кетиши катары пайда болот

Java эс тутумунда көйгөйлөрдү жаратуучу жагдайларды карап чыгып, анализ жүргүзүүдөн мурун, изилдөө такыр башка көйгөйгө байланыштуу эмес экенине ынануу керек. Кээ бир эстутумда жок каталар конфигурация каталары сыяктуу ар кандай каталардан улам пайда болот. Колдонмонун үймөк эстутуму аз болушу мүмкүн же системадагы башка колдонмолор менен карама-каршы келиши мүмкүн. Эгерде сиз эстутумдун аздыгы жөнүндө айта баштасаңыз, бирок эмнеден агып жатканын түшүнө албасаңыз, колдонмону башкача караңыз. Сиз жыйынтыктоочу жипке өзгөртүүлөрдү киргизишиңиз же Java класстарынын сыпаттамаларын жана кээ бир кошумча маалыматтарды сактоо үчүн JVM эс тутумунун аймагы болгон туруктуу муун мейкиндигин көбөйтүү керек экендигин табасыз.

Эстутумду көзөмөлдөө куралдарынын артыкчылыктары

Эстутумга мониторинг жүргүзүү куралдары Java тиркемесинин жеткorктүү ресурстарды колдонуусун көбүрөөк көрүүнү камсыз кылат. Бул программаны колдонуу менен, сиз эс тутумдун агып кетиши жана башка аткаруу инциденттери көйгөйүнүн түпкү тамырын издөөнү кыскартууга кадам жасайсыз. Куралдар бир нече категорияда болот жана сиз эс тутумдун агып кетиши менен күрөшүп жатсаңыз да, көйгөйдү кантип туура белгилөө керектигин жана эмне туура эмес болгонун билүү үчүн ар кандай тиркемелерди колдонуу керек болушу мүмкүн. Үймөк дамп файлдары Java эстутумун талдоо үчүн керектүү маалыматты берет. Бул учурда, сиз эки куралды колдонушуңуз керек: бири таштанды файлын түзүү үчүн, экинчиси деталдуу талдоо үчүн. Бул чечим колдонмо менен эмне болуп жаткандыгы жөнүндө толук маалымат берет. Курал мүмкүн болгон көйгөйлөрдүн ордун аныктагандан кийин жана окуя болгон жерди так аныктоо үчүн аймакты тарытуу үчүн иштейт. Жана бул убакыт аралыгы сыноо жана катанын эң узак жана эң кайгылуу бөлүгүнүн учуру. Эстутум анализатору сиздин codeуңуздагы бир нече көйгөйлөрдү көрсөтөт, бирок сиз колдонмоңуз кандай көйгөйлөргө туш болуп жатканын так билбейсиз. Эгер сиз дагы эле ошол эле катага туш болсоңуз, кайра баштаңыз жана башка мүмкүн болгон катанын үстүндө иштеңиз. Бир убакта бирден өзгөртүү киргизип, катаны кайталаганга аракет кылыңыз. Ката шарттарын кайталоо үчүн колдонмону бир нече убакытка иштетишиңиз керек болот. Эгерде биринчи сыноо учурунда эстутум агып кетсе, тиркемени сынап көрүңүз. Колдонмо аз көлөмдөгү маалымат менен жакшы иштеши мүмкүн, бирок чоң көлөмдөгү маалыматтар менен иштөөдө кайра эле ошол эле каталарды кетириши мүмкүн. Эгерде ошол эле ката дагы эле кайталана берсе, сиз кайра башташыңыз керек жана башка мүмкүн болгон себепти издешиңиз керек. Эстутумга мониторинг жүргүзүү куралдары тиркеме толук иштегенден кийин алардын пайдалуулугун далилдейт. Иштеп чыгуучу көйгөйгө кирип, келечекте алардын программалоо ыкмаларын жакшыртууга жардам берүү үчүн жана Java оор жүктөмдө кандай иштээрин көрүү үчүн, сиз JVMдин иштешин алыстан көзөмөлдөп, иштебей калган учурларды проактивдүү түрдө аныктай аласыз. Көптөгөн чечимдерге "коркунуч" эскертүү режимдери же башка ушул сыяктуу режимдер кирет, ошондуктан иштеп чыгуучу эмне туура эмес болуп жатканын дароо биле алат. Ар бир иштеп чыгуучу критикалык тиркеменин өндүрүш учурунда кыйроого учурашын каалаbyte жана колдонмо токтоп турганда ондогон же жүз миңдеген долларларды жоготушуна алып келет, андыктан эстутумду көзөмөлдөө куралдары иштеп чыгуучунун жооп берүү убактысын кыскартат. Эс тутумга мониторинг жүргүзүү тиркемелери сизге дароо диагностикалык процессти баштоого мүмкүндүк берет, сизден кардарга кайрылууну суранбастан, ал жерде эч ким сизге кандай ката болгонун же колдонмо кандай ката codeун жаратканын так айтып бербейт. Эгер сиз көп учурда Java тиркемеңиздин эс тутумуна жана иштешине байланыштуу көйгөйлөргө чөмүлүп калсаңыз, тестирлөө процессине терең сүңгүңүз. Өнүгүү процессиндеги ар бир алсыз жерди аныктап, тестирлөө стратегияларыңызды өзгөртүңүз. Кесиптештериңиз менен кеңешип, тестирлөө ыкмаларыңызды учурдагы мыкты тажрыйбалар менен салыштырыңыз. Кээде codeдун кичинекей бөлүгүн кайра карап чыгып, андан кийин бүтүндөй тиркемеге туруктуу таасирин камсыз кылуу керек.

Java эстутумунда таштанды чогултуучунун ролу жана эс тутумдун агып кетиши

Javaдагы таштанды жыйноочу колдонмонун иштешинде жана эстутумда негизги ролду ойнойт. Ал пайдаланылбаган (өлгөн) an objectтерди издеп, аларды жок кылат. Бул an objectтер мындан ары эстутумду ээлебейт, андыктан колдонмоңуз ресурстун жеткorктүүлүгүн камсыз кылууну улантат. Кээде тиркеме өлүк an objectтерди алып салуу үчүн GCге жетиштүү убакыт же ресурстар бербейт жана алар чогулат. Сиз өлдү деп эсептеген an objectтерге активдүү кирүү мүмкүнчүлүгү бар кырдаалга туш болушуңуз мүмкүн. Таштанды жыйноочу бул боюнча эч нерсе кыла алbyte, анткени... анын автоматташтырылган эс башкаруу механизми активдүү an objectтерди айланып өтөт. Эреже катары, таштанды жыйноочу өз алдынча иштейт, бирок эс тутумдун оор көйгөйлөрүнө жооп берүү үчүн анын жүрүм-турумун тууралоо керек. Бирок, GC өзү аткаруу көйгөйлөрүн жаратышы мүмкүн.

GC аймактары

Таштанды жыйноочу монтажды оптималдаштыруу үчүн an objectтерди ар кандай аймактарга бөлөт. Жаш муун тез өчүүчү an objectтерди камтыйт. Таштанды жыйноочу көп учурда тазалоого туура келген учурдан баштап ушул аймакта иштейт. Белгилүү бир мөөнөткө жеткенден кийин тирүү калган an objectтер Эски муунга өткөрүлөт. Эски муундун аймагында an objectтер көпкө чейин сакталып, коллектор тарабынан көп чыгарылbyte. Бирок, коллектор масштабда иштеп жатканда, колдонмо чоң операциядан өтөт, анда коллектор таштандыларды тазалоо үчүн жандуу an objectтерди карап чыгат. Натыйжада, колдонуу an objectтери акыркы туруктуу генерациялоо аймагында жайгашкан. Адатта, бул an objectтер керектүү JVM метадайындарын камтыйт. Тиркеме Туруктуу муундарда көп таштанды чыгарbyte, бирок класстар керек болбой калганда класстарды алып салуу үчүн коллектор керек.

Таштанды жыйноочу менен жооп убактысынын ортосундагы байланыш

Таштанды жыйноочу тиркеме жиптеринин аткарылышынын артыкчылыктуулугуна карабастан, аларды аякташын күтпөстөн токтотот. Бул көрүнүш "Дүйнөнү токтотуу" окуясы деп аталат. Таштанды жыйноочунун Жаш муун аймагы иштөөгө анча деле таасир этпейт, бирок ГК интенсивдүү тазалоо иштерин жүргүзүп жатса, көйгөйлөр байкалат. Сиз Жаш муундун жашы жете элек ГК тынымсыз иштеп турган же Эски муун көзөмөлдөнбөгөн абалга туш болосуз. Мындай кырдаалда, бул коллектордук аймактын өлчөмүн көбөйтүүнү талап кылган аткаруу менен Жаш муун жыштыгын тең салмактоо керек. Таштанды жыйгычтын Туруктуу муун жана Эски муун аймактары колдонмонун иштешине жана эстутумду колдонууга олуттуу таасирин тийгизет. Бул ири таштанды тазалоо операциясы өлүк an objectтерди түртүп чыгаруу үчүн үймөктөн өтөт. Процесс кичине курууга караганда көбүрөөк убакытты талап кылат жана аткаруунун таасири көбүрөөк убакытты талап кылышы мүмкүн. Скрабдын интенсивдүүлүгү жогору жана Эски муундун аянты чоң болгондо, "Дүйнөнү токтотуу" окуяларынан улам бардык тиркеменин иштеши начарлайт. Таштанды жыйноону оптималдаштыруу үчүн программанын канчалык көп иштетилгенин, жалпы аткарууга тийгизген таасирин жана мониторингдин жыштыгын азайтуу үчүн колдонмонун жөндөөлөрүн кантип тууралоо керек экенин көзөмөлдөө керек. Сизге бир эле an objectти бир нече жолу орнотулган an objectти аныктоо керек болушу мүмкүн, ал тиркеме жайгаштыруудан өзүн тосмолоосуз, же бүт системаны кармап турган кысуу чекиттерин табышыңыз керек болушу мүмкүн. Балансты туура алуу үчүн процессордун жүктөлүшүнөн баштап таштанды жыйноочу циклдерге чейин, айрыкча Жаш жана Кары муун тең салмактуу эмес болсо, бардыгына кылдат көңүл бурууну талап кылат. Эс тутумдун агып кетишин чечүү жана таштанды чогултууну оптималдаштыруу Java тиркемесинин иштешин жакшыртууга жардам берет. Сиз түзмө-түз көп кыймылдуу бөлүктөрдү жонглёрдоп жатасыз. Бирок катачылыктарды аныктоонун туура ыкмасы жана катуу көрүнүштү камсыз кылуу үчүн иштелип чыккан талдоо куралдары менен туннелдин аягындагы жарыкка жетесиз. Болбосо, сиз аткарууга байланыштуу көйгөйлөргө туш болосуз. Эстутумду кылдат жайгаштыруу жана мониторинг Java тиркемесинде маанилүү ролду ойнойт. Колдонмоңузду оптималдаштыруу жана эстутумдагы каталарды болтурбоо үчүн таштанды чогултуу, an objectти жок кылуу жана аткаруунун ортосундагы өз ара аракеттенүүнү толук көзөмөлдөшүңүз керек. Мониторинг куралдары мүмкүн болуучу көйгөйлөрдүн үстүндө турууга жана эстутумду пайдалануу тенденцияларын баса көрсөтүүгө жардам берет, андыктан көйгөйлөрдү жоюуга проактивдүү мамиле жасайсыз. Эс тутумдун агып кетиши адаттагыдай жол менен көйгөйлөрдү чечүүнүн натыйжасыздыгын көрсөтүп турат, өзгөчө конфигурация параметринин туура эмес маанилерине туш болсоңуз, бирок эс-тутумга байланыштуу маселелерди чечүү жолуңузга тоскоол болгон инциденттерден тез качууга жардам берет. Java эстутумун тууралоонун жана GCнин кынтыксыздыгы сиздин иштеп чыгуу процессиңизди бир топ жеңилдетет.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION