Resurssirajat ja instrumentointi
Laskekaa käskyjä debug.sethook-funktiolla ja valvokaa suorittimen käyttöbudjetteja.
Resurssirajat ja instrumentointi on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Miksi resurssirajoituksia tarvitaan
Luottamusta vailla oleva koodi voi aiheuttaa DoS-hyökkäyksen suorittamalla koodia loputtomasti (suoritin), varaamalla valtavia määriä muistia tai tuottamalla liikaa tulostetta. Resurssirajoitukset suojaavat isäntäprosessia.
Suoritinrajoitus debug.sethook-funktiolla
Laskekaa suoritetut käskyt ja keskeyttäkää suoritus, kun raja ylittyy.
local function withCPULimit(fn, maxOps)
local ops = 0
debug.sethook(function()
ops = ops + 1
if ops > maxOps then error("CPU limit exceeded", 2) end
end, "", 50) -- check every 50 instructions
local ok, result = pcall(fn)
debug.sethook()
return ok, result
endLaskennan tarkkuus
sethook-funktion kolmas argumentti (count) määrittää, kuinka usein hook käynnistyy. Pienemmät arvot ovat tarkempia mutta aiheuttavat enemmän kuormitusta. Yleinen vaihteluväli on 50–500.
Muistirajoitus collectgarbage-funktiolla
Tarkistakaa muistin käyttö hookin sisällä ja keskeyttäkää suoritus, jos käyttö ylittää kynnysarvon.
local MEM_LIMIT_KB = 1024 -- 1 MB
debug.sethook(function()
if collectgarbage("count") > MEM_LIMIT_KB then
error("Memory limit exceeded")
end
end, "", 200)Reaaliaikarajoitus
Yhdistäkää tähän os.clock(), jotta voitte rajoittaa kulunutta reaaliaikaa käskymäärän sijaan tai sen lisäksi.
local deadline = os.clock() + 0.5 -- 500ms
debug.sethook(function()
if os.clock() > deadline then
error("Time limit exceeded")
end
end, "", 100)Tulostusrajoitus
Muuttakaa hiekkalaatikon print-funktio kääreellä, joka laskee kirjoitettujen tavujen määrän ja estää tulostuksen rajan saavuttamisen jälkeen.
local totalOutput = 0
local OUTPUT_LIMIT = 10240 -- 10 KB
env.print = function(...)
local s = table.concat({...}, "\t") .. "\n"
totalOutput = totalOutput + #s
if totalOutput > OUTPUT_LIMIT then
error("Output limit exceeded")
end
output[#output+1] = s
endProfiloinnin instrumentointi
Rakentakaa instrumentointia sisältävä kutsukaavio hiekkalaatikossa suoritettavasta koodista käyttämällä "call"- ja "return"-hook-tapahtumia.
local callGraph = {}
debug.sethook(function(event)
local info = debug.getinfo(2, "Sn")
local name = info.name or info.short_src
if event == "call" then callGraph[name] = (callGraph[name] or 0) + 1 end
end, "c")Kourutiinien hookit
debug.sethook-funktion rajoitukset koskevat kutakin säiettä erikseen. Asettakaa hookit jokaiseen kourutiiniin erikseen, jos hiekkalaatikossa suoritettava koodi luo kourutiineja.
Resurssien käytön raportointi
Raportoikaa hiekkalaatikon suorituksen jälkeen seuraavat tiedot: suoritetut käskyt, käytetty muisti, tulosteen pituus ja kulunut aika. Näistä on hyötyä väärinkäytösten havaitsemisessa ja kiintiöiden valvonnassa.
Sisäkkäiset hiekkalaatikot
Jos hiekkalaajennus voi itse luoda alihiekkalaatikoita, varmistakaa, että emohiekkalaatikon resurssirajoitukset periytyvät lapselle tai että niitä tiukennetaan sen osalta.
Tuotantoympäristön työkalut
Työkaluja: luasandbox (LuaJIT), Lua Docker -säilöt seccompilla sekä mukautetut allokaattorit, jotka rajoittavat muistin määrää ehdottomasti. Yhdistäkää näihin käyttöjärjestelmätason cgroupit vahvojen takeiden saavuttamiseksi.
Resurssirajoituksia koskeva kysymys
Miten debug.sethook toteuttaa suoritinrajoituksen?
Kertaus: resurssirajoitukset ja instrumentointi
Käyttäkää debug.sethook-funktiota suoritinrajoitusten (käskymäärän), muistirajoitusten (collectgarbage-tarkistus) ja aikarajoitusten (os.clock) toteuttamiseen. Rajoittakaa tulostusta muuttamalla print-funktio kääreellä. Raportoikaa käyttö suorituksen jälkeen seurantaa ja kiintiöiden valvontaa varten.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Resurssirajat ja instrumentointi” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Resurssirajat ja instrumentointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Resurssirajat ja instrumentointi”?
Laskekaa käskyjä debug.sethook-funktiolla ja valvokaa suorittimen käyttöbudjetteja. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Resurssirajat ja instrumentointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- _ENV-malli Lua 5.2:ssa ja uudemmissa
- Rajoitetun hiekkalaatikon rakentaminen
- Hiekkalaatikosta poistumisen estäminen
- Resurssirajat ja instrumentointi