Aller au contenu

OpenSim Statistiques

De OSWiki

Obtenir les statistiques de la région

Configurer OpenSim.ini pour afficher les statistiques de région

  • Pour définir le temps de l'intervalle d'affichage des statistiques dans la console, ajoutez ce code dans [Startup]. Temps donné en secondes.
    ; Les statistiques du simulateur sont régulièrement affichées sur la console comme INFO.
    ; Définir cette valeur sur zéro désactive cette sortie.
     LogShowStatsSeconds = 3600
 
  • Ajoutez cette configuration à la fin du fichier pour activer WebStats :
    [WebStats]
    ; Afficher les statistiques de la région via une page Web.
    ; Voir http://opensimulator.org/wiki/FAQ#Region_Statistics_on_a_Web_Page.
    ; Utilisez un navigateur Web et saisissez « Login URI » + « /SStats/ ».
    ; Par exemple : http://127.0.0.1:9000/SStats/
    enabled=true
  • Pour information, jsonSimStats est activé par défaut dans OpenSimDefauts.ini. Vous pouvez ajouter ces lignes dans votre fichier OpenSim.ini dans [Startup], cela ne changera rien mais vous aurait une trace plus accessible de cette option.
 
    ; URI des statistiques du simulateur
    ; Activez les données JSON du simulateur en définissant un nom d'URI (sensible à la casse)
    ; Renvoie les statistiques de simulation habituelles (SimFPS, ...)
    Stats_URI = "jsonSimStats"
  • Pour définir le temps de l'intervalle d'affichage des statistiques dans la console, ajoutez ce code dans [Startup]. Temps donné en secondes.
    ; Les statistiques du simulateur sont régulièrement affichées sur la console comme INFO.
    ; Définir cette valeur sur zéro désactive cette sortie.
     LogShowStatsSeconds = 3600
 
  • Ajoutez cette configuration à la fin du fichier pour activer WebStats :
    [WebStats]
    ; Afficher les statistiques de la région via une page Web.
    ; Voir http://opensimulator.org/wiki/FAQ#Region_Statistics_on_a_Web_Page.
    ; Utilisez un navigateur Web et saisissez « Login URI » + « /SStats/ ».
    ; Par exemple : http://127.0.0.1:9000/SStats/
    enabled=true
  • Pour information, jsonSimStats est activé par défaut dans OpenSimDefauts.ini. Vous pouvez ajouter ces lignes dans votre fichier OpenSim.ini dans [Startup], cela ne changera rien mais vous aurait une trace plus accessible de cette option.
 
    ; URI des statistiques du simulateur
    ; Activez les données JSON du simulateur en définissant un nom d'URI (sensible à la casse)
    ; Renvoie les statistiques de simulation habituelles (SimFPS, ...)
    Stats_URI = "jsonSimStats"

Sources

Récupérer et analyser les statistiques de région

  • Il existe plusieurs façons de récupérer les statistiques de la région.
  • Les exemples de résultats donnés ci-dessous correspondent à une Standalone locale avec deux avatars connectés.

Dans la console de la région

Exemple de résultats

16:03:42 - DIAGNOSTICS

Time now is 2026-01-22 16:03:42
Server has been running since Thursday, 2026-01-22 15:41:42
That is an elapsed time of 00:22:00.4083404

Heap allocated:  45MB 	 allocation rate (last/avg): 0.122/0.073MB/s
GCTotalCommited: 58MB 	 GCTotalAvaiable 15864MB 	 GCHMthreshold 7932MB
Process memory:      Physical 208MB 	 Paged 0MB
Peak process memory: Physical 208MB 	 Paged 0MB 	

Total process Threads 31

9 threads are being tracked:
    ID                                  NAME   LAST UPDATE (MS)   LIFETIME (MS)     PRIORITY                            STATE
    13              PollServiceWatcherThread                 89         1320014       Normal        Background, WaitSleepJoin
    15                    MapBlocks (Region)               1001         1319139       Normal        Background, WaitSleepJoin
    16                Yengine sleep (Region)               1515         1319088       Normal        Background, WaitSleepJoin
    17                     YScript0 (Region)               1426         1319087       Normal        Background, WaitSleepJoin
    18                     YScript1 (Region)               2428         1319087       Normal        Background, WaitSleepJoin
    19             Incoming Packets (Region)                 79         1318960       Normal        Background, WaitSleepJoin
    20             Outgoing Packets (Region)                 14         1318960       Normal        Background, WaitSleepJoin
    21              AsyncLSLCmdHandlerThread                 24         1318630       Normal        Background, WaitSleepJoin
    22                    Heartbeat-(Region)                 73         1318565       Normal                    WaitSleepJoin

Framework main threadpool 
workers:    1 (1000 / 16)
Completion: 0 (1000 / 1)

Threadpool (excluding script engine pools)
Thread pool used           : SmartThreadPool
Max threads                : 300
Min threads                : 2
Allocated threads          : 5
In use threads             : 3
Work items waiting         : 0

Total process threads: 31

Analyse des statistiques de la console

Données Description Valeur Commentaires
Time now Jour et heure actuelle 2026-01-22 16:03:42
Server has been running since Durée de fonctionnement du serveur 00:22:00.4083404 C'est-à-dire à peu près 22 minutes
Heap allocated Mémoire dynamique allouée (RAM allouée). 45 Mo C'est la mémoire que le processus a explicitement réservée. C'est une partie spécifique de la mémoire physique qui a été allouée par le processus à la volée et qui peut être libérée ultérieurement.

Sur Linux, vous pouvez trouver la quantité de RAM disponible avec la commande free -h

allocation rate (last/avg) Taux d'allocation (dernier / moyenne)
  • Dernier taux : taux d'allocation de mémoire le plus récent observé
  • Moyenne : taux d'allocation moyen par 1 seconde.
  • 0.122 Mo
  • 0.073Mo par seconde.
  • Dernier taux : Le système a ajouté cette quantité de mémoire à la mémoire dynamique à ce moment-là.
  • Moyenne : Cette valeur pourrait être négative et indiquer que le système a relâché de la mémoire plutôt que d'en avoir alloué.
GCTotalCommited Mémoire totale réservée 58 Mo Ce terme indique combien de mémoire a été réservée au total, ce qui peut inclure la mémoire pour les objets qui seront gérés et libérés par le ramasse miette(Garbage Collector GB) . Elle est souvent supérieure à la mémoire dynamique allouée, car elle prend en compte tous les objets ( Instance de classe, tableaux, etc.) et ressources (fichiers ouverts, connexion réseau, etc.) que le système doit gérer.
GCTotalAvaiable Mémoire totale disponible 15864 Mo ( ≈ 16Go)
  • GCTotalAvailable fait référence à la quantité totale de mémoire encore disponible pour l'allocation par le gestionnaire de mémoire dans un système.
  • Une bonne quantité de mémoire disponible permet au processus d'obtenir rapidement de la mémoire et ne pas être ralenti.
GCHMthreshold Seuil de mémoire du ramasse-miettes (Garbage Collection Heap Memory threshold) 7932 Mo (≈ 8Go)
  • GCHMthreshold représente le seuil de mémoire au-delà duquel le mécanisme de garbage collection s'active pour libérer de la mémoire.
  • Problème : GC fait comme si une application s'exécutait seule sur une machine. L'application peut consommer une quantité importante de mémoire sans tenir compte des autres applications en cours d'exécution. Cela peut entraîner des performances sous-optimales et une concurrence pour les ressources. Consultez la page Configuration pour GC
Process memory : Physical Mémoire physique du processus 208 Mo Cette mémoire est composée de la mémoire dynamique allouée et d'autres types de mémoires nécessaires au fonctionnement du processus. C'est l'espace réel occupé en RAM par le processus à un instant donné. Cela inclut à la fois les allocations dynamiques et statiques.
Process memory : Paged Mémoire paginée du processus 0 Mo La mémoire paginée permet d'accroître la capacité de la mémoire RAM physique du processus en utilisant temporairement une mémoire virtuelle tirée de l'espace libre réservé à d'autres composants du système.
Peak process memory : Physical Pic de mémoire physique du processus. 208Mo
Peak process memory : Paged Pic de mémoire paginée du processus. 0 Mo
Total process Threads Total des threads de processus. 31

Un thread, ou fil d’exécution, est une unité d'exécution d'un processus qui peut s'exécuter en parallèle avec d'autres threads. Cela permet à un programme de réaliser plusieurs tâches simultanément, ce qui signifie qu'un thread peut continuer son exécution sans bloquer les autres. Dans certaines situations, cela peut améliorer l'efficacité et la réactivité du code.
Indicateurs d'un trop grand nombre de threads

  • Consommation excessive de ressources : CPU, Swap
  • Blocages ou ralentissements
  • Diminution des performances : temps de latence long
  • Erreurs dans les logs, exceptions générées lors de l'exécution de threads.
Tracked threads Threads suivis dans le rapport de performance affiché dans la console d'OpenSim. 9

Il semble y avoir toujours les mêmes 9 threads, pour une standalone ou une région connectée à une grille.

ID Nom Dernière mise à jour (ms) Durée de vie (ms) Priorité État Description
13 PollServiceWatcherThread 89 1320014 Normal Arrière-plan, Attente Suivi des services
15 MapBlocks (Region) 1001 1319139 Normal Arrière-plan, Attente Gestion de la carte
16 Yengine sleep (Region) 1515 1319088 Normal Arrière-plan, Attente Économie de ressources
17 YScript0 (Region) 1426 1319087 Normal Arrière-plan, Attente Exécution de scripts
18 YScript1 (Region) 2428 1319087 Normal Arrière-plan, Attente Exécution de scripts
19 Incoming Packets (Region) 79 1318960 Normal Arrière-plan, Attente Réception de données
20 Outgoing Packets (Region) 14 1318960 Normal Arrière-plan, Attente Envoi de mises à jour
21 AsyncLSLCmdHandlerThread 24 1318630 Normal Arrière-plan, Attente Traitement asynchrone des scripts
22 Heartbeat-(Region) 73 1318565 Normal Arrière-plan, Attente Vérification de l'état
  • La plupart des threads sont associés à la région , son nom est indiqué entre parenthèses à coté du nom du thread.
  • La plupart des threads sont dans un état d’attente (WaitSleepJoin) , ce qui est normal pour des opérations qui attendent des événements ou des données.
  • Si Durée de vie (Lifetime) est grand, cela indique que le thread fonctionnent depuis longtemps et que les processus sont stables. Cela peut aussi indiquer qu'il y a une certaine charge sur les ressources au fil du temps.
Framework main threadpool Threadpool principal
  • Workers  : nombre de threads actifs dans le pool qui sont actuellement en cours d'exécution. Cela indique combien de threads sont disponibles pour traiter des tâches.
  • Completion : nombre de tâches qui ont été complétées par le pool de threads.
  • 1 (1000 / 16)
  • 0 (1000 / 1)
  • Un pool de threads est une collection de threads pré-initialisés qui peuvent être utilisés pour exécuter des tâches de manière efficace.
  • Framework main threadpool : Ensemble principal de threads pré-initialisés utilisés pour exécuter des tâches en parallèle dans le framework .NET.
Workers 1 : un seul thread est actuellement actif dans le pool.
(1000 / 16) : ?
Completion 0 : aucune tâche n’a encore été finalisée depuis que le pool de threads a été initialisé.
(1000 / 1) : ?
Pool de threads (à l'exclusion des pools de moteurs de scripts)
Thread pool used Thread pool utilisé / Groupe de threads utilisé SmartThreadPool Dans OpenSimDefaults.ini vous trouverez dans la section [Startup] la configuration du paramètre async_call_method qui définit le Thread pool utilisé.

En utilisant ce paramètre dans OpenSim.ini sour [Startup], vous pourrez choisir entre 3 méthodes : QueueUserWorkItem, SmartThreadPool et Thread.
La méthode par défaut est SmartThreadPool

    ; Définit la méthode qu'OpenSim utilisera pour déclencher des événements asynchrones
    ;. Les valeurs valides sont ,
    ; QueueUserWorkItem, SmartThreadPool et Thread.
    async_call_method = SmartThreadPool
Max threads Nombre maximal de threads à allouer au pool de threads 300
  • Ce paramètre qui aide à éviter la surcharge du système en limitant le nombre de threads actifs à un certain niveau.
  • Dans OpenSimDefaults.ini vous trouverez dans la section [Startup] le paramètre MaxPoolThreads. Si vous utilisez SmartThreadPool et que vous voulez diminuer ou augmenter ce maximum, copié le code suivant dans OpenSim.ini sour [Startup] et définissez une nouvelle valeur.
    ; Nombre maximal de threads à allouer au pool de threads FireAndForget
    ; lors de l'exécution avec l'option SmartThreadPool ci-dessus
    MaxPoolThreads = 300
Min threads Minimum de threads toujours actifs dans le pool. 2 Ce paramètre garantit que certaines tâches peuvent être traitées même en période de faible activité.
Allocated threads Nombre de threads qui ont été alloués à ce moment précis 5 Il y a actuellement 5 threads prêts à exécuter des tâches, mais ce nombre peut augmenter jusqu'à 300 si nécessaire.
In use threads Threads en cours d'utilisation 3
Work items waiting Éléments de travail en attente 0 Dans ce cas, tous les travaux soumis au pool sont actuellement en cours de traitement, ce qui est un signe positif d'efficacité.

Sur une page web à l'adresse http://<domaine>:<port de la région>/SStats

Cette page devrait être mise à jour automatiquement, il n'est pas nécessaire de l'actualiser.

Exemple d'affichage

Home

# Users Total # Sessions Total Avg Client FPS Avg Client Mem Use Avg Sim FPS Avg Ping KB Out Total l KB In Total
2 2 1.1270192 973214 10.543559 24.334679 1819.0166 125.203125

Client

ClientVersion Count/% SimFPS
Firestorm-Releasex64 7.2.2.79439 2/100% 10.543559

Sessions

FirstName LastName SessionEnd SessionLength Client
test 001 1/22/2026 - 2:47 PM Firestorm-Releasex64 7.2.2.79439
test 002 1/22/2026 - 3:00 PM Firestorm-Releasex64 7.2.2.79439

Analyse de l'affichage

  • 🏗️

Statistiques de jsonSimStats

Code de la page web PHP

<?php
/**
 * Page pour obtenir et afficher les statistiques de simulation.
 * Code créé par Acryline Erin.
 * Code libre d'utilisation.
 * Date : 22 janvier 2026
 */

// Trouver les données
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost:9000/jsonSimStats");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");

// Réponse 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);

// Vérification des erreurs cURL
if ($json === false) {
    echo 'Erreur cURL: ' . curl_error($ch);
} else {
    // Décoder la réponse JSON
    $response = json_decode($json);
    
    // Vérification de la validité de l'objet JSON
    if (json_last_error() === JSON_ERROR_NONE) {
        // Afficher la réponse
        echo "&lt;pre&gt;";
        print_r($response);
        echo "&lt;/pre&gt;";
    } else {
        echo "Erreur de décodage JSON : " . json_last_error_msg();
    }
}

curl_close($ch);
?>


Exemple de résultats

stdClass Object
(
    [Dilatn] => 1
    [SimFPS] => 55.1
    [PhyFPS] => 55.1
    [AgntUp] => 0
    [RootAg] => 2
    [ChldAg] => 0
    [NPCAg] => 0
    [Prims] => 4
    [AtvPrm] => 0
    [AtvScr] => 4
    [ScrLPS] => 0
    [ScrEPS] => 0
    [PktsIn] => 3
    [PktOut] => 3
    [PendDl] => 0
    [PendUl] => 0
    [UnackB] => 0
    [TotlFt] => 18.15
    [NetFt] => 0
    [PhysFt] => 0.09
    [OthrFt] => 0
    [AgntFt] => 0
    [ImgsFt] => 0
    [FrameDilatn] => 1
    [Logging in Users] => 0
    [GeoPrims] => 1
    [Mesh Objects] => 3==
    [Script Engine Thread Count] => 0
    [RegionName] => Region
    [Util Thread Count] => 3
    [System Thread Count] => 31
    [System Thread Active] => 1
    [ProcMem] => 212604
    [Memory] => 45
    [Uptime] => 00:21:53.4804530
    [Version] => OpenSim 0.9.3.0 Nessie Dev 

Analyse des statistiques de jsonSimStats

Paramètre Signification Information
Dilatn Dilatation temporelle : Ce paramètre indique comment le temps dans la simulation est dilaté par rapport au temps réel. Une valeur de 1.0 signifie que le temps de la simulation s'écoule à la même vitesse que le temps réel (à vérifier).
SimFPS Représente le nombre d'images par seconde (FPS) que le simulateur parvient à produire. Plus ce chiffre est élevé, plus l'expérience utilisateur est fluide.
PhyFPS Indique le nombre de frames par seconde utilisées pour le traitement des calculs physiques dans la simulation.
AgntUp Mises à jour des agents (utilisateurs) par seconde.
RootAg Représente le nombre total d'agents principaux (avec des privilèges spaciaux) sur la simulation.
ChldAg Représente le nombre total d'utilisateurs normaux sur la simulation.
NPCAg Nombre de personnages non joueur (PNJ) sur la simulation.
Prims Nombre total de primitives (objets) dans la région.
AtvPrm Nombre de prims actives
AtvScr Nombre de scripts actifs
ScrLPS Ce nombre représente le volume de code des scripts qui s'exécute chaque seconde.
ScrEPS Exécution de script par Seconde : Ce paramètre indique le nombre d'exécutions de scripts qui se déroulent chaque seconde.
PktsIn Paquets entrants par seconde  : Indique le nombre de paquets de données reçus par le simulateur chaque seconde.
PktOut Paquets sortants par seconde : indique le nombre de paquets envoyés par le simulateur vers les clients chaque seconde.
PendDl Téléchargements en attente : Représente le nombre de téléchargements qui sont en attente de traitement par le serveur.
PendUl Téléchargements en attente : Correspond au nombre d'upload en attente pour le serveur.
UnackB Octets non reconnus : Indique le nombre d'octets qui ont été envoyés mais pas encore reconnus par le destinataire.
TotlFt Temps total du frame : Montre le temps global que prend un frame pour être traité par le simulateur.
NetFt Temps de frame réseau : Indique le temps pris pour traiter les opérations liées au réseau dans une frame.
PhysFt Temps de frame physique : Montre le temps pris pour le traitement des calculs physiques dans une frame.
OthrFt Temps de frame autre : Indique le temps consacré à d'autres opérations non spécifiquement liées à la physique ou au réseau.
AgntFt Temps de frame des agents : Montre le temps pris pour traiter les mises à jour des agents dans une frame.
ImgsFt Temps de frame d'images : Indique le temps passé à traiter les images ou textures dans une frame.
FrameDilatn
Logging in Users Nombre d'utilisateurs qui se connecte à ce moment.
GeoPrims Nombre de primitives géométriques, indiquant des objets complexes dans la scène. (Mieux définir)
Mesh Objects Nombre d'objets maillés (meshes) dans la région.
Script Engine Thread Count Nombre de Threads du Moteur de Script : Cela indique combien de threads sont en cours d'utilisation pour exécuter les scripts dans le simulateur.
RegionName Nom de la région OpenSim.
Util Thread Count Ce paramètre indique combien de threads sont utilisés pour gérer les connexions et les interactions des utilisateurs dans la simulation.(Vérifier ?)
System Thread Count Représente le nombre total de threads que le système d'exploitation utilise pour exécuter le simulateur. Cela inclut tous les types de tâches gérées par le système.
System Thread Active Indique combien de ces threads système sont actuellement en cours d'exécution. Un nombre faible peut signifier que le simulateur ou le système est peu chargé.
ProcMem Mémoire utilisée par le serveur (processus).
Memory Pourcentage de mémoire allouée utilisée.
Uptime Temps depuis lequel le serveur est opérationnel (en heures, minutes, secondes).
Version Indique la version de votre serveur OpenSim.

Statistiques du viewer

Ouvrir la fenêtre des statistiques

  • Utilisez le raccouci clavier CTRL + SHIFT + 1. La fenêtre des statistiques ci-dessous s'ouvre.

Analyse des paramètres

Statistiques de Base

  • 🏗️

Statistique avancées

  • 🏗️

Statistiques du simulateur

  • 🏗️