Sunucunuz açıldıktan birkaç saat sonra RAM kullanımının sürekli yükseldiğini, oyunda anlık takılmaların (stuttering) başladığını veya FXServer'ın beklenmedik anlarda çöktüğünü fark ettiniz mi? Bu durum genellikle zayıf kodlanmış scriptlerin arkasında bıraktığı Lua Bellek Sızıntıları (Memory Leak) nedeniyle gerçekleşir.
2026 yılı itibarıyla FiveM altyapılarında yüksek oyuncu sayılarına ulaşmak sadece güçlü sunucu donanımıyla değil, doğru bellek yönetimiyle mümkündür. Bu rehberde hem yeni başlayan sunucu sahipleri hem de tecrübeli geliştiriciler için bellek sızıntılarını tespit etme, düzeltme ve Lua Garbage Collector (Çöp Toplayıcı) optimizasyonu adımlarını tek tek inceliyoruz.
1. Lua Bellek Sızıntısı (Memory Leak) Nedir?
Lua dilinde bir değişken, tablo veya fonksiyon referansı işi bittiğinde sistem belleğinden silinmelidir. Eğer yazdığınız kod bu veriyi hafızada unutursa ve sürekli yeni veri oluşturmaya devam ederse, RAM kullanımı artar. Buna Memory Leak adı verilir.
2. Yaygın Bellek Sızıntı Hataları ve Çözümleri
Bellek sızıntılarının %90'ı acemi script geliştiricilerinin yaptığı şu iki temel hatadan kaynaklanır:
A. Global Değişken Kullanımı (En Büyük Hata)
Scriptlerinizde local anahtar kelimesini kullanmadığınızda değişken global hafızaya kaydolur ve GC (Garbage Collection) tarafından asla temizlenmez.
❌ Hatalı Kod (`resources/[scripts]/qb-test/server.lua`):
RegisterNetEvent('item:kullan', function(itemName)
-- 'local' kullanılmadığı için playerData global tabloda birikir!
playerData = { src = source, item = itemName, time = os.time() }
TriggerClientEvent('chat:addMessage', source, { args = { playerData.item } })
end)✅ Doğru Kod:
RegisterNetEvent('item:kullan', function(itemName)
-- 'local' ile scope içinde tutulur, fonksiyon bitince GC siler.
local playerData = { src = source, item = itemName, time = os.time() }
TriggerClientEvent('chat:addMessage', source, { args = { playerData.item } })
end)B. Sonsuz Tablo Büyümesi (Clearing Tables)
Sürekli veri eklediğiniz dizileri (array/table) oyuncu oyundan çıktığında temizlemezseniz, sunucu günlerce açık kaldığında RAM gigabaytlarca şişer.
✅ Doğru Tablo Temizleme Yöntemi:
local ActivePlayersData = {}
AddEventHandler('playerDropped', function(reason)
local src = source
if ActivePlayersData[src] then
ActivePlayersData[src] = nil -- Veriyi silerek RAM'den düşmesini sağlayın
end
end)3. Lua Garbage Collection (GC) Manuel Tetikleme ve Optimizasyon
FiveM'in kullandığı Lua 5.4 runtime'ı otomatik çöp toplayıcıya sahiptir. Ancak çok yoğun veri işleyen scriptlerde GC yetersiz kalabilir. Kod seviyesinde periyodik temizlik yaptırarak RAM tüketimini kontrol altına alabilirsiniz.
Aşağıdaki kodu ağır iş yapan scriptinizin (örneğin devasa bir envanter veya garaj scripti) server.lua dosyasına ekleyebilirsiniz:
-- Her 15 dakikada bir Lua Çöp Toplayıcısını manuel tetikleme
CreateThread(function()
while true do
Wait(15 * 60 * 1000) -- 15 Dakika
local beforeKB = collectgarbage("count")
collectgarbage("collect") -- GC Çalıştır
local afterKB = collectgarbage("count")
print(string.format("^2[GC OPTİMİZASYONU] Bellek Temizlendi: %.2f MB -> %.2f MB^7", beforeKB / 1024, afterKB / 1024))
end
end)collectgarbage("collect") komutunu Wait() olmayan sık döngülerin (While loops) içine kesinlikle koymayın! Bu işlem CPU'ya anlık yük bindirebilir. Sadece geniş zaman aralıklarında (10-15 dakikada bir) kullanılmalıdır.4. Sıfırdan Optimize Altyapı Kullanımı
Sunucunuzdaki onlarca scriptin bellek sızıntılarını teker teker tespit edip düzeltmek haftalarınızı alabilir. Eğer bu optimizasyonlarla sıfırdan uğraşmak istemiyorsanız, önceden optimize edilmiş ve bellek testleri tamamlanmış DxAV1 - Roleplay Paketi paketimizi inceleyebilirsiniz.
5. Adım Adım Sunucu RAM Stabilizasyon Adımları
- 1Sorunlu Scripti Bulun: Sunucu konsoluna
resmon 1yazın veya fxserver konsolundanprofiler startkomutunu çalıştırarak RAM'i en çok tüketen scripti belirleyin. - 2Değişkenleri Denetleyin: Belirlediğiniz scriptin
server.luaveclient.luadosyalarındalocalyazılmamış tüm değişkenleri güncelleyin. - 3Event Handler Temizliği: Silinmeyen
AddEventHandlerdinleyicilerini kaldırın. - 4Sunucu CFG Ayarı:
server.cfgdosyanızda güncel FXServer artifact sürümlerini kullanarak Lua 5.4 hızlandırmalarından faydalanın.
Sıkça Sorulan Sorular (SSS)
S: Sunucumun RAM kullanımı kaç GB olmalıdır?
C: 64 kişilik standart bir FiveM roleplay sunucusu varsayılan ayarlarda 3 GB - 6 GB arası RAM tüketmelidir. Eğer 10-12 GB üzerini görüyorsanız kesinlikle bir bellek sızıntısı mevcuttur.
S: `collectgarbage()` kullanmak sunucuyu kasartır mı?
C: Hayır, doğru zaman aralıklarında (örneğin 15-30 dakikada bir) çalıştırıldığında anlık bellek birikmesini temizler ve aksine takılmaları (stuttering) önler.
S: Bellek sızıntısı müşteri tarafında (client) FPS düşürür mü?
C: Evet. Client-side scriptlerde yapılan bellek sızıntıları oyuncunun RAM ve VRAM kullanımını şişirerek oyunun çökmesine (Crash) neden olur.
