FiveM sunucunuzda oyuncular aniden FPS düşüşlerinden (micro-stutter), araç sürerken yaşanan 1 saniyelik mikro donmalardan (frame hitch) veya sunucunun anlık olarak donup geri gelmesinden mi şikayetçi? Çoğu sunucu sahibi hemen resmon 1 komutunu açar ve tüm kaynakların 0.04ms civarında çalıştığını görünce sorunun kaynağını bulamaz.
İşte kritik gerçek: Resmon yalnızca o anki ortalama döngü süresini gösterir; milisaniyelik CPU sıçramalarını, bloklanan ana iş parçacıklarını (thread blocking) ve senkron kilitlenmeleri yakalayamaz.
2026 standartlarında FiveM geliştiricileri, gizli performans katillerini yakalamak için FXServer'ın yerleşik Profiler aracını ve Google Chrome Tracing analiz motorunu kullanır. Bu rehberde, tek bir komutla sunucunuzdaki veya istemcinizdeki darboğazları nasıl röntgen gibi göreceğinizi adım adım inceliyoruz.
1. FiveM Profiler Nedir ve Neden Hayat Kurtarır?
Profiler, oyun motorunun ve FXServer'ın belirli sayıda kare (frame/tick) boyunca çalıştırdığı her bir fonksiyon çağrısını, döngüyü ve ağ olayını mikro-saniye hassasiyetinde kaydeden bir teşhis aracıdır.
- Resmon: Anlık ortalamayı verir, gizli patlamaları kaçırır.
- Profiler: "x scriptinin 142. satırındaki fonksiyon 45 milisaniye boyunca ana döngüyü kilitledi" diyerek sorunu doğrudan parmağıyla gösterir.
2. Adım Adım Sunucu Tarafında Profiler Kaydı Alma
Sunucu tarafında anlık tick gecikmeleri (Server Hitch Warnings) alıyorsanız txAdmin veya sunucu konsolunu kullanarak kayıt alabilirsiniz.
- 1Sunucu konsolunuza (
live console) erişin. - 2Aşağıdaki komutu girerek 500 tick boyunca kayıt başlatın:
profiler record 500- 3Kayıt bittiğinde ekranda
Profile recordeduyarısı belirecektir. Ardından bu analizi JSON dosyası olarak kaydedin:
profiler save profile_sunucu.jsonBu dosya, sunucunuzun ana dizininde (FXServer kök dizini) oluşturulacaktır.
3. İstemci (Client) Tarafında FPS Droplarını Kaydetme
Oyuncunun bilgisayarında oyun içi yaşanan anlık kasmaları teşhis etmek için F8 konsolunu kullanırız:
- 1Oyun içinde
F8konsolunu açın. - 2Tam takılmanın yaşandığı aktiviteyi yapmadan hemen önce şu komutu yazın:
profiler record 300- 3Takılmaya sebep olan eylemi gerçekleştirin (örneğin garajı açın veya kalabalık alana girin).
- 4Kayıt tamamlandığında masaüstünüze veya FiveM klasörünüze kaydetmek için:
profiler save profile_client.json4. Kaydı Chrome Tracing (Perfetto) ile Görselleştirme
Oluşturduğunuz .json dosyasını çıplak gözle okumak imkansızdır. Bunu görsel bir "Flame Graph" (Alev Grafiği) haline getireceğiz:
- 1Google Chrome veya Edge tarayıcınızı açın.
- 2Adres çubuğuna
chrome://tracingyazın (Alternatif olarak modern arayüz için ui.perfetto.dev sitesini kullanabilirsiniz). - 3Sol üstteki Load butonuna tıklayın ve kaydettiğiniz
profile_sunucu.jsondosyasını seçin. - 4Karşınıza yüzlerce yatay çubuktan oluşan bir zaman çizelgesi çıkacaktır.

Grafiği Okuma Taktikleri:
- Geniş Bloklar: Grafikte yatay olarak en çok yer kaplayan renkli blok, en çok zaman harcayan fonksiyondur.
- Kırmızı İşaretler (Hitches): Normalde 16ms sürmesi gereken bir karenin 80ms sürdüğünü gösteren devasa sıçramalardır.
- Bloğun üzerine tıkladığınızda alt panelde scriptin adı, fonksiyon ismi ve kaç milisaniye sürdüğü yazar.
5. Darboğaz Yaratan Kod Örneği ve Modern Çözümü
Profiler analizinde en sık karşılaşılan problem, her tick senkronize çalışan ağır arama döngüleridir.
❌ Hatalı Yaklaşım (Profilerde 25ms blok yaratan kod):
-- client/main.lua
-- Her karede tüm dünyadaki pedleri tarayıp yakınlık hesabı yapmak FPS katilidir!
CreateThread(function()
while true do
Wait(0)
local playerPed = PlayerPedId()
local pCoords = GetEntityCoords(playerPed)
-- GetGamePool ağır bir native çağrısıdır, her karede çağrılmamalıdır
local peds = GetGamePool('CPed')
for _, ped in ipairs(peds) do
if #(pCoords - GetEntityCoords(ped)) < 2.0 then
-- Etkileşim kontrolü
end
end
end
end)✅ Optimize Edilmiş Yaklaşım (Profilerde 0.01ms altına inen kod):
-- client/main.lua
-- Mesafeye bağlı dinamik gecikme ve sleep optimizasyonu
CreateThread(function()
while true do
local sleep = 1000
local playerPed = PlayerPedId()
local pCoords = GetEntityCoords(playerPed)
-- Havuz taramasını 1 saniyede bir yapıyoruz
local peds = GetGamePool('CPed')
for _, ped in ipairs(peds) do
if ped ~= playerPed then
local dist = #(pCoords - GetEntityCoords(ped))
if dist < 5.0 then
sleep = 0 -- Sadece çok yakındaysa çizim moduna geç
-- İşlemler
break
end
end
end
Wait(sleep)
end
end)JSON.parse, citizen::vfs veya v8::Context gibi bloklar görüyorsanız, sunucunuz aynı anda çok büyük NUI verileri veya devasa SQL tabloları aktarıyor demektir.Performans Analizleriyle Vakit Kaybetmek İstemiyor musunuz?
Sunucunuzdaki darboğazları tek tek analiz edip kodları modernize etmek ciddi bir mühendislik eforu gerektirir. Eğer tüm altyapısı önceden test edilmiş, Profiler ve Chrome Tracing testlerinden tam not almış sıfır donma garantili bir altyapı arıyorsanız, optimize edilmiş DxAV1 - Roleplay Paketi sistemlerimizi tercih edebilir ya da mevcut sunucunuzun derinlemesine optimizasyonu için profesyonel Developerlik Hizmeti ekibimizden destek alabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. profiler record komutu sunucuyu dondurur mu?
Hayır. Profiler arka planda hafif bir bellek havuzu açarak çalışır. Ancak kayıt süresini (tick sayısını) 2000'den fazla vermemelisiniz; aksi halde oluşturulan .json dosyasının boyutu gigabaytları bulabilir ve tarayıcınızda açılmayabilir.
2. Chrome Tracing yerine speedscope.app kullanabilir miyim?
Evet! speedscope.app aracı FiveM JSON profillerini mükemmel şekilde destekler. Üstelik 'Left Heavy' modu sayesinde en çok CPU tüketen scriptleri doğrudan sıralı liste halinde görebilirsiniz.
3. Resmon düşükken oyun neden takılır?
Resmon, kaynakların saniye başına harcadığı CPU zamanını ortalama alır. 1 saniye boyunca 0.01ms çalışıp tam saniyenin sonunda 100ms kilitlenen bir döngü resmon'da neredeyse hiç fark edilmez ama oyuncu ekranında devasa bir 'freeze' (donma) olarak hissedilir."
"imagePrompt": "A highly detailed cinematic scene of a modern FiveM cybernetic operations room at night, dual ultra-wide curved monitors displaying colorful flame graph profiler charts, code editors, and high-performance Los Santos roleplay cityscape blurred in the background, neon cyan and deep purple ambient lighting, Unreal Engine 5 render style, 8k resolution.
