La limitation de l'application java de la mémoire et de l'utilisation de l'uc
Dire, "exécuter myApp.jar avec cpu=800 et mémoire=1024"
Ive été faire de la programmation java depuis de nombreuses années et c'est une gêne à poser cette question. Je ne sais même pas si c'est possible ou pas. Et si oui, comment?
Ce que je veux juste savoir c'est si il est possible de définir un programme java maximale de la mémoire et du processeur. J'ai soudainement pensé à cela, parce que j'ai récemment commencé à développer des applications mobiles. Je veux savoir comment l'application va se comporter sur l'appareil qui n'a que très peu de mémoire et de processeur.
J'ai vu les moteurs de physique avec démo des applications qui s'exécutent sur le navigateur ou je peut exécuter sur mon PC. Que faire si je les exécuter sur un appareil mobile? La performance sera la même? Plutôt que de développer un exemple de l'application mobile pour tester la bibliothèque de la performance, je préfère le faire fonctionner avec un précis de l'uc et de la mémoire à l'aide de mon premier PC.
J'ai essayé de googler par la voie... tout ce que je trouve le suivi et l'optimisation des performances. J'ai peut-être mauvais mots-clés.
OriginalL'auteur demotics2002 | 2011-02-10
Vous devez vous connecter pour publier un commentaire.
vous pouvez limiter l'utilisation de la mémoire par l'option-Xmx et vous pouvez limiter l'utilisation du PROCESSEUR par la définition de la priorité des processus et/ou l'affinité du PROCESSEUR.
taskset(1)
, ce qui est loin d'être évident pour beaucoup de gens. Il n'y a aucun moyen de définir l'affinité CPU à partir d'un run-of-the-moulin de la JVM. (vous pouvez le faire JNI de la magie, mais thar dragons.)oui, vous ne pouvez pas définir ni affinité ni processeur priorité par java standard options que je connais... sur windows la commande dont vous avez besoin est de commencer (sur 32 bits de windows, il n'a pas d'affinité option, tout de même)
L'utilisation de la mémoire peut être définie comme un argument comme vous l'avez mentionné. Pour le CPU, la priorité n'a pas de limite. J'ai vérifié sur google et trouvé qu'il y a des outils qui peuvent limiter l'utilisation du PROCESSEUR de traitement spécifique. Im essayant maintenant.
eh bien, si vous observez les processus dans le gestionnaire des tâches/top - oui, il va à 100% (ou de ce que les fils sont en cours d'exécution au max), mais c'est b/c vous n'obtenez pas les autres processus en compétition pour le temps PROCESSEUR. Si oui, ils bénéficient de certains avantages. Oui, le PROCESSEUR n'exécute pas le "inactif".
OriginalL'auteur
La JVM n'a aucun contrôle sur l'utilisation CPU ni de priorité.
JVM a le contrôle sur max/min, l'utilisation de la Mémoire.
Il existe une solution de contournement. Il est possible de lancer la JVM dans un autre Conteneur Docker. Et de contrôle des ressources (Mémoire, CPU, Réseau, IO) allocation pour chaque conteneur. C'est exactement la valeur ajoutée des conteneurs Docker.
Je serais fortement en désaccord, veuillez la recherche de nouveau l'architecture de Docker. La JVM est pas liée et absolument insensibles à la technologie des conteneurs. Nous sommes d'accord: Il est précaire choix de conception pour la JVM de s'appuyer sur les paramètres du conteneur.
Vous pouvez être en désaccord, mais il serait plus utile si vous google "jvm docker" à la place et vérifier à travers les deux premières ou des articles. Après cela, vous pouvez simplement exécuter 2 commandes dans le terminal de son choix, en fonction de blog.csanchez.org/2017/05/31/.... Je viens de le faire et il a confirmé mes soupçons.
La source de désaccord est la façon de spécifier et lié HW ressources (CPU, mem, le stockage, NTWK). Dans tous mes cas je suis de coder en dur les limites des ressources. Si vous essayez de calculer/calculer les limites de l'actuel conteneur des fonctionnalités que vous obtenez dans la programmation des défis, la plupart du temps peut être évité par l'utilisation de pré-bornée images.
OriginalL'auteur Dudi Boy
Dans ce scénario, il pourrait aider à exécuter l'application sur un émulateur (E. g. Android).
Avec cela, vous pouvez émuler un périphérique mobile spécifique de la Mémoire et du PROCESSEUR. Donc, vous devriez obtenir cette performance est comparable à un appareil équipé de PROCESSEUR plus lent et moins de RAM.
Android /Nokia émulateur sont gratuits et disponibles pour le téléchargement de développeur sections de Nokia/Google sites.
OriginalL'auteur Shamit Verma
https://github.com/haosdent/jcgroup
jcgroup est votre meilleur choix. Vous pouvez utiliser cette bibliothèque pour limiter le CPU actions, Disque I/O de la vitesse, de la bande passante du Réseau et etc.
OriginalL'auteur haosdent
S'il vous plaît, soyez prudent avec la mémoire et le PROCESSEUR options lors de l'exécution de la jvm 8 ou une version antérieure.
Il ya un couple de très bons articles à ce sujet. Check it out:
https://developers.redhat.com/blog/2017/03/14/java-inside-docker/
https://jaxenter.com/nobody-puts-java-container-139373.html
Cela dit, la conteneurisation est la bonne manière de faire pour microservice quelle que soit l'architecture de la pile, et la jvm n'est pas comme exception à cela. Toutefois, il est important de connaître les mises en garde.
OriginalL'auteur yuranos87
Docker offre des options de gestion des ressources pour la limitation de la cpu d'accès pour l'exécution de conteneurs docker. Jetez un oeil à la SFC planificateur options disponibles avec
docker run
de Limite d'un conteneur de ressources dans le Panneau de documents, tels que:Ces options sont également disponibles via docker-composer, lors du déploiement d'un Docker essaim /pile, comme mentionné dans Composer de la version du fichier de référence 3 sous
resources
:Remarque: que le ressource patrimoniale options dans le panneau de composer de la v2 sont maintenant limités à piles dans le la migration v3.
OriginalL'auteur zslb
Pour le CPU, vous pouvez essayer mon nouveau lib :).
https://github.com/dyorgio/cpu-watcher
Exemple d'utilisation:
OriginalL'auteur Dyorgio