- 浏览: 163254 次
- 来自: ...
-
文章分类
- 全部博客 (110)
- 网络 (3)
- window (1)
- eclipse (2)
- mysql (3)
- java (43)
- spring (2)
- memcahe (4)
- kestrel (1)
- linux (19)
- maven (1)
- 总结 (1)
- ActiveMQ (1)
- 线程 (6)
- nio (7)
- java pool (1)
- IO (1)
- 架构 (1)
- Hadoop (1)
- Storm (1)
- zookeeper (3)
- 工作进程 (1)
- epoll (3)
- nginx (4)
- uml (1)
- 分布式 (1)
- RMI (4)
- redis (1)
- shell (4)
- 黄金文档 (1)
- office (2)
- linux_setup (1)
- visio (1)
- BIOS (1)
- 回调 (1)
- jvm (1)
- resin (1)
- ssd (0)
- xmpp (1)
最新评论
-
qxjandyc:
hjjjjjjjjjjjjjjjjjjjjjj
(emoji表情) unicode5与unicode6互换 -
一个人旅行:
写的不错哦
(emoji表情) unicode5与unicode6互换
查看最大线程数:
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创建更多的线程。
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创建更多的线程。
发表评论
-
curl命令使用
2012-10-24 15:48 1394curl -o /dev/null -s -w %{time ... -
shell 脚本文件追踪与 debug
2012-10-23 17:52 1024scripts 在运行之前,最怕的就是出现语法错误的问题了!那 ... -
shell 截取字符串方法集
2012-10-23 17:46 1101截取字符串: 1.expr substr "$a& ... -
linux nmap 命令
2012-09-25 17:57 9265Nmap即Network Mapper,它是 ... -
linux source 命令
2012-09-25 17:55 1112命令用法: source FileName 作用:在当前bas ... -
Linux查看文件编码格式及文件编码转换
2012-09-13 11:38 929如果你需要在Linux 中操作windows下的文件,那么你可 ... -
线程123总结
2012-09-02 22:34 778线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一 ... -
rsync 同步
2012-08-28 09:51 594一、被同步机 1、/usr/bin/rsync --daemo ... -
linux的hostname修改详解
2012-08-27 21:57 590http://soft.chinabyte.com/os/28 ... -
学习命令
2012-08-17 18:23 708strace dmsg ldd -
Linux free命令详解(转)
2012-08-17 18:12 978http://www.cnblogs.com/ggjuchen ... -
shell 统计 uv 量
2012-08-17 16:33 690cat 201233.log | grep "201 ... -
文本读取每行
2012-08-08 17:43 7821、 for row in `echo ${SERVER_PI ... -
vi 命令详解
2012-08-08 14:02 8441、vi的基本概念 ... -
Thread.interrupt()方法很详细的介绍
2012-08-02 14:46 989http://blog.csdn.net/yonghuming ... -
查看端口连接数
2012-07-11 16:43 806netstat -an |grep 22135 |grep E ... -
Linux下查看CPU真实核数
2012-07-09 17:29 935Linux下查看CPU真实核数 cat /proc/cpu ... -
理解Linux Load Average
2012-07-09 17:27 1150http://hi.baidu.com/musk1984/it ... -
spring线程池配置
2012-07-08 21:13 872http://superivan.iteye.com/blog ... -
Java线程:大总结
2012-07-07 17:23 641http://lavasoft.blog.51cto.com/ ...
相关推荐
Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual C++源代码 81 如何获取系统指定进程线程信息Visual ...
进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...
linux进程的最大线程数 及最大进程数.zip
在操作系统中,进程和线程是两个非常核心的概念,它们代表了程序在系统中的运行状态以及运行方式。为了深入理解这两个概念,我们首先要明确什么是进程。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行...
易语言获取系统进程线程信息源码,获取系统进程线程信息,getPidThreadInfo,getThreadStartAddress,取线程入口,提升进程权限,转换十到十六,CreateToolhelp32Snapshot,Thread32First,Thread32Next,CloseHandle,...
### 进程与线程的生动形象理解 #### 一、引言 进程与线程作为操作系统中的核心概念,对于理解和开发高效的软件至关重要。本文旨在通过一个生动的类比来帮助读者更好地理解进程与线程的基本概念及其差异,并进一步...
按下`Ctrl+Shift+Esc`或`Ctrl+Alt+Del`后选择“任务管理器”,在“详细信息”或“服务”标签页中,可以看到每个进程的详细信息,包括线程数。点击进程,可以在下方看到该进程的线程列表,以及每个线程的ID、状态和...
易语言取窗口进程线程句柄等源码,取窗口进程线程句柄等,根据进程名取窗口句柄,根据窗口句柄取进程名,取进程线程标识符_,打开进程_,寻找顶级窗口_,关闭内核对象_,创建系统进程快照,取快照中第一个进程信息,取快照中下...
易语言源码分享站可能是这样的一个平台,程序员们在这里交流和分享他们的易语言编程经验,包括如取窗口进程线程句柄等实用的代码片段。 5. **API调用**: 在易语言中,与Windows API的交互是通过“API调用”来完成...
程序主要功能是:输入进程pid,对该pid进程进行所占物理内存、句柄数、线程数、GDI数等增长情况进行监控,并将数据保存txt文件,便于事后分析,主要应用与开发过程中监控内存泄漏等
进程线程 进程线程
### 进程和线程之间的关系 在计算机科学领域中,进程和线程是两个非常重要的概念,它们之间既有联系又有区别。对于初学者来说,理解进程与线程的关系至关重要,因为这有助于深入掌握操作系统的基本原理及应用。下面...
### 进程线程及堆栈关系的总结 #### 一、进程与线程的概念及其关系 **进程**是具有一定独立功能的程序在一个特定数据集合上的运行活动,是系统进行资源分配和调度的一个独立单位。进程是操作系统进行管理和调度的...
进程与线程是操作系统中重要的概念,它们是执行程序的基础。在计算机系统中,进程可以理解为一个资源分配的基本单位,包含应用程序运行所需的所有资源,如内存、输入/输出设备等。而线程则是执行的基本单元,是进程...
易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言获取系统进程线程信息源码.rar 易语言源码易语言...
在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...
在计算机科学中,多进程和多线程是两种并发执行的方式,它们允许程序在同一时间处理多个任务,从而提高系统的效率和响应性。C语言作为一门底层且强大的编程语言,提供了丰富的系统调用接口来实现多进程和多线程编程...
9. **用户界面设计**:为了展示获取的进程线程信息,可能需要设计用户界面,如列表框或者表格控件,展示进程名、ID、线程数等信息。 10. **调试与优化**:编写完成后,需要对代码进行调试和优化,确保在各种环境下...
7. **进程线程数**:获取进程的线程数量可以帮助理解进程的执行模式,比如单线程执行、多线程并发等。 8. **父进程ID**:每个进程都有一个父进程,易语言能获取到这个关系,有助于追踪进程的启动路径和原因。 9. *...
1.进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能 2.内核驱动模块查看,支持内核驱动模块的内存拷贝 3.SSDT、Shadow SSDT、FSD、KBD、TCPIP、Classpnp、Atapi、Acpi、SCSI、IDT...