Comment augmenter le nombre maximum de threads JVM (Linux 64bit)
2 réponses
vous pouvez utiliser un exemple de programme pour connaître la limite actuelle des threads.
si vous rencontrez Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
, cochez ces cases:
-
dans les petites machines à mémoire
chaque fil Java consomme sa propre mémoire de pile. La taille par défaut de la pile est de 1024k (=1M). Vous pouvez réduire la taille de la pile comme
java -Xss512k ...
. JVM ne peut pas être lancé si la taille de la pile est trop faible.et méfiez-vous des configurations mémoire tas: (initial)
-Xms
et (maximum)-Xmx
. Plus de mémoire est attribuée à heap, moins de mémoire disponible pour stack. -
les limites du Système
certaines valeurs de
ulimit -a
peuvent affecter une limite de thread.-
max memory size
- illimité sur la plupart des machines 64bit -
max user processes
- linux traite les threads comme les processus de -
virtual memory
- illimité sur la plupart des machines 64bit. utilisation de la mémoire virtuelle est augmenté par -Xss de configuration (par défaut 1024k)
vous pouvez modifier ces valeurs en lançant la commande
ulimit
ou en éditant/etc/security/limits.conf
. -
-
sys.kernel.threads-max
cette valeur est le nombre maximum de threads. Cochez
cat /proc/sys/kernel/threads-max
et augmentez si nécessaire.echo 999999 > /proc/sys/kernel/threads-max
ou
sys.kernel.threads-max = 999999
dans/etc/sysctl.conf
pour changer en permanence. -
sys.kernel.pid_max
si
cat /proc/sys/kernel/pid_max
est semblable à la limite actuelle, augmenter cette limite. Linux traite les threads comme des processus.echo 999999 > /proc/sys/kernel/pid_max
ou
sys.kernel.pid_max = 999999
dans/etc/sysctl.conf
pour modifier de façon permanente.et vous pourriez avoir besoin d'augmenter
sys.vm.max_map_count
, aussi. -
sys.vm.max_map_count
cat /proc/sys/vm/max_map_count
doit être au moins (2 x thread-count).Attempt to protect stack guard pages failed.
etOpenJDK 64-Bit Server VM warning: Attempt to deallocate stack guard pages failed.
sont émis par JavaThread::create_stack_guard_pages(), et il appelle os::guard_memory(). Sous Linux, cette la fonction est mprotect().echo 1999999 > /proc/sys/vm/max_map_count
ou
sys.vm.max_map_count = 1999999
dans/etc/sysctl.conf
pour changer en permanence.
informations Supplémentaires pour moderne (systemd) les systèmes linux.
il y a beaucoup de ressources à ce sujet de valeurs qui peuvent avoir besoin de retouches (l'autre réponse est une bonne source pour la plupart d'entre eux); cependant une nouvelle limite est imposée par le biais de la limite systemd "TasksMax" qui fixe les pid.max sur les cgroup.
pour les sessions de connexion le UserTasksMax par défaut est 33% de la limite du noyau pids_max (généralement 12,288) et peut être outrepassé dans /etc/systemd/logind.conf.
pour les services DefaultTasksMax par défaut est de 15% de la limite du noyau pids_max (habituellement 4,915). Vous pouvez l'Annuler pour le service en définissant TasksMax dans "systemctl edit" ou mettre à jour DefaultTasksMax dans /etc/systemd/system.conf