+
80
-

linux下最多可以创建多少个java线程?

linux下最多可以创建多少个java线程?

网友回复

+
0
-

32位操作系统

在 32 位 Linux 系统里,一个进程的虚拟空间是 4G,内核分走了1G,留给用户用的只有 3G。

那么假设创建一个线程需要占用 10M 虚拟内存,总共有 3G 虚拟内存可以使用。于是我们可以算出,最多可以创建差不多 300 个(3G/10M)左右的线程。 如果想使得进程创建上千个线程,那么我们可以调整创建线程时分配的栈空间大小,比如调整为 512k:

$ ulimit -s 512

64位操作系统

我们来看看 64 位系统里,一个进程能创建多少线程呢? 64 位系统意味着用户空间的虚拟内存最大值是 128T,这个数值是很大的,如果按创建一个线程需占用 10M 栈空间的情况来算,那么理论上可以创建 128T/10M 个线程,也就是 1000多万个线程,真多啊! 所以按 64 位系统的虚拟内存大小,理论上可以创建无数个线程。 事实上,肯定创建不了那么多线程,除了虚拟内存的限制,还有系统的限制。 比如下面这三个内核参数的大小,都会影响创建线程的上限:

/proc/sys/kernel/threads-max,表示系统支持的最大线程数,默认值是 14553;

/proc/sys/kernel/pid_max,表示系统全局的 PID 号数值的限制,每一个进程或线程都有 ID,ID 的值超过这个数,进程或线程就会创建失败,默认值是 32768;

/proc/sys/vm/max_map_count,表示限制一个进程可以拥有的VMA(虚拟内存区域)的数量,如果它的值很小,也会导致创建线程失败,默认值是 65530

我知道答案,我要回答