Java la taille de la pile sur linux 64 bits
Mon but est de venir avec la figure de max de threads qui peuvent s'exécuter en parallèle. J'ai été rappelé à de nombreux liens par Google, où ils donnent un simple calcul en divisant la RAM/StackSize. En 64 bits de Linux, nous avons la taille de la pile définie comme 10 MO(ulimit-s = 10240kb) et la RAM est de 4 go, en laissant 1 GO pour l'OS et aller avec de math et je peux avoir ~300 fils ou si, mais petite application de test que j'ai écrit va jusqu'à ~32297 et puis donne de l'erreur de mémoire.
J'ai essayé différentes valeurs avec -Xss, mais ces valeurs n'ont presque pas d'effet sur le nombre de threads, il reste le même que ~32297).
Cela m'a donné l'impression que la taille de la pile est variable et décidé par l'OS et va jusqu'à max définie par nous chaque fois que nécessaire, mais à chaque fois que j'ai lu, ils ont la taille la taille de la pile est statique
Exactement ce que je suis en manque ici?
Vous pouvez avoir autant de threads que sont vos processeurs ou cœurs d'exécuter vraiment en parallèle. Sinon, la JVM planificateur de prendre des libertés à intercaler entre eux.
J'ai lu ce post, merci..Pouvez-vous s'il vous plaît suggérer ce qui pourrait être un facteur décisif derrière threads-max variable dont la valeur est 81920 est mon cas et la taille de la pile est de 10 MO et RAM de 4 GO. Pas en mesure de faire des maths pour obtenir ces chiffres
stackoverflow.com/questions/34452302/... - à la Suite de toutes ces vérifications résolu le problème pour moi.
OriginalL'auteur Gaurav | 2011-08-03
Vous devez vous connecter pour publier un commentaire.
Essayez de contrôle/modification de linux maximum la taille de la pile à l'aide de
Également vérifier pour linux threads limite
OriginalL'auteur Ankit Gupta
Ainsi, le nombre de threads par processus peut être augmentée en augmentant la quantité totale de mémoire virtuelle ou par la diminution de la taille de la pile. Mais, la diminution de la taille de la pile trop peut conduire à un code d'échec à cause d'un débordement de pile alors que max, la mémoire virtuelle est égal à la mémoire de swap.
Vous de vérifier la machine:
Mémoire Virtuelle totale:
ulimit -v
(la valeur par défaut est illimité, donc vous avez besoin pour augmenter la mémoire de swap pour augmenter ce)Total de la Taille de la Pile:
ulimit -s
(la valeur par défaut est de 8 mo)Commande pour augmenter ces valeurs:
*Remplacez la nouvelle valeur avec la valeur que vous voulez mettre en limiter.
Références:
http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/
OriginalL'auteur codersofthedark
J'ai aussi trouvé une limite d'environ 32K pour le thread en Java. Si vous avez ce nombre de threads, il est généralement préférable d'utiliser une approche différente. Sur ma machine 32K thread qui effectue
while(true) Thread.sleep(1000)
consommera 3 cœurs juste un changement de contexte.Java: Quelle est la limite pour le nombre de threads que vous pouvez créer?
OriginalL'auteur Peter Lawrey
Ce que vous avez lu n'est valable que dans l'architecture 32 bits lorsque la limite est l'espace d'adressage (2^32). Vous avez effectivement quelque chose comme ça: Xmx + MaxPermSize + (Xss * nombre de threads) < Max espace d'adressage OS permettent aux utilisateurs d'processus. Selon le système d'exploitation et le matériel que vous avez quelque chose comme 3Go comme vous l'avez dit. Mais cela n'a rien à voir avec la RAM.
Pour 64 bits de l'architecture, de l'espace d'adresse ne sera pas la limitation (2^64). Vous devriez regarder les limitations des systèmes d'exploitation comme quelqu'un l'a dit ci-dessus.
OriginalL'auteur Sylvain
C'est à cause de la pid_max noyau variable qui est par défaut 32768, mais pour les systèmes 64 bits peut être augmentée jusqu'à 4 millions.
L'explication est simple 1 thread = 1 processus qui va avoir 1 PID (process ID), donc pas plus pids, pas plus de threads.
OriginalL'auteur gneagoe