2011-05-13 2 views
2

Salut Je veux faire un site web en utilisant le serveur java et tomcat. Le site Web définira la limite de capacité et de mémoire pour chaque utilisateur pour tous leurs processus sur un serveur. Par exemple pour chaque utilisateur% 3 cpu et 100mb limite de mémoire.Comment je peux définir la limite de cpu et de mémoire pour un processus dans Java?

Comment puis-je le faire? Merci

+0

Vous pouvez limiter la mémoire de chaque utilisateur en lui donnant son propre processus Tomcat, mais cela ne limitera pas l'utilisation du processeur. –

+1

Habituellement, la limite de la CPU est un paramètre du système d'exploitation correspondant aux applications. Je pense que les logiciels sur le système d'exploitation utilisent toujours autant de puissance de traitement que possible. Je n'ai jamais entendu parler de Java capable de restreindre son propre usage. Regardez mes paramètres de tomcat ou les paramètres de système d'exploitation serait ma première estimation. –

+0

Je l'ai cherché pendant presque 2 ans. Je n'ai pas trouvé de bonne solution jusqu'à présent. J'ai même demandé comment implémenter une JVM dans une JVM, mais les projets pour cela ont été abandonnés. Donc, je vais faire votre question préférée :) – mschonaker

Répondre

1

Ce n'est pas possible avec un processus Tomcat. Vous devez générer plusieurs processus enfants, chacun avec ses propres paramètres (-Xmx100m OU spécifique à l'OS) et les paramètres spécifiques à l'OS pour contrôler le quota CPU. En fonction de la malveillance de vos utilisateurs, vous pouvez également limiter le nombre de descripteurs de fichiers disponibles, plages de ports, quotas de disques, etc. A la fin, il peut être utile de placer le processus de chaque utilisateur dans une VM et/ou une prison .

0

Aucun mécanisme n'est disponible en Java pour imposer des limites à l'utilisation des ressources de threads. La seule façon de le faire est de faire en sorte que le système d'exploitation sous-jacent le fasse, ce qui vous obligera probablement à créer une JVM distincte pour chaque restriction, et elle ne sera pas portable sur plusieurs plates-formes.

Notez que vous pouvez définir une limite de temporisation pour un appel de fonction (à l'aide de Executor) et que la plupart des opérations sont interrompues. Cela pourrait être assez bon pour vous. Si vous avez besoin de plus, vous avez encore besoin du système d'exploitation pour intervenir.

Questions connexes