`
can_do
  • 浏览: 248023 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单个JVM下支撑100w线程数

阅读更多
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笔试题目汇总及答案

    android笔试题目汇总及答案: 1.关于线程下面描述错误的是:( D ) A. 如果线程处于死亡状态,则它不是Runnable线程 B. 线程可以将控制权交给较低优先级的线程 ... JVM (java虚拟机) B. DVM C. CVM(或KVM) D. Card VM

    Java大量线程注意点

     -Xss200K:设置单个线程的大小为200K。  在程序中-Xss设置太小,可能程序会报错。默认设置是512K。但如果需要大量的线程,可以将-Xss调小来获得更多的线程。 package com.competition.score.test; import ...

    java对大数据的处理.pdf

    数据⼊库,10-200万条不等,这⾥主要考虑到⼀次性读取,JVM分配出来的栈内存不⼀定会够(个⼈对 内存这⼀块还是处于⼀知半解的状态,所以⽐较谨慎,若诸位⼤神有好的认知,希望评论留下地址分享⼀下),是依⾏读取...

    jvm-starter:JVM虚拟机学习之旅

    在单个线程下,无论是由于帧栈太大还是虚拟机容量太小,当内存无法分配的时候,虚拟机抛出的都是StackOverflowError异常引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值+1;...

    Somnifugi JMS-开源

    Somnifugi是JMS的实现,它仅在单个JVM内工作,以在线程之间传输消息。 Somnifugi使您可以创建非常松散耦合的子系统,这些子系统可以使用JMS API进行通信,而不会增加套接字的开销。

    平安科技java笔试题100道-com.tbaldridge.hermod:基于邮箱的分布式计算库

    平安科技java笔试题100道赫莫德 这是一个旨在回答“如何轻松地将数据从一个 JVM 上的运行发送到另一个 JVM”的问题的库 这个库中包含的类比是邮箱的概念。...单个线程使用 NIO Selector 来监视系统管理的

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例125 查看JVM中的线程名 161 实例126 查看和修改线程名称 163 实例127 查看和修改线程优先级 165 实例128 使用守护线程 166 实例129 休眠当前线程 167 实例130 终止指定线程 169 实例131 线程的插队运行 170 6.2 ...

    Java范例开发大全 (源程序)

     实例118 在指定的目录下创建单个文件 156  实例119 在指定的目录下创建多个临时文件 158  实例120 删除指定目录下的文件 160  实例121 移动指定目录下的文件 163  实例122 文件搜索引挚 167  7.2 字节流...

    java范例开发大全(pdf&源码)

    实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我的钱...

    api-core:企业Javascript API-核心模块

    API V3-核心概述提供一个Console对象,该对象用于将消息写入具有多个日志级别INFO,WARNING,ERROR... 通过Mozilla Rhino引擎向底层JVM提供线程管理功能执照该项目由拥有版权,可以在。 有关更多详细信息,请参见和 。

    java范例开发大全源代码

     实例118 在指定的目录下创建单个文件 156  实例119 在指定的目录下创建多个临时文件 158  实例120 删除指定目录下的文件 160  实例121 移动指定目录下的文件 163  实例122 文件搜索引挚 167  7.2 ...

    java范例开发大全

    实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我的钱...

    net学习笔记及其他代码应用

    答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...

    Java范例开发大全(全书源程序)

    实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 ...

    Serenity-BDD-Framework-Skelton

    具有定制功能的Serenity BDD框架:作者:Rakesh ...Java多线程概念用于运行带有多个测试数据的单个测试用例[多个浏览器] 8.框架还能够从Excel文件中读取测试数据,功能文件 命令: 要运行健全性测试用例,请全新安装-

    LMAX架构

    这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单.业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(eventsourcing).业务逻辑处理器的核心是Disruptors...

Global site tag (gtag.js) - Google Analytics