I、环境要求:
1.64bit Linux
2.64bit JDK
3.Memory够大,512GB
4.cpu:64 processors
II、测试工具:【DieLikeADog.java】
java -server -Xmx6G -Xms6G -Xmn600M -Xss228K -XX:PermSize=50M -XX:MaxPermSize=50M -XX:+DisableExplicitGC DieLikeADog
III、检查配置:
1.ps -Lf <pid> |wc -l ==>查看某个进程中的线程数量
2.ulimit -a==>
>>>主要查看-n,-u的值
3.cat /proc/sys/vm/max_map_count
永久修改:将vm.max_map_count=2048000配置到/etc/sysctl.conf中,然后执行sysctl -p生效,重启os后也会持久。
也可以:【sysctl -w vm.max_map_count=2048000】
注意:在其他资源可用的前提下,单个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映射数量。
4.最大用户进程数:需要在两个配置文件/etc/security/limits.conf和/etc/security/limits.d/90-nproc.conf同时修改
实际上,仅对nproc参数修改90-nproc.conf即可。
//////////begin////////
max user processes (-u) 1024
/etc/security/limits.conf
/etc/security/limits.d/90-nproc.conf
* soft nproc 10240
* hard nproc 10240
//////////end//////////
5.文件描述符:通过【ulimit -a】查看
//////////begin//////
在/etc/security/limits.conf中添加如下配置:
* soft nofile 1048576
* hard nofile 1048576
//////////end////////
当soft和hard相同时,也可以用一条指令,如下:
////////begin/////
* - nofile 1048576
////////end///////
6.调整网络参数:可以通过【grep ipv4 /etc/sysctl.conf】查看
在/etc/sysctl.conf中添加如下配置:
//////////begin/////////
fs.file-max = 1048576
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
//////////end////////
IV、【总结】如果只考虑单个jvm在本机能开的最大线程数,考虑1234步即可,如果考虑JVM能支撑的最大tcp连接数,如MQ中,
则也考虑thread,fd和tcp等,所以需要涉及123456步。
V、Tip:
>>>检查命令
# cat /proc/<pid>/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 209715200 209715200 bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 204800 204800 processes
Max open files 1048576 1048576 files
Max locked memory 10485760 10485760 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 4133863 4133863 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
>>>注意:Linux下每个进程的运行时限制结果都可以在目录/proc/<pid>下查看。
>>>参考:http://www.redhat.com/magazine/001nov04/features/vm/
VI、【归纳】
影响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
进行永久修改。
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
android笔试题目汇总及答案: 1.关于线程下面描述错误的是:( D ) A. 如果线程处于死亡状态,则它不是Runnable线程 B. 线程可以将控制权交给较低优先级的线程 ... JVM (java虚拟机) B. DVM C. CVM(或KVM) D. Card VM
-Xss200K:设置单个线程的大小为200K。 在程序中-Xss设置太小,可能程序会报错。默认设置是512K。但如果需要大量的线程,可以将-Xss调小来获得更多的线程。 package com.competition.score.test; import ...
数据⼊库,10-200万条不等,这⾥主要考虑到⼀次性读取,JVM分配出来的栈内存不⼀定会够(个⼈对 内存这⼀块还是处于⼀知半解的状态,所以⽐较谨慎,若诸位⼤神有好的认知,希望评论留下地址分享⼀下),是依⾏读取...
在单个线程下,无论是由于帧栈太大还是虚拟机容量太小,当内存无法分配的时候,虚拟机抛出的都是StackOverflowError异常引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值+1;...
Somnifugi是JMS的实现,它仅在单个JVM内工作,以在线程之间传输消息。 Somnifugi使您可以创建非常松散耦合的子系统,这些子系统可以使用JMS API进行通信,而不会增加套接字的开销。
平安科技java笔试题100道赫莫德 这是一个旨在回答“如何轻松地将数据从一个 JVM 上的运行发送到另一个 JVM”的问题的库 这个库中包含的类比是邮箱的概念。...单个线程使用 NIO Selector 来监视系统管理的
实例125 查看JVM中的线程名 161 实例126 查看和修改线程名称 163 实例127 查看和修改线程优先级 165 实例128 使用守护线程 166 实例129 休眠当前线程 167 实例130 终止指定线程 169 实例131 线程的插队运行 170 6.2 ...
实例118 在指定的目录下创建单个文件 156 实例119 在指定的目录下创建多个临时文件 158 实例120 删除指定目录下的文件 160 实例121 移动指定目录下的文件 163 实例122 文件搜索引挚 167 7.2 字节流...
实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我的钱...
API V3-核心概述提供一个Console对象,该对象用于将消息写入具有多个日志级别INFO,WARNING,ERROR... 通过Mozilla Rhino引擎向底层JVM提供线程管理功能执照该项目由拥有版权,可以在。 有关更多详细信息,请参见和 。
实例118 在指定的目录下创建单个文件 156 实例119 在指定的目录下创建多个临时文件 158 实例120 删除指定目录下的文件 160 实例121 移动指定目录下的文件 163 实例122 文件搜索引挚 167 7.2 ...
实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我的钱...
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...
实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 ...
具有定制功能的Serenity BDD框架:作者:Rakesh ...Java多线程概念用于运行带有多个测试数据的单个测试用例[多个浏览器] 8.框架还能够从Excel文件中读取测试数据,功能文件 命令: 要运行健全性测试用例,请全新安装-
这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单.业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(eventsourcing).业务逻辑处理器的核心是Disruptors...