Bienvenue sur

FPSmeter

Analysez les performances de vos serveurs de jeu en temps réel, avec précision et fiabilité.

Tutoriel : Autoriser FPSMeter à analyser les performances de votre serveur FiveM/RedM

Ce script est obligatoire pour analyser les performances de vos serveurs FiveM/RedM

Vous souhaitez mesurer les performances de votre serveur FiveM/RedM via FPSMeter ? Voici un guide pour installer un petit script qui permettra à FPSMeter de récupérer les données suivantes :

  1. ✅ FPS réels (tickrate serveur)
  2. ✅ Nombre de joueurs connectés
  3. ✅ Ping moyen
  4. ✅ Uptime (durée de fonctionnement)

⚠️ Ce script n’impacte pas vos performances, ne collecte aucune donnée sensible, et peut être supprimé à tout moment.

✅ Étape 1 : Télécharger le script

Créez un dossier dans votre serveur nommé fpsmeter_server

À l’intérieur, créez deux fichiers :

fxmanifest.lua


fx_version 'cerulean'
game { 'gta5', 'rdr3' }

author 'FPSMeter'
description 'Plugin de monitoring FPS pour FiveM / RedM'
version '1.1.0'

server_script 'server.lua'
				

server.lua


local fps = 0
local ticks = 0
local lastSecond = GetGameTimer()
local startTime = os.time()

local fpsHistory = {}
local pingHistory = {}
local maxHistory = 120 -- 120 secondes d'historique (2 minutes)

local minFPS, maxFPS = nil, nil
local minPing, maxPing = nil, nil

local tickDurations = {}
local waitCounter = 0
local lastClock = os.clock()

-- Moyenne
local function average(t)
    if #t == 0 then return 0 end
    local sum = 0
    for _, v in ipairs(t) do sum = sum + v end
    return sum / #t
end

-- Écart-type
local function standardDeviation(t)
    if #t == 0 then return 0 end
    local avg = average(t)
    local sum = 0
    for _, v in ipairs(t) do
        sum = sum + ((v - avg) ^ 2)
    end
    return math.sqrt(sum / #t)
end

CreateThread(function()
    while true do
        Wait(0) -- plus proche de la vraie cadence
        ticks = ticks + 1
        waitCounter = waitCounter + 1
        local now = GetGameTimer()

        if now - lastSecond >= 1000 then
            local currentFPS = ticks
            fps = currentFPS
            table.insert(fpsHistory, currentFPS)
            if #fpsHistory > maxHistory then table.remove(fpsHistory, 1) end

            minFPS = (minFPS == nil or currentFPS < minFPS) and currentFPS or minFPS
            maxFPS = (maxFPS == nil or currentFPS > maxFPS) and currentFPS or maxFPS

            -- Ping
            local pingSum = 0
            local pings = {}
            local players = GetPlayers()
            for _, id in ipairs(players) do
                local ping = GetPlayerPing(id)
                pingSum = pingSum + ping
                table.insert(pings, ping)
            end
            local avgPing = #pings > 0 and math.floor(pingSum / #pings) or 0
            table.insert(pingHistory, avgPing)
            if #pingHistory > maxHistory then table.remove(pingHistory, 1) end

            for _, v in ipairs(pings) do
                if minPing == nil or v < minPing then minPing = v end
                if maxPing == nil or v > maxPing then maxPing = v end
            end

            -- Tick duration (temps réel écoulé entre deux ticks par os.clock)
            local nowClock = os.clock()
            local duration = nowClock - lastClock
            lastClock = nowClock
            table.insert(tickDurations, duration)
            if #tickDurations > maxHistory then table.remove(tickDurations, 1) end

            ticks = 0
            lastSecond = now
        end
    end
end)

RegisterCommand("fpsmeter", function(source, args, raw)
    if source ~= 0 and not IsPlayerAceAllowed(source, "fpsmeter.use") then
        TriggerClientEvent("chat:addMessage", source, {
            args = {"[FPSMeter]", "Vous n’êtes pas autorisé à utiliser cette commande."}
        })
        return
    end

    local players = #GetPlayers()
    local uptime = os.time() - startTime
    local avgPing = average(pingHistory)
    local avgFPS = average(fpsHistory)
    local stddevFPS = standardDeviation(fpsHistory)
    local avgTickTime = average(tickDurations)

    local output = {
        fps_avg   = math.floor(avgFPS),
        fps_min   = minFPS or avgFPS,
        fps_max   = maxFPS or avgFPS,
        fps_std   = tonumber(string.format("%.2f", stddevFPS)),
        players   = players,
        avg_ping  = math.floor(avgPing),
        min_ping  = minPing or 0,
        max_ping  = maxPing or 0,
        uptime    = uptime,
        wait_calls = waitCounter,
        avg_tick_time = tonumber(string.format("%.4f", avgTickTime))
    }

    print(json.encode(output))
end, true)

print("[fpsmeter_server] Plugin FPSMeter amélioré chargé ✅ (historique, ping, ticks, stddev, uptime).")
				

✅ Étape 2 : Ajouter la ressource dans votre server.cfg

Ajoutez cette ligne en bas de votre fichier server.cfg :

ensure fpsmeter_server

Redémarrez ensuite votre serveur.

✅ Étape 3 : Configurer le RCON de votre serveur

Assurez-vous d’avoir bien défini un mot de passe RCON dans votre server.cfg :

rcon_password "votre_mot_de_passe_rcon"

FPSMeter s’y connectera de manière sécurisée uniquement pour exécuter la commande fpsmeter.

✅ Étape 4 : Lancer l’analyse sur FPSMeter

Une fois votre serveur en ligne :

  1. Rendez-vous sur https://fpsmeter.esport-cms.net/benchmark.php
  2. Choisissez FiveM dans la liste des jeux
  3. Entrez l’IP, le port RCON et le mot de passe
  4. Lancez l’analyse !

⚠️ Votre pare-feu doit autoriser les connexions RCON TCP sur le port de votre serveur (généralement 30120).


ℹ️ À quoi sert ce script ?

Ce petit script expose une commande fpsmeter utilisable par FPSMeter via RCON. À chaque appel, il retourne :

  1. Le nombre de FPS serveur réel
  2. Le nombre de joueurs en ligne
  3. Le ping moyen
  4. Le temps d’activité du serveur

Ces données sont ensuite affichées sous forme de graphique en temps réel pendant quelques minutes pour vous permettre d’évaluer la stabilité et les performances de votre serveur, notamment après :

  1. Une mise à jour
  2. L’ajout d’un script gourmand
  3. Un changement d’hébergeur

🔐 Sécurité et confidentialité

  1. Le script ne collecte aucune donnée personnelle.
  2. Aucune donnée n’est envoyée ailleurs que sur FPSMeter lors de l’analyse.
  3. Le script est entièrement open-source et peut être désactivé à tout moment.

❌ Désinstallation

Pour désactiver le script :

  1. Supprimez le dossier fpsmeter_server
  2. Retirez la ligne start fpsmeter_server de server.cfg
  3. Redémarrez votre serveur

- ✍️ Rédigé le : 02/07/2025 à 17h32
- 🔄 Mise à jours le : 04/07/2025 à 11h13
- 🧠 Rédacteur : Slymer
- 💬 Discution communautaire : Voir la conversation