`

进程的 线程数

 
阅读更多
查看最大线程数:
cat /proc/sys/kernel/threads-max

1、
每进程可用线程数 = VIRT上限/stack size
其中 VIRT 上限: 32位x86 = 3G 64位x64=64G
statck size 默认是 10240 因此在默认情况下
32位系统上单进程最多可以创建300个线程,
64系统在内存充足的情况下最多可以创建 6400 个线程。
2、
Linux查看进程中运行线程数
ps -Tfp PID
cat /proc/${pid}/stat | awk '{print $20}'
pstree -p $pid 后+1
3、jvm可创建最大线程数

http://hi.baidu.com/wphvseyvcbfkpxe/item/037488116cefd90a8ebde4b1

在java应用中,有时候会出现这样的错误:OutOfMemoryError: unable to create new native thread.这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。


那么是什么原因造成这种问题呢?

每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M可用内存。这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。

这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。

给出一个有关能够创建线程的最大个数的估算公式:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
对于jdk1.5而言,假设操作系统保留120M内存:
1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads

对于栈大小为256KB的jdk1.4而言,
1.5GB allocated to JVM: ~1520 threads
1.0GB allocated to JVM: ~3520 threads

如果我没有记错的话,在2000/XP/2003里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。
分享到:
评论

相关推荐

    进程线程进程线程进程线程

    进程线程进程线程进程线程

    Visual C++源代码 81 如何获取系统指定进程线程信息

    Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual ...

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    linux进程的最大线程数 及最大进程数.zip

    linux进程的最大线程数 及最大进程数.zip

    最清楚的进程线程,进程和线程对比

    在操作系统中,进程和线程是两个非常核心的概念,它们代表了程序在系统中的运行状态以及运行方式。为了深入理解这两个概念,我们首先要明确什么是进程。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行...

    进程与线程的生动形象理解

    ### 进程与线程的生动形象理解 #### 一、引言 进程与线程作为操作系统中的核心概念,对于理解和开发高效的软件至关重要。本文旨在通过一个生动的类比来帮助读者更好地理解进程与线程的基本概念及其差异,并进一步...

    Windows下查看进程中的线程

    按下`Ctrl+Shift+Esc`或`Ctrl+Alt+Del`后选择“任务管理器”,在“详细信息”或“服务”标签页中,可以看到每个进程的详细信息,包括线程数。点击进程,可以在下方看到该进程的线程列表,以及每个线程的ID、状态和...

    进程所占物理内存、句柄数、线程数、GDI数监控,数据保存txt

    程序主要功能是:输入进程pid,对该pid进程进行所占物理内存、句柄数、线程数、GDI数等增长情况进行监控,并将数据保存txt文件,便于事后分析,主要应用与开发过程中监控内存泄漏等

    八、进程线程 - 进程线程

    进程线程 进程线程

    进程和线程之间的关系

    ### 进程和线程之间的关系 在计算机科学领域中,进程和线程是两个非常重要的概念,它们之间既有联系又有区别。对于初学者来说,理解进程与线程的关系至关重要,因为这有助于深入掌握操作系统的基本原理及应用。下面...

    进程线程及堆栈关系的总结

    ### 进程线程及堆栈关系的总结 #### 一、进程与线程的概念及其关系 **进程**是具有一定独立功能的程序在一个特定数据集合上的运行活动,是系统进行资源分配和调度的一个独立单位。进程是操作系统进行管理和调度的...

    易语言获取系统进程线程信息

    易语言获取系统进程线程信息源码,获取系统进程线程信息,getPidThreadInfo,getThreadStartAddress,取线程入口,提升进程权限,转换十到十六,CreateToolhelp32Snapshot,Thread32First,Thread32Next,CloseHandle,...

    进程与线程的管理 .PPT 进程、线程和优先级

    进程与线程是操作系统中重要的概念,它们是执行程序的基础。在计算机系统中,进程可以理解为一个资源分配的基本单位,包含应用程序运行所需的所有资源,如内存、输入/输出设备等。而线程则是执行的基本单元,是进程...

    易语言源码易语言获取系统进程线程信息源码.rar

    易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言...

    进程线程通信,线程同步,异步,进程通信经典进程间通信.7z

    在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...

    易语言取窗口进程线程句柄等源码

    易语言源码分享站可能是这样的一个平台,程序员们在这里交流和分享他们的易语言编程经验,包括如取窗口进程线程句柄等实用的代码片段。 5. **API调用**: 在易语言中,与Windows API的交互是通过“API调用”来完成...

    c语言多进程多线程编程

    在计算机科学中,多进程和多线程是两种并发执行的方式,它们允许程序在同一时间处理多个任务,从而提高系统的效率和响应性。C语言作为一门底层且强大的编程语言,提供了丰富的系统调用接口来实现多进程和多线程编程...

    易语言获取系统进程线程信息源码

    9. **用户界面设计**:为了展示获取的进程线程信息,可能需要设计用户界面,如列表框或者表格控件,展示进程名、ID、线程数等信息。 10. **调试与优化**:编写完成后,需要对代码进行调试和优化,确保在各种环境下...

    易语言进程管理 易语言进程操作

    7. **进程线程数**:获取进程的线程数量可以帮助理解进程的执行模式,比如单线程执行、多线程并发等。 8. **父进程ID**:每个进程都有一个父进程,易语言能获取到这个关系,有助于追踪进程的启动路径和原因。 9. *...

Global site tag (gtag.js) - Google Analytics