gpt4 book ai didi

java - 如何增加最大 JVM 线程数(Linux 64 位)

转载 作者:IT王子 更新时间:2023-10-29 00:23:11 35 4
gpt4 key购买 nike

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

最佳答案

您可以使用 sample program找出当前的线程限制。

如果您遇到 Exception in thread "main"java.lang.OutOfMemoryError: unable to create new native thread,检查这些:

  1. 在小内存机器中

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

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

  2. 系统限制

    ulimit -a 中的某些值会影响线程限制。

    • 最大内存大小 - 在大多数 64 位机器上没有限制
    • 最大用户进程 - linux 将线程视为进程
    • 虚拟内存 - 在大多数 64 位机器上没有限制。 -Xss配置增加虚拟内存使用量(默认1024k)

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

  3. 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 中永久更改。

  4. 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

  5. sys.vm.max_map_count

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

    Attempt to protect stack guard pages failed. and 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 中永久更改。

关于java - 如何增加最大 JVM 线程数(Linux 64 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452302/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com