【发布时间】:2017-10-04 19:32:44
【问题描述】:
我有一个程序可以在我的 debian 机器上创建指定数量的活动线程。当我尝试创建超过 100 的任何内容时,当它达到操作系统限制并且机器不接受任何传入连接并且执行命令时出现“-bash:fork:无法分配内存”时,我收到一条错误消息“创建线程时出错” .查看顶部命令,我看到任务在 32564 处达到最大值,并且只有 20% 的 RAM 被使用。我尝试将 ulimit -a & -n 编辑为 500000 并将 -s 编辑为 81920 但仍然没有做任何事情。非常感谢任何帮助/。
【问题讨论】:
-
为什么不增加最大用户进程数(
ulimit -u)? -
可能是一些PAM 限制。查看
/etc/security/limits.confetc)。但是创建 100 个 runnable 线程是不合理的,除非您拥有昂贵的多套接字服务器。 -
您真的需要超过 100 个线程吗?请记住,操作系统仍然必须将这些线程与其他线程交换。除非您可以告诉操作系统专门在单独的内核上执行线程,否则它仍然必须将您的线程与其他进程交换。
-
对不起,那是我的错字。我将 ulimit -u & -n 值增加到 500000。我正在尝试最大化我的服务器功能,因此我正在尝试创建尽可能多的线程。现在我的内存利用率为 20%,CPU 利用率为 10%,但操作系统设置似乎是瓶颈。一旦我弄清楚如何调整这些设置,我就会放大或缩小。
标签: c++ linux multithreading bash threadpool