15 Go>
J'utilise actuellement les indicateurs suivants pour gérer la collecte des ordures. P>
-XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=50, -XX\:+DisableExplicitGC, -XX\:+PrintGCDateStamps, -XX\:+PrintGCDetails, -Xloggc\:/home/user/logs/gc.log
4 Réponses :
Des conseils sur ce que je devrais changer afin de réduire ces longues pauses seraient grandement appréciées. P> blockQuote>
Les chances sont que le CMS GC ne peut pas suivre la quantité de déchets que votre système génère. Mais le travail que le GC doit exécuter est en fait plus étroitement em> lié à la quantité de non-ordures que votre système est retenue. P>
SO ... P>
- Essayez de réduire l'utilisation réelle de la mémoire de votre application; par exemple. En ne mettant pas en cache tant de choses, ou de réduire la taille de votre "monde". li>
- Essayez de réduire la vitesse à laquelle votre application génère des ordures. li>
- Mise à niveau vers une machine avec plus de noyaux afin qu'il y ait plus de noyaux disponibles pour exécuter les threads de GC parallèles lorsque cela est nécessaire. Li> ul>
à mysticial: p>
Oui dans le recul, il aurait peut-être préférable de mettre en œuvre le serveur en C ++. Cependant, nous ne savons rien de "le jeu". Si cela implique un modèle mondial compliqué avec des structures de données hétérogènes complexes, la mise en œuvre en C ++ pourrait-elle dire EM> que vous remplacez le problème "Pause GC" avec le problème duquel le serveur se bloque tout le temps en raison de problèmes. Avec la façon dont il gère ses structures de données. P>
Je ne voulais pas bash java. C ++ et Java ne sont que des outils différents pour différentes choses.
Le jeu Le serveur est exécuté est 'Minecraft' si cela aide du tout.
Ah ... Donc fondamentalement, votre question concerne la façon de syntoniser Minecraft. Pas vraiment un problème de programmation du tout. Vous obtiendrez de meilleures réponses pour cela sur les formums Minecraft que je pense.
Quelle version de Java utilisez-vous? http: //docs.oracle.com/javase/7/docs/technotes/guides/vm/g1.html Pour un meilleur essai de minimiser l'utilisation de variables d'instance dans une classe.Il serait préférable d'effectuer des variables locales que des variables d'instance. Il aide à gagner les performances et à la sécurité du problème de synchronisation. En fin de fonctionnement avant la sortie du programme TOUJOURS Les variables utilisées si vous utilisez des variables d'instance et réglez à nouveau lorsqu'il est requis. Il aide davantage à améliorer la performance.Besides dans la version de Java Une bonne politique de collecte des ordures est mise en œuvre.Il serait préférable de passer à une nouvelle version si cela est résistant. Vous pouvez également surveiller le temps de pause du collecteur de déchets via Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visu Visualv
Je ne suis pas un expert sur la collection de déchets Java, mais on dirait que vous faites la bonne chose en utilisant le collectionneur simultané (le drapeau USECONCMARKSWEPGC), en supposant que le serveur dispose de plusieurs processeurs. Suivez les suggestions de dépannage sur http: // www .oracle.com / Treatwork / Java / Javae / GC-Tuning-6-140523.html # CMS . Si vous avez déjà, laissez-nous savoir ce qui s'est passé quand vous les avez essayés. P>
Regarder vos journaux, je ne vois aucune pause longue. Mais le jeune GC est très fréquent. Le taux de promotion est très faible mais (la plupart des ordures défrichées par Young GC comme il le devrait). En même temps votre vieille utilisation de l'espace est faible. P>
BTW parle-t-on de serveur Minecraft? p>
Pour réduire la fréquence du jeune GC, vous devriez augmenter sa taille. Je suggérerais de commencer par Pour un si grand espace jeune, vous devez également réduire la taille de l'espace de survivant GC Tuning est un chemin d'essai et d'erreurs, vous pouvez donc avoir besoin de plus d'itérations et de peaufiner. P>
Vous pouvez trouver un couple d'articles utiles sur MU Blog P>
-xx: Newsize = 8G -XX: MAXNEWSIZE = 8G CODE> P>
-xx: survivrodio = 512 code> p>
Je crois que c'est l'une des raisons pour lesquelles de nombreuses personnes préfèrent C ++ sur Java pour des jeux en temps réel. Mais ne prenez pas mon mot i> pour cela ...
Pouvez-vous fournir des lignes spécifiques qui avaient de longues pauses de GC? Plutôt que d'attendre des lecteurs à la recherche du fichier journal des lignes
Je préfère utiliser la mémoire de tas de tas pour quelque chose de plus de 1 gb. La mémoire du tas est plus difficile à coder, mais a peu d'impact sur les temps de pause GC.
Voici une représentation graphique de mon journal GC. gontroller.com/caps/5e92647305.png Tout commentaire à ce sujet?
"C'est complètement inacceptable car il s'agit d'un serveur de jeu." I> - bien donné que nous avons établi que ce sont Minecraft, qui est un logiciel propriétaire, si le comportement est inacceptable, vous devez vous plaindre au vendeur :-)