Script belleği tükendi
Bir şeyin belleği tükendi. Sunucunun ne kadar meşgul olduğuyla ilgili değil; bir şey birikiyor ve hiç temizlenmiyor.
Önce şunu yap
Sunucunun ne kadar süredir çalıştığını not et. Yeniden başlatmak bir süreliğine düzeltiyorsa, bu bir sızıntıdır.
Ne anlama gelir
Bir script çalışma zamanı, alamadığı bir belleği istedi. İstemcide bu oyunu çökertir; sunucuda genelde kaynağı, bazen süreci götürür.
Bir takılmadan farklı olarak bu bir yük belirtisi değildir — bir birikme belirtisidir. Bırakılması gereken bir şey tutuluyor.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Yalnızca büyüyen bir tablo
Katılımda eklenen ve ayrılışta hiç kaldırılmayan oyuncu başına durum. Testten sağ çıkar ve zirvede ölür.
- 2
Oluşturulan ve hiç silinmeyen varlıklar
Her biri bir havuz yuvası kadar belleğe de mal olur.
- 3
Boşaltması olmayan bir önbellek
Sınırsız bir şeyle anahtarlanmış — koordinatlar, zaman damgaları, ağ kimlikleri.
- 4
Bellekte tutulan çok büyük metinler
Komple bir tablonun JSON'ı, tüketilip bırakılmak yerine bir değişkende tutuluyor.
- 5
Gerekenden fazlasını yakalayan kapanışlar
Her kapanış upvalue'larını canlı tutar, yani saklanan tek bir geri çağırma, büyük bir tablonun hiç toplanmamasına yol açabilir.
Hangisinin seninki olduğu nasıl anlaşılır
Bir anda değil, zaman içinde izle:
-- sunucu, dakikada bir
print(('lua kb: %.0f'):format(collectgarbage('count')))Nüfus zirveleri boyunca yalnızca yükselen bir sayı bir sızıntıdır. Yükselip düşen normaldir.
Nereye bakmalı
Ölen kaynaktaki dosya kapsamındaki her tablo, ve ondan hiç silen bir şey olup olmadığı.
Nasıl düzeltilir
Çıkarken her zaman sil:
AddEventHandler('playerDropped', function()
local src = source
playerState[src] = nil -- insanların unuttuğu satır
cache[src] = nil
end)Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer sana kare kaybettiren şeyi bulur ve yeniden yazar.