当前位置:首页 > 单片机 > 架构师社区
[导读]一台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获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

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

作为开源世界的基石,Linux凭借其稳定性、开放性和可定制性,成为了后端开发、嵌入式开发、云计算等领域的主流开发平台。对于初学者而言,想要掌握Linux开发,首先必须理清其中几个贯穿整个开发流程的核心基础概念,这些概念是...

关键字: 进程 线程

在操作系统学习和后端开发面试中,“线程间共享哪些资源、又隔离哪些资源”是一个高频问题,很多人对此一知半解:只记得“线程共享进程地址空间”,但具体到哪些内存区域、哪些资源是共享的,哪些是线程私有,总是说不清楚。实际上,理解...

关键字: Linux 线程

线程池是后端开发中最常用的并发组件,几乎所有高并发服务都离不开它。但很多开发者只会用框架提供的线程池,并不清楚一个逻辑完备的线程池到底需要解决哪些问题,核心设计遵循什么原则。很多手写线程池的教程只实现了基础的任务提交和执...

关键字: 线程池 线程

在现代操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。一个进程可以包含多个线程,这些线程在进程的地址空间内并发执行,共同完成任务。线程的引入大大提高了程序的并发性能,但也带来了资源共享与同步的问题。理解...

关键字: 线程 多线程

在现代操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。一个进程可以包含多个线程,这些线程在进程的地址空间内并发执行,共同完成任务。线程的引入大大提高了程序的并发性能,但也带来了资源共享与同步的问题。理解...

关键字: 线程 多线程编程

在高并发服务器开发中,线程池(ThreadPool)已成为解决多任务调度的核心方案。其设计并非偶然,而是针对传统线程管理痛点的系统性优化。

关键字: 线程 操作系统

摘要:前瞻性、广覆盖、强协同 北京2026年1月13日 /美通社/ -- 1月8日,北京智谱华章科技股份有限公司(以下简称"智谱")成功登陆港交所,成为"大模型第一股",这不仅是...

关键字: 联想 AI 模型 线程

一个线程只能属于一个进程,而一个进程可以有多个线程,线程是进程的一部分,就像工人是工厂的一部分。资源是分配给进程的,同一进程的所有线程共享该进程的全部资源,就像工厂里的工人共享工厂的设备和场地。处理机(CPU)则是分给线...

关键字: 进程 线程

线程和进程各有其独特的优缺点。线程执行效率高,而进程则在安全性和资源管理方面表现出色。在多道程序设计环境中,进程的并发执行和资源共享能力得到了充分利用,从而提高了系统的整体效率和资源利用率。

关键字: 线程 进程

进程是操作系统分配资源的基本单位。它是一个正在执行的程序的实例,包含了程序的代码、数据、堆栈以及与操作系统交互的各种资源。一个程序可以运行多个进程,比如一个浏览器可以打开多个标签页,每个标签页就是一个独立的进程。

关键字: 进程 线程
关闭