单个JVM下支撑100w线程数
来源:互联网 发布:浙大基础医学院 知乎 编辑:程序博客网 时间:2024/05/29 08:02
转载自:
http://blog.csdn.net/xiaolang85/article/details/74322277
http://blog.csdn.net/tiger0709/article/details/74296720
http://jzhihui.iteye.com/blog/1271122
I、创建的线程数的计算公式:
(MaxProcessMemory
- JVMMemory
- ReservedOsMemory
) / (ThreadStackSize
) = Number of threads
MaxProcessMemory 指的是一个进程的最大内存
JVMMemory JVM内存
ReservedOsMemory 保留的操作系统内存
ThreadStackSize 线程栈的大小
II、系统限制:
1.系统可以生成的最大线程数量 ==> /proc/sys/kernel/threads-max
2.系统可以生成的最大pid数量 ==> /proc/sys/kernel/pid_max
3.系统允许单用户创建的最大进程数量 ==> ulimit -a
中max user processes
这个参数的值
4.一个进程在VMAs(虚拟内存区域)拥有最大数量 ==>/proc/sys/vm/max_map_count
,VMA是一个连续的虚拟地址空间,当进程创建一个内存映像文件时VMA的地址空间就会增加,当达到max_map_count了就是返回out of memory errors
5.一个进程可打开的最大文件数 ==> ulimit -a
中open files
这个参数
III、参数调整
1.threads-max:直接修改 /proc/sys/kernel/threads-max
,例如echo 10000 > /proc/sys/kernel/threads-max
2.pid_max:同上,直接修改 /proc/sys/kernel/pid_max
3.max user processes:
最大用户进程数需要在两个配置文件/etc/security/limits.conf
和/etc/security/limits.d/90-nproc.conf
同时修改。
实际上,仅对nproc参数修改90-nproc.conf即可。
max user processes (-u) 1024/etc/security/limits.conf/etc/security/limits.d/90-nproc.conf* soft nproc 10240* hard nproc 10240
4.max_map_count:
永久修改:将
vm.max_map_count=2048000
配置到/etc/sysctl.conf
中,然后执行sysctl -p
生效,重启os后也会持久。也可以:sysctl -w vm.max_map_count=2048000
。也可以直接修改/proc/sys/vm/max_map_count
。注意:在其他资源可用的前提下,单个JVM能开启的最大线程数是
/proc/sys/vm/max_map_count
的设置数的一半。小结:如果要达到单个JVM开启100w以上的线程数,需要配置
vm.max_map_count=2048000
或者以上。因为默认vm.max_map_count=65530
,因此缺省配置下,单个jvm能开启的最大线程数为其一半,即3w左右,大概32k的量实际中,可以通过命令
cat /proc/<pid>/maps |wc -l
来监控,当前进程使用到的vm映射数量。
5.文件描述符:通过【ulimit -a】查看。
在/etc/security/limits.conf
中添加如下配置:
* soft nofile 1048576* hard nofile 1048576
当soft和hard相同时,也可以用一条指令,如下:
* - nofile 1048576
III、Tip
检查命令: cat /proc/<pid>/limits
注意:Linux下每个进程的运行时限制结果都可以在目录
/proc/<pid>
下查看。
查看进程的线程数:pstree -p pid| wc -l
或则ps -Lf pid | wc -l
IV、归纳
影响Java线程数量的因素
Java虚拟机本身:-Xms,-Xmx,-Xss;
系统限制:
/proc/sys/kernel/pid_max
, ==> 81920==>对应到/etc/sysctl.conf为kernel.pid_max=81920
/proc/sys/kernel/thread-max
,==> 对应到/etc/sysctl.conf为kernel.thread-max=8192000
max_user_process(ulimit -u)
/proc/sys/vm/max_map_count
==>对应到/etc/sysctl.conf为vm.max_map_mount=2048000,可以在/etc/sysctl.conf添加kernel.pid_max=819200 进行永久修改。
如果考虑JVM能支撑的最大tcp连接数,如MQ中,则也考虑thread,fd和tcp等。需要调整网络参数:可以通过grep ipv4 /etc/sysctl.conf
查看。
在/etc/sysctl.conf
中添加如下配置:
fs.file-max = 1048576net.ipv4.ip_local_port_range = 1024 65535net.ipv4.tcp_mem = 786432 2097152 3145728net.ipv4.tcp_rmem = 4096 4096 16777216net.ipv4.tcp_wmem = 4096 4096 16777216net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1
- 单个JVM下支撑100w线程数
- 单个JVM下支撑100w线程数
- 单个进程最大线程数
- 单个进程最大线程数
- 单个进程最大线程数
- 单个进程最大线程数
- JVM最大线程数
- JVM最大线程数
- JVM最大线程数
- JVM最大线程数计算方法
- JVM最大线程数计算方法
- jvm 可启动线程数
- nagios插件之监控单个tomcat线程数
- LINUX如何限制单个用户的线程数
- JVM最大可支持线程数计算方法
- JVM可创建的最大线程数
- JVM可创建的最大线程数
- JVM可支持的最大线程数
- ORACLE 批量 INSERT
- Sublime Text 3正式版下载地址附注册码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 【bzoj2276】[Poi2011]Temperature
- java实现九九乘法表
- 单个JVM下支撑100w线程数
- HighCharts入门
- 封装
- 苹果的全面屏真的可以引领手机领域吗?
- 【小波分析】学习笔记(一):基础概念和小波理论综述
- 盘点Word的10个快捷键方式,新手必备Word使用技巧
- 那些你不可错过的好书(持续跟新)
- 学习总结4
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数