Gérer un serveur Hytale, c’est un peu comme jongler : il faut maintenir une performance stable pour garantir le plaisir de jeu, tout en gérant une consommation de ressources qui peut exploser à tout moment.
Un petit groupe d’explorateurs dispersés peut mettre votre serveur à genoux plus rapidement qu’une armée de joueurs au même endroit. Face à ces pics de charge imprévisibles, le risque de lag, de baisse de TPS (Ticks Per Second) ou même de crash devient une réalité.
C’est précisément là qu’intervient le Hytale Performance Saver Plugin, un plugin conçu intelligemment pour assurer la stabilité de votre serveur Hytale. Son objectif n’est pas de limiter votre serveur, mais de gérer intelligemment la pression sur les ressources pour maintenir une expérience de jeu agréable, même dans les moments les plus intenses.
Les fonctionnalités principales
Ce plugin agit comme un gardien vigilant pour votre serveur. Il utilise plusieurs mesures d’optimisation pour gérer la consommation des ressources de manière dynamique.
Limitation des TPS (Ticks Per Second)
Pour l’expérience joueur, il est bien plus agréable d’avoir des TPS stables, même s’ils sont légèrement plus bas, que des TPS élevés mais très fluctuants. Le plugin permet de plafonner les TPS à une valeur configurable (20 par défaut) pour garantir une fluidité constante. Mieux encore, il réduit intelligemment les TPS lorsque le serveur est vide (5 par défaut), économisant ainsi des ressources précieuses quand personne n’est connecté.
Ajustement dynamique du rayon de vue
C’est la fonctionnalité la plus puissante de ce plugin. La distance d’affichage (view radius) est l’un des plus grands consommateurs de mémoire et de CPU. Le plugin surveille en permanence la santé de votre serveur :
- Pression sur le CPU : Détectée par une baisse des TPS.
- Pression sur la RAM : Détectée en observant les tentatives de nettoyage de la mémoire par Java (le fameux « garbage collection »).
Si une pression est détectée, le plugin va automatiquement et dynamiquement ajuster le rayon de vue à la baisse pour libérer des ressources. Une fois que le serveur se stabilise, il augmente à nouveau progressivement la distance d’affichage. Cette mesure est incroyablement efficace pour prévenir les crashs liés aux ressources.
Garbage Collector
Java a tendance à conserver de la mémoire même si elle n’est plus utilisée. Ce plugin observe le nombre de chunks chargés sur votre serveur. S’il détecte une forte baisse (par exemple, des joueurs qui se déconnectent ou se regroupent), il déclenche un nettoyage supplémentaire de la mémoire, s’assurant que les ressources inutilisées sont bien libérées.
Installation du plugin
L’installation est un jeu d’enfant. Il vous suffit de placer le fichier JAR du plugin, une fois téléchargé, dans le dossier mods/ de votre serveur Hytale. Redémarrez le serveur, et le plugin sera actif.
Configuration du plugin
Le plugin se configure via un unique fichier que vous devez créer : config.json. Ce fichier doit être placé dans un dossier spécifique.
Chemin du fichier de configuration : mods/Nitrado_PerformanceSaver/config.json
Ajustement des TPS (Tps)
Cette section contrôle le comportement de la limitation des TPS.
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | booléen | true | Active ou désactive la limitation des TPS sur votre serveur. |
TpsLimit | entier | 20 | Définit le nombre maximal de ticks par seconde (TPS) que le serveur tentera d’atteindre lorsque des joueurs sont connectés. Une valeur stable de 20 est idéale pour une expérience fluide. |
TpsLimitEmpty | entier | 5 | Limite les TPS lorsque le serveur est vide pour économiser les ressources. |
OnlyWorlds | tableau de chaînes | [] | Permet de restreindre l’ajustement des TPS à des mondes spécifiques. Laissez vide pour appliquer à tous les mondes. Utilisez __DEFAULT pour cibler le monde par défaut. |
InitialDelaySeconds | entier | 30 | Délai en secondes après le démarrage du serveur avant que l’ajustement des TPS ne commence. |
CheckIntervalSeconds | entier | 5 | Fréquence (en secondes) à laquelle le plugin vérifie et ajuste les TPS. |
EmptyLimitDelaySeconds | entier | 300 | Temps d’inactivité (en secondes) avant que la limite de TPS pour serveur vide ne soit appliquée. |
Ajustement du rayon de vue (ViewRadius)
Contrôle l’ajustement dynamique de la distance d’affichage en fonction de la charge du serveur.
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | booléen | true | Active ou désactive l’ajustement dynamique du rayon de vue. |
MinViewRadius | entier | 2 | Le rayon de vue minimum absolu que le plugin peut définir. Empêche une distance de vue trop faible. |
DecreaseFactor | double | 0.75 | Le facteur par lequel le rayon de vue actuel est multiplié pour le réduire. Une valeur de 0.75 signifie que le rayon passera à 75% de sa valeur précédente. |
IncreaseValue | entier | 1 | La valeur ajoutée au rayon de vue lorsqu’il est en phase de récupération (par exemple, de 8 à 9). |
InitialDelaySeconds | entier | 30 | Délai avant que le module ne commence à surveiller les performances. |
CheckIntervalSeconds | entier | 5 | Fréquence de vérification de la charge sur les ressources. |
RecoveryWaitTimeSeconds | entier | 60 | Temps d’attente (en secondes) après une stabilisation avant de tenter d’augmenter à nouveau le rayon de vue. |
RequireNotifyPermission | booléen | false | Si true, seuls les joueurs avec la permission appropriée recevront des notifications sur les changements de distance de vue. |
Moniteur de mémoire (GcMonitor)
Surveille la mémoire vive (RAM) pour détecter une pression.
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | booléen | true | Active ou désactive la détection de pression basée sur la mémoire. |
HeapThresholdRatio | double | 0.85 | Seuil d’utilisation de la RAM (85% par défaut) qui déclenche la détection de pression. |
TriggerSequenceLength | entier | 3 | Nombre d’événements de nettoyage de mémoire consécutifs avec une RAM élevée nécessaires pour déclencher une réduction du rayon de vue. |
WindowSeconds | entier | 60 | Fenêtre de temps (en secondes) pour analyser les événements de nettoyage de la mémoire. |
Moniteur des TPS (TpsMonitor)
Surveille les TPS pour détecter une pression sur le processeur (CPU).
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | booléen | true | Active ou désactive la détection de pression basée sur les TPS. |
TpsWaterMarkHigh | double | 0.75 | Ratio de TPS (75% de la limite) au-dessus duquel le rayon de vue peut commencer à récupérer. |
TpsWaterMarkLow | double | 0.6 | Ratio de TPS (60% de la limite) en dessous duquel le rayon de vue doit être réduit. |
OnlyWorlds | tableau de chaînes | [] | Restreint la surveillance des TPS à des mondes spécifiques. Laissez vide pour tous. |
AdjustmentDelaySeconds | entier | 20 | Délai en secondes entre deux ajustements du rayon de vue déclenchés par une baisse de TPS. |
Collecte des chunks (ChunkGarbageCollection)
Déclenche un nettoyage de la mémoire lorsque la décharge de chunks suggère que de la RAM peut être libérée.
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | booléen | true | Active ou désactive cette fonctionnalité. |
MinChunkCount | entier | 128 | Nombre minimum de chunks chargés avant que cette fonction ne soit active. |
ChunkDropRatioThreshold | double | 0.8 | Si le nombre de chunks tombe en dessous de ce ratio (ex: de 1000 à 799), un nettoyage est déclenché. |
GarbageCollectionDelaySeconds | entier | 300 | Temps minimum entre deux nettoyages de mémoire déclenchés par ce module. |
InitialDelaySeconds | entier | 5 | Délai avant que la surveillance des chunks ne commence. |
CheckIntervalSeconds | entier | 5 | Fréquence de vérification du nombre de chunks. |
Exemple de configuration complète
Voici un exemple du fichier config.json complet avec toutes les valeurs par défaut. Vous pouvez copier-coller ce contenu et l’adapter à vos besoins.
{
"Tps": {
"Enabled": true,
"TpsLimit": 20,
"TpsLimitEmpty": 5,
"OnlyWorlds": [],
"InitialDelaySeconds": 30,
"CheckIntervalSeconds": 5,
"EmptyLimitDelaySeconds": 300
},
"ViewRadius": {
"Enabled": true,
"MinViewRadius": 2,
"DecreaseFactor": 0.75,
"IncreaseValue": 1,
"InitialDelaySeconds": 30,
"CheckIntervalSeconds": 5,
"RecoveryWaitTimeSeconds": 60,
"RequireNotifyPermission": false,
"GcMonitor": {
"Enabled": true,
"HeapThresholdRatio": 0.85,
"TriggerSequenceLength": 3,
"WindowSeconds": 60
},
"TpsMonitor": {
"Enabled": true,
"TpsWaterMarkHigh": 0.75,
"TpsWaterMarkLow": 0.6,
"OnlyWorlds": [],
"AdjustmentDelaySeconds": 20
}
},
"ChunkGarbageCollection": {
"Enabled": true,
"MinChunkCount": 128,
"ChunkDropRatioThreshold": 0.8,
"GarbageCollectionDelaySeconds": 300,
"InitialDelaySeconds": 5,
"CheckIntervalSeconds": 5
}
}
