Kaynak Sınırları ve Enstrümantasyon
Talimatları saymak ve CPU bütçelerini uygulamak için debug.sethook kullanın.
Kaynak Sınırları ve Enstrümantasyon, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Kaynak Sınırları Neden Gerekli?
Güvenilmeyen kod sonsuza kadar çalışarak (CPU), çok büyük miktarlarda bellek ayırarak veya aşırı çıktı üreterek DoS'a neden olabilir. Kaynak sınırları ana makineyi korur.
debug.sethook ile CPU Sınırı
Yürütülen yönergeleri sayınız ve sınır aşıldığında işlemi durdurunuz.
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
endSayımın Ayrıntı Düzeyi
sethook işlevinin üçüncü bağımsız değişkeni olan count, kancanın ne sıklıkta çalışacağını belirler. Daha küçük değerler daha doğrudur, ancak ek yükü artırır. 50-500 yaygın bir aralıktır.
collectgarbage ile Bellek Sınırı
Kanca içinde bellek kullanımını denetleyiniz ve bir eşiği aşarsa işlemi durdurunuz.
local MEM_LIMIT_KB = 1024 -- 1 MB
debug.sethook(function()
if collectgarbage("count") > MEM_LIMIT_KB then
error("Memory limit exceeded")
end
end, "", 200)Gerçek Süre Sınırı
Gerçek süreyi yönerge sayısı yerine veya ona ek olarak sınırlamak için os.clock() ile birleştiriniz.
local deadline = os.clock() + 0.5 -- 500ms
debug.sethook(function()
if os.clock() > deadline then
error("Time limit exceeded")
end
end, "", 100)Çıktı Sınırı
Korumalı alanın print işlevini sararak yazılan baytları sayınız ve bir sınır aşıldıktan sonra sonraki çıktıları reddediniz.
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
endProfil Oluşturma için Araçlandırma
Korumalı alandaki kodun araçlandırılmış çağrı grafiğini oluşturmak için "call" ve "return" kanca olaylarını kullanınız.
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")Eş Yordam Kancaları
debug.sethook sınırları iş parçacığı başına uygulanır. Korumalı alandaki kod eş yordamlar oluşturuyorsa her eş yordam için ayrı ayrı kanca ayarlayınız.
Kaynak Kullanımını Raporlama
Korumalı alan yürütüldükten sonra şunları raporlayınız: yürütülen yönerge sayısı, kullanılan bellek, çıktı uzunluğu ve geçen süre. Bu bilgiler kötüye kullanımın tespiti ve kota uygulaması için yararlıdır.
İç İçe Korumalı Alanlar
Korumalı alandaki bir eklenti kendisi alt korumalı alanlar oluşturabiliyorsa, üst korumalı alanın kaynak sınırlarının alt korumalı alana aktarılmasını veya daha da sıkılaştırılmasını sağlayınız.
Üretim Araçları
Araçlar: luasandbox (LuaJIT), seccomp özellikli Lua Docker kapsayıcıları ve belleği kesin olarak sınırlayan özel ayırıcılar. Güçlü güvenceler için bunları işletim sistemi düzeyindeki cgroups ile birleştiriniz.
Kaynak Sınırları Sorusu
debug.sethook bir CPU sınırını nasıl uygular?
Özet: Kaynak Sınırları ve Araçlandırma
CPU sınırlarını (yönerge sayısı), bellek sınırlarını (collectgarbage denetimi) ve süre sınırlarını (os.clock) uygulamak için debug.sethook kullanınız. Çıktıyı sınırlamak için print işlevini sarınız. İzleme ve kota uygulaması için yürütme sonrasında kullanımı raporlayınız.
Sıkça Sorulan Sorular
“Kaynak Sınırları ve Enstrümantasyon” dersi ücretsiz mi?
Evet — “Kaynak Sınırları ve Enstrümantasyon” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Kaynak Sınırları ve Enstrümantasyon” dersinde ne öğreneceğim?
Talimatları saymak ve CPU bütçelerini uygulamak için debug.sethook kullanın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Kaynak Sınırları ve Enstrümantasyon” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua 5.2+'da _ENV Modeli
- Kısıtlı Bir Korumalı Alan Oluşturma
- Korumalı Alan Kaçışlarını Önleme
- Kaynak Sınırları ve Enstrümantasyon