Faylka Swap-ka ee Maqnaa ee Server-keena Qabsaday
Bishii 24-na Sebtember, server production ah oo ka mid ah ayaa joogsaday jawaabta. Load balancer-ku wuxuu calaamadeeyay inuu caafimaad darro, aaladdayadii fogaynta ee remote-ka ahayd ma gaari karin — laakiin wax ma burburin, xusuusna looma dilin inuu wax badan isticmaalayo. Server-ku wuxuu ku dhacay thrashing: iyadoo aan swap space lahayn oo containers-ka xusuus u oggolaanayeen inay ka badan yihiin waxa mishiinka ku jira, Linux wuxuu wakhtigiisa ku bixinayay in uu tuuro oo dib u akhriyo faylalka uu u baahnaa si uu u shaqeeyo, halkaasna wax yar ayuu dhaqaaqayay. Ku darista swap file 2 GB ah server kasta waxay xaliday. Casharka ugu xiisaha badan wuxuu ahaa health checks-ka.
Waxa "joogsaday" la macno ahaa
- Health checks-ka load balancer-ku wuxuu ku waayay server-kaas.
- Amarrada loo diro AWS Systems Manager waxay ku sugnaayeen "Pending" oo weligood ma socon.
- Log-yada ma jirin kill xusuus oo out-of-memory ah. Process ma dhimanin.
Toddobaad ka hor waxaan production u guurinay server-yo ARM yar oo leh 2 GB RAM kasta. Server-keena staging-ka, oo ka yar ah, ayaa si isku mid ah u joogsaday markii uu furayay container image intii deploy-ka socday.
Maxaa u ma jirin khalad xusuus?
Linux wuxuu dilaa process kaliya marka uu si dhab ah u ku xaabo xusuus aan dib loo qaadan karin. Ka hor intaas, wuxuu xusuusta ka qaadaa page cache — nuqullada faylalka uu ku hayo RAM-ka, oo ay ku jiraan code-ka barnaamij kasta oo socda.
Server-keena, xadadka xusuusta ee containers-ka oo isku geeya waxay gaareen qiyaastii 3.3 GB mishiin ku jira qiyaastii 1.8 GB oo la isticmaali karo. Caadi ahaan ma isticmaalaan dhammaantood xadkooda isku mar. Markay isticmaaleen, kernel-ku wuxuu cache-ka ka tuuri jiray code-ka barnaamijyada, kadibna mar kasta oo code-kaas dib u shaqeeyo, waa in disk-ka laga akhriyo. Wareeggaas — thrashing — wuxuu mishiinka ka dhigi karaa mid aad u jawaab la'aan ah, iyadoon farsamo ahaan xusuusta dhammaysan. Sidaas darteed waxba ma dilmo, waxna ma soo kabsado.
Swap la'aanteed, kernel-ku ma haysto meel uu xusuusta la qoondeeyay laakiin aan badanaa la isticmaalin ku rido, sidaas darteed waa inuu ka qaadaa cache-ka.
Hagaajinta
Script-ka bootstrap-ka server-ka hadda wuxuu abuuraa swap file 2 GB ah oo leh swappiness hoose (10) mar kasta oo server-ku bilaabo ama la hagaajiyo. Swappiness hoose macnaheedu waa kernel-ku wali wuxuu doorbidayaa inuu xusuusta shaqada ku hayo RAM-ka, laakiin bogagga aan badanaa la taabtay ayaa dhaqdhaqaaq ku sameyn kara disk-ka halkii ay code-ka cache-ka ka tuuri lahaayeen. Waxaan ku dabaqnay si toos ah production labada server iyo staging, pipeline-ka deploy-ka wuxuu dib u daabacaa script-ka bootstrap-ka deploy production kasta, si server la beddelay uu u helo.
Qaybta na walbahaarisay: server-ka joogsaday wuu sii joogay
Group-keena server-ka wuxuu isticmaalay EC2 health checks — "ma socdaa mishiinka?" — ma aha load balancer health checks — "ma jawaabaa codsiyada?". Sidaas darteed server-ka load balancer-ku waayay wuxuu ahaa caafimaad qaba si uu group-ku u arko. Weligeed looma beddeli doono. Production wuxuu si aamusan ugu shaqeyn lahaa server kaliya ilaa qof uu ogaado oo mid kale uu dib u bilaabo.
Beddelidda group-ka oo isticmaasha load balancer health checks waxay u muuqataa xal cad, laakiin dhibaato ayaa ku jirtaa: intii deploy-ka socota, server-yadu si ula kac ah ayay u jawaabaan endpoint-ka caafimaadka khalad, si load balancer-ku u sii daayo (eeg sida aan u gaarnay deploy-yo aan 502 lahayn). Group-ka oo server-yada ku beddela calaamaddaas waxay ku beddeli lahayd dhexda deploy kasta.
Sidaas darteed hadda waxaan ku darnay tallaabo ku jirta liistada deploy-keena: deploy kasta ka dib, hubi caafimaadka target kasta load balancer-ka, ma aha oo kaliya in deploy job-ku guuleystay. Haddii amarrada loo diro server-ka ay ku sugnaadaan "Pending", waa thrashing — dib u bilow; horey ayuu u baxay rotation-ka.
Waxa aan ka barannay
- "Ma burburaysa" ma aha "caafimaad qaba". Thrashing wuxuu soo saaraa cillad la'aan, kaliya gaabis ah oo aad u daran oo mishiinka ka dhigaysa mid jawaab la'aan ah.
- Server-yada yaryar waxay u baahan yihiin swap. Xitaa yar, oo swappiness hoose leh, waxay siinaysaa kernel meel uu xusuusta qabow ku ridi karo.
- Xadadka xusuusta ee isku geeya ka badan mishiinka waa khatar. Mararka qaarkood waad lumisaa. Ogow markaad isku dayday.
- Ogow health check-ka uu autoscaling-ku isku halayn. Health check kaliya weydiinaya "VM-ku daahan yahay?" ma beddeli doono server joogsaday.