当前位置:  开发笔记 > 编程语言 > 正文

如何增加JVM线程的最大数量(Linux 64位)

如何解决《如何增加JVM线程的最大数量(Linux64位)》经验,为你挑选了2个好方法。

我不能在具有15G内存的Linux机器上创建超过32k的Java线程.



1> maczniak..:

您可以使用示例程序找出当前线程限制.

如果遇到Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread,请检查以下内容:

    在小型记忆机中

    每个Java线程都使用自己的堆栈内存.默认堆栈大小为1024k(= 1M).你可以减少堆栈大小java -Xss512k ....如果堆栈大小太小,则无法启动JVM.

    并注意堆内存配置:(初始)-Xms和(最大)-Xmx.分配给堆的内存越多,堆栈的可用内存就越少.

    系统限制

    某些值ulimit -a可能会影响线程限制.

    max memory size - 大多数64位机器无限制

    max user processes - linux将线程视为进程

    virtual memory - 大多数64位机器无限制.-Xss配置增加虚拟内存使用量(默认1024k)

    您可以通过(临时)运行ulimit命令或(永久)编辑来更改这些值/etc/security/limits.conf.

    sys.kernel.threads-max

    此值是系统全局(包括非JVM进程)的最大线程数.检查cat /proc/sys/kernel/threads-max,并在必要时增加.

    echo 999999 > /proc/sys/kernel/threads-max

    sys.kernel.threads-max = 999999/etc/sysctl.conf永久改变.

    sys.kernel.pid_max

    如果cat /proc/sys/kernel/pid_max类似于电流限制,请增加此值.Linux将线程视为进程.

    echo 999999 > /proc/sys/kernel/pid_max

    sys.kernel.pid_max = 999999/etc/sysctl.conf永久改变.

    你也可能需要增加sys.vm.max_map_count.

    sys.vm.max_map_count

    cat /proc/sys/vm/max_map_count 至少应该是(2 x线程数).

    Attempt to protect stack guard pages failed.OpenJDK 64-Bit Server VM warning: Attempt to deallocate stack guard pages failed.错误消息由JavaThread :: create_stack_guard_pages()发出,它调用os :: guard_memory().在Linux中,此函数是mprotect().

    echo 1999999 > /proc/sys/vm/max_map_count

    sys.vm.max_map_count = 1999999/etc/sysctl.conf永久改变.



2> Trent Lloyd..:

现代(systemd)linux系统的附加信息.

关于这些可能需要调整的值的资源很多(另一个答案是大多数的好的来源); 但是,通过系统化的"TasksMax"限制,在cgroup上设置pids.max,会产生新的限制.

对于登录会话,UserTasksMax默认为内核限制pids_max的33%(通常为12,288),可以在/etc/systemd/logind.conf中覆盖.

对于服务,DefaultTasksMax默认值是内核限制pids_max的15%(通常为4,915).您可以通过在"systemctl edit"中设置TasksMax或在/etc/systemd/system.conf中更新DefaultTasksMax来覆盖服务.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有