Linux下一个进程可以创建的最大线程数是多少?
如何(如果可能的话)修改这个值?
Linux下一个进程可以创建的最大线程数是多少?
如何(如果可能的话)修改这个值?
当前回答
linux上合适的100k线程:
ulimit -s 256
ulimit -i 120000
echo 120000 > /proc/sys/kernel/threads-max
echo 600000 > /proc/sys/vm/max_map_count
echo 200000 > /proc/sys/kernel/pid_max
./100k-pthread-create-app
来自@Thomas的2018年更新,关于systemd系统:
/etc/systemd/logind.conf: UserTasksMax=100000
其他回答
可以通过以下命令查看当前值- 猫/proc/sys/kernel/threads-max
您还可以像这样设置值
Echo 100500 > /proc/sys/kernel/threads-max
您设置的值将根据可用的RAM页进行检查。如果线程结构占用可用RAM页面的1/8以上,则thread-max将相应降低。
我们可以看到linux中下面文件中定义的最大线程数
猫/proc/sys/kernel/threads-max
(OR)
Sysctl -a | grep threads-max
如果使用Suse操作系统,则需要选择其中一种方法
https://www.suse.com/support/kb/doc/?id=000015901
全球性的,
/etc/systemd/system.conf
DefaultTasksMax=Value
对于特定的ssh服务
/etc/systemd/system/sshd.service.d/override.conf
TasksMax=Value
说LINUX没有每个进程单独的线程限制是错误的。
Linux间接实现了每个进程最大线程数!!
number of threads = total virtual memory / (stack size*1024*1024)
因此,可以通过增加总虚拟内存或减小堆栈大小来增加每个进程的线程数。但是,当最大虚拟内存等于交换内存时,过多地减小堆栈大小会导致代码失败,因为堆栈溢出。
检查你的机器:
总虚拟内存:ulimit -v(默认值是无限的,因此您需要增加交换内存来增加它)
总堆栈大小:ulimit -s(默认为8Mb)
命令来增加这些值。
ulimit -s newvalue
ulimit -v newvalue
*将新值替换为您想要放置的限制值。
引用:
http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/
Yes, to increase the threads number you need to increase the virtual memory or decrease the stack size. In Raspberry Pi I didn’t find a way to increase the virtual memory, if a decrease the stack size from default 8MB to 1MB It is possibly get more than 1000 threads per process but decrease the stack size with the “ulimit -s” command make this for all threads. So, my solution was use “pthread_t” instance “thread class” because the pthread_t let me set the stack size per each thread. Finally, I am available to archive more than 1000 threads per process in Raspberry Pi each one with 1MB of stack.