[JAVA] À propos de l'optimisation du continent vanille

Aperçu

Le défi est de savoir dans quelle mesure l'environnement du multi-serveur public de Minecraft Vanilla Continent peut être reproduit localement et optimisé autant que possible. Aucune autorisation n'a été obtenue de l'équipe de direction du continent Vanille. C'est un passe-temps personnel.

environnement

OS Windows10Home

Démarrer la batte

java -jar -Xmx7168M -Dfile.encoding=utf-8 paperclip-605.jar

Base de données

MariaDB pour la commodité d'utiliser XAMPP. Je ne sais pas si le continent Vanilla est MySQL ou MariaDB.


# mysql --version
mysql  Ver 15.1 Distrib 10.1.38-MariaDB, for Win64 (AMD64)

Mémoire

Allocation de 7 Go Il semble que le continent Vanilla alloue 15 Go sur 32 Go (voir Wiki non officiel, anciennes informations et peut être différent maintenant), mais c'est la limite car mon PC n'a que 16 Go.

Essayer

Eh bien, j'ai essayé des choses

Essayez de reproduire

Nom du plugin version
CoreProtect 2.16.3
dynmap 3.0-beta-3-160
WorldEdit 1.13.105
MorkazSk 1.2
ColoredSigns 2.2
Skript 2.3.6
Essentials 2.16.1.154
ClearLag 3.0.3
ArmorStandEditor 1.13-21
goBrush 2.0
skDragon 0.14.999
Chairs 5.0
Test(PL auto-fabriqué pour vérification) 1.0-SNAPSHOT
SkQuery 3.6.4
WorldBorder 1.9.0
LWC 2.1.2-dd8c289
Votifier 1.9
ConsoleSpamFix 1.6.2
PowerNBT 0.8.9.3
Multiverse-Core 3.0.0-SNAPSHOT-b760
WorldGuard 7.0.0-beta-03;e51a220
SK-NBeeT 2.3.0
Citizens 2.0.25-SNAPSHOT (build 1669)
Sentinel 1.8.5 (build 242)
FastAsyncWorldEdit 1.13-breaking
skRayFall 1.9.15
LunaChat 2.8.9
Skematic 2.2b
PermissionsEx 1.23.4
skUtilities 0.9.2
EssentialsSpawn 2.16.1.154
UndineMailer 1.8.1
WorldEditSelectionVisualizer 1.6.5
SharpSK 1.6.3
MCBans 4.4.4
SkUniversal 2.6
WarpPortals 5.6.3
Skellett 1.9.6b
TuSKe 1.8.2-Pikachu-IronApollo-Patch-4

(La liste ci-dessus a écrit le plug-in en une minute juste pour cela, car il est étonnamment ennuyeux de tabuler les versions installées.) De plus, Citizens a une version payante et une version gratuite, mais cette fois j'ai utilisé la version gratuite à des fins de vérification uniquement. (Il n'y a aucune différence de fonctionnalité. Pour maintenir la motivation, j'aimerais que vous utilisiez la version payante si possible.)

Je vais le démarrer pour le moment

J'ai préparé l'environnement ci-dessus, je suis d'accord avec le CLUF et je l'ai démarré pour le moment. Puisque les MCBans, etc. sont inclus, je sais qu'il ne démarrera pas d'un seul coup. Pourtant… image.png ClearLag, un plug-in qui collecte les objets abandonnés et réduit le décalage en effaçant régulièrement les foules (qui est probablement désactivé sur le continent Vanilla), a craché des erreurs et n'a pas pu être lancé docilement. Est-ce que java.lang.IllegalArgumentException: Collection is empty signifie que les éléments requis dans le fichier de configuration ne peuvent pas être lus? → Suite à son remplacement par la fourche suivante, elle a disparu avant que je ne le sache.

AussiImage.png Un plug-in d'édition NBT appelé PowerNBT a également généré une erreur avec une instruction appelée au démarrage. Considérant java.lang.RuntimeException: no such method et les sources ci-dessous, il semble qu'il ne parvient pas à accéder directement au programme serveur en utilisant la fonction appelée réflexion. Cette méthode n'est pas la méthode recommandée et doit être réécrite pour chaque mise à niveau de version, elle se produit donc lorsque le plug-in 1.12.2 est installé en 1.13.2. Ce plug-in semble avoir cessé de se mettre à jour dans la 1.12.1, il semble donc que cette erreur se produise. À la suite de quelques recherches, on a découvert que le fork de ce plug-in semble supporter la version 1.13.2, je vais donc le remplacer ici. Fourchette empruntée: https://github.com/steakteam/PowerNBT/releases L'erreur Power NBT a maintenant disparu. Le plug-in TuSKe ne semble pas être pris en charge par la famille principale, je l'ai donc remplacé par fork. Fourchette empruntée: https://github.com/IronApollo/TuSKe/releases

Le résultat du travail ci-dessusImage.png Une fiche de portail appelée WarpPortals génère des erreurs (ignorées car il n'y a pas de problème pour collecter les statistiques de la fiche), mais il a été confirmé que les autres peuvent être démarrées sans problème. Cette fois, c'est l'environnement de reproduction.

En disant ça

Puisque la base de données n'est pas du tout utilisée dans l'état de démarrage mentionné ci-dessus, définissez-la aussi près que possible de l'environnement du continent vanille. image.png

Modifié pour enregistrer CoreProtect et Modern LWC dans MariaDB. Dynmap prend également en charge MySQL (MariaDB), mais comme il n'y avait aucune preuve qu'il a été enregistré dans MySQL, il sera omis au stade de la reproduction.

En outre, il y a généralement 9 mondes, nethers, 5 mondes réinitialisés et mondes d'événements sur le continent Vanilla (à ma connaissance). Par conséquent, même dans cette vérification, seul le nombre de ces mondes sera préparé. (La génération mondiale est modérée car les spécifications du PC ne peuvent pas y résister.) image.png (J'ai supprimé rimokko parce que je me suis souvenu plus tard que Rimokko était le nom mondial "monde")

Mesurons la situation actuelle pour le moment

Temps de démarrage: 1 minute 36 secondes Il est mesuré par la commande / memory d'Essential. image.png

optimisation

Je vais essayer d'optimiser diverses choses à partir de l'environnement de reproduction ci-dessus.

Mise à jour de la version de Paper Spigot

Mis à jour à 626

Supprimer les plugins Skript

Le système Skript est réputé pour être lourd, il est donc supprimé et les fonctions implémentées dans ceux-ci sont implémentées par des plug-ins tels que Java / Kotlin pour réduire le poids.

Migrer PermissionEx vers LuckPerms

Puisque le développement de PermissionEx est déjà terminé, on ne peut pas s'attendre à une optimisation future et ce n'est pas bon pour la sécurité, nous allons donc passer à LuckPerms.

Pour le moment, je vais essayer de mesurer jusqu'ici

Temps de démarrage: 1 minute 28 secondes image.png La mémoire libre augmente à mesure que le nombre de plug-ins diminue.

J'ai essayé de créer Dynmap MySQL

image.png MySQL consomme plus de mémoire, mais IO est plus rapide.

Remplacement des portails Warp (pas fait cette fois)

WarpPortals est un ancien plug-in, et bien qu'il ne fonctionne pas avec 1.13.2, il n'y a aucune garantie qu'il fonctionnera dans le futur, donc je pense que vous devriez envisager de le remplacer.

Conclusion / discussion

Skript n'est pas un plug-in à utiliser avec du gros maquereau

Puisque Skript décrit son contenu dans un fichier texte, IO prend du temps. En outre, plus il y a de plug-ins d'extension installés, plus la mémoire est consommée. Si vous souhaitez implémenter avec Skript et écrire un plug, le plug a un degré de liberté plus élevé tel que l'optimisation et vous pouvez faire beaucoup de choses, donc s'il n'y a pas de raison particulière pour Skript, il est préférable de l'implémenter avec un plug. Je pense (c'est mon avis. Si vous avez des objections ou des suggestions, laissez un commentaire). De plus, lors de l'implémentation d'une combinaison de plug-ins distribués, cela doit être pris en compte car cela ne changera pas si le nombre devient trop grand.

Arrêter PermissionEx

Cela fait environ un an et demi depuis la fin du développement, alors arrêtons-le.

A propos de Saba Ochi

Récemment, sur le continent Vanille, cela peut survenir plusieurs fois dans une journée, mais dans cette vérification, il n'a pas été possible de reproduire le maquereau car le temps de démarrage du serveur était court, donc les détails de la cause N'est pas connu. J'ai envisagé de le démarrer pendant longtemps et de le vérifier, mais je ne pouvais pas en raison de la commodité de transporter un PC.

Considérant l'introduction du proxy inverse

Il existe un proxy inverse, qui peut réduire la charge sur le serveur ou servir de bouclier contre les attaques DDoS en intercalant un autre serveur entre le serveur et le lecteur. Sur le continent Vanilla, le DNS est désormais directement dirigé vers les serveurs, ce qui facilite le lancement d'attaques, donc je pense que vous devriez envisager de déployer un proxy inverse.

À propos du système d'exploitation

Étant donné qu'il dispose de 32 Go de mémoire, je pense que l'allocation de 15 Go donne trop de mémoire au système d'exploitation. Cela ne peut pas être aidé tant que le système d'exploitation est Windows, mais en changeant le système d'exploitation en Windows Server ou Linux (CentOS, etc.), la mémoire occupée par le système d'exploitation peut être réduite, la mémoire qui peut être allouée au serveur augmente et Linux est utilisé. Dans ce cas, vous pouvez obtenir des informations plus détaillées telles que l'utilisation de la mémoire et l'utilisation du processeur que Windows. S'il y a des gens qui peuvent gérer Linux, il vaut mieux utiliser Linux. (Priorité basse)

finalement

Pardonnez-moi pour la gestion du continent vanille, en particulier M. Tama, le propriétaire du Saba, et l'auteur, qui est un Sabamin, même s'il gère habituellement le serveur. Merci pour votre soutien continu dans la gestion des serveurs.

Ajout / correction

2019/5/28 Il a été souligné sur Twitter que ce serait trompeur, alors je l'ai révisé. Également clairement indiqué que c'est l'opinion de l'auteur.

Recommended Posts

À propos de l'optimisation du continent vanille
Pensez à la transformation Janken par l'optimisation
Penser les menus par l'optimisation des combinaisons
À propos du traitement d'optimisation du graphe de calcul dans tf.function
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres