0Pricing
Lua Academy · Ders

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
end

Sayı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
end

Profil 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

  1. Lua 5.2+'da _ENV Modeli
  2. Kısıtlı Bir Korumalı Alan Oluşturma
  3. Korumalı Alan Kaçışlarını Önleme
  4. Kaynak Sınırları ve Enstrümantasyon
← Lua Academy Sayfasına Dön