【问题标题】:Changing the limit of maximum number of pthreads by an application更改应用程序的最大 pthread 数限制
【发布时间】:2009-12-22 15:48:50
【问题描述】:

是否可以通过任何方式更改进程可以创建的 pthread 数量的限制? 目前在我的 linux 系统上,我可以创建大约 380 个线程,但我想增加它,只要内存可用。

【问题讨论】:

  • 有趣...您是否考虑过这种系统设计的一些含义?想到单点故障 (SPOF)。
  • 我不是专家,但我敢打赌,拥有超过 380 个线程会使您的处理器因上下文切换而不堪重负。线程的上下文切换比单独的进程要少,但是您仍然必须保存程序计数器和寄存器文件,也许还有一些我忘记的东西。你认为你需要多少线程?我建议分析您的应用程序以确定 10 个线程与 100 个线程的线程开销,然后尝试推断您的目标线程数。您可能会发现它最终不值得付出努力。或者也许我错了......
  • 我几乎不会在任何地方使用它......但我需要它来做一些实验?
  • setrlimit() 手册页 (linux.die.net/man/2/setrlimit) 说:“RLIMIT_NPROC:可以为调用进程的真实用户 ID 创建的最大线程数。”在调用 getrlimit(RLIMIT_NPROC, &rlim); 时,我得到以下资源限制:Current=4294967295 Max=4294967295
  • RLIMIT_NPROC 给出每个用户的最大线程数。

标签: pthreads limit


【解决方案1】:

减少用户的堆栈大小'ulimit -s 1024';

default: 8MB 
reduced: 1MB 

增加线程数。

设置堆栈大小:pthread_attr_setstacksize(1024)

【讨论】:

    【解决方案2】:
    cat /proc/sys/kernel/threads-max
    

    可以在 Linux 中工作,但不能在其他 UNIX 系统中工作。我认为正确的方法是

    Maximum number of threads per process - sysconf(_SC_THREAD_THREADS_MAX) failing

    适用于某些 UNIX 系统(如 HPUX),但不适用于 Solaris 或 Linux...

    【讨论】:

      【解决方案3】:

      您的问题是您没有在有问题的线程上调用 pthread_detach。这告诉 pthread 与每个线程关联的资源将在线程终止时被释放。您必须在所有线程上调用 pthread_join 或 pthread_release 来释放线程资源。这意味着您还必须在 pthread_join 取消处理程序中调用 pthread_detach 或泄漏。

      【讨论】:

        【解决方案4】:

        看看这个:

        Maximum number of threads per process in Linux?

        看看这可能与您的问题有关:

        Serve one client with each server thread

        【讨论】:

        • cat /proc/sys/kernel/threads-max 显示16384。但我不能创建超过 380 个 pthread。我什至尝试将一个空白函数作为线程的主体。
        • 在 380 个线程之后,我得到 EAGAIN 作为 pthread_create() 的返回值,根据 pthread_create() 手册页是“系统缺乏创建另一个线程所需的资源,或者系统强加将超出进程 {PTHREAD_THREADS_MAX} 中线程总数的限制。"
        • 您在测试 32 位应用程序吗?如果是这样,您是否检查过在创建 381 线程时是否有足够的空间用于新线程的堆栈?
        • 或者进程的虚拟内存大小可能存在限制。你可以看到限制运行ulimit -a
        • 虚拟内存大小限制为unlimited
        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2022-06-13
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 1970-01-01
        • 2023-03-27
        • 2018-07-11
        相关资源
        最近更新 更多