当前位置:首页 > 公众号精选 > 架构师社区
[导读]一台java服务器能跑多少个线程? 这个问题来自一次线上报警如下图,超过了我们的配置阈值。  京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下: IBM Thread and Monitor Dump Analyzer for Java 共计166


一台java服务器能跑多少个线程

这个问题来自一次线上报警如下图,超过了我们的配置阈值。 

线上经验总结:一台 Java 服务器可以跑多少个线程?

京东自研UMP监控分析

打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:

线上经验总结:一台 Java 服务器可以跑多少个线程?

IBM Thread and Monitor Dump Analyzer for Java

共计1661个线程,和监控数据得出的吻合。但这个数量应该是大了,我们都知道线程多了,就会有线程切换,带来性能开销。

当时就想到一台java服务器到底可以跑多少个线程呢?跟什么有关系?现整理如下。

每个线程都有一个线程栈空间通过-Xss设置,查了一下我们服务器的关于jvm内存的配置

-Xms4096m

-Xmx4096m

-XX:MaxPermSize=1024m

只有这三个,并没有-Xss 和-XX:ThreadStackSize的配置,因此是走的默认值。

几种JVM的默认栈大小

线上经验总结:一台 Java 服务器可以跑多少个线程?

可以通过如下命令打印输出默认值的大小,命令:jinfo -flag ThreadStackSize ;例如

[root@host-192-168-202-229 ~]#jinfo -flag ThreadStackSize 1807

-XX:ThreadStackSize=1024

不考虑系统限制,可以通过如下公式计算,得出最大线程数量

线程数量=(机器本身可用内存-JVM分配的堆内存)/Xss的值,比如我们的容器本身大小是8G,堆大小是4096M,走-Xss默认值,可以得出 最大线程数量:4096个。

根据计算公式,得出如下结论:

结论1:jvm堆越大,系统创建的线程数量越小。

结论2:当-Xss的值越小,可生成线程数量越多。

我们知道操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。

因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右(我没有验证)。

刚才说的是不考虑系统限制的情况,那如果考虑系统限制呢,主要跟以下几个参数有关系

/proc/sys/kernel/pid_max 增大,线程数量增大,pid_max有最高值,超过之后不再改变,而且32,64位也不一样

/proc/sys/kernel/thread-max 系统可以生成最大线程数量

max_user_process(ulimit -u)centos系统上才有,没有具体研究

/proc/sys/vm/max_map_count 增大,数量增多

线程是非常宝贵的资源,我们要严格控制线程的数量,象上面我们的截图情况,显然线程数量过多。这个是跟我们自己配置了fixed大小的线程池有关系。京东有自己的rpc框架jsf,里面可以针对每个服务端口设置线程大小。

作者:新栋BOOK

https://www.jianshu.com/p/f1930596947d

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

线上经验总结:一台 Java 服务器可以跑多少个线程?

线上经验总结:一台 Java 服务器可以跑多少个线程?

线上经验总结:一台 Java 服务器可以跑多少个线程?

长按订阅更多精彩▼

线上经验总结:一台 Java 服务器可以跑多少个线程?

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

助力顶级特效公司Wētā FX构建云上工作室,支持《阿凡达:水之道》高达33亿渲染线程小时的云上制作任务 北京2022年12月19日 /美通社/ -- 近期,时隔十三年重返大荧幕的阿凡达系列电影《阿凡达:水之道》在全球...

关键字: 亚马逊 线程 云计算 数字化

摩尔线程专注于研发设计全功能GPU芯片及相关产品,支持3D高速图形渲染、AI训练推理加速、超高清视频编解码和高性能科学计算等多种组合工作负载,能够为中国科技生态合作伙伴提供计算加速能力。

关键字: 摩尔 线程 GPU

作为丹纳赫生命科学平台旗下的重要运营公司,Pall颇尔公司将进一步加大在华投资,导入更高芯片线程的产线及技术,强化对国内客户的供应链稳定性。Pall颇尔中国已落实1100万美元的产能扩建投资,以进一步拓建北京工厂的半导体...

关键字: 半导体 供应链 微电子 线程

(全球TMT2021年12月16日讯)摩尔线程与浪潮在京签署元脑战略合作协议。摩尔线程与浪潮将发挥各自在技术、生态和产业等方面的领先优势,基于创新算力芯片和元脑生态平台展开多维和深度合作,联手开发领先的人工智能行业解决...

关键字: 线程

目录Java线程与OS线程的区别与关联JNI的作用JNIEnv和JavaVM是啥JNI中数据是如何传递的Java线程与Native(OS)线程的区别联系:Java线程其实是一层OS线程的封装,本质上就是OS线程。【以前版...

关键字: Android NI 线程 LOADER

线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题。

关键字: 线程 进程 JAVA

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

关键字: 线程 进程 控制流

摘要:介绍了地基沉降远程数据采集系统服务器端软件的设计与实现方法。该软件能够并发处理多个远程客户端传送过来的数据,并将数据保存到数据库中,同时采用B/S架构对采集的数据进行管理和分析,从而实现对地基沉降远程采集数据的实时...

关键字: 地基沉降 远程数据采集 软件系统 线程

昨天我们用IntelI9的10核,每个核2个threads的机器跑了内核的编译:超线程SMT究竟可以快多少?今天,我换一台机器,采用AMDRyzen。 默认情况16核,每个核2个threads,共32个CPUs:下面编译...

关键字: zen 线程 SMT

众所周知,STL容器不是线程安全的。对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了coredump。另外一...

关键字: 线程 ST
关闭
关闭