一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。

 
京东自研UMP监控分析

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

 
IBM Thread and Monitor Dump Analyzer for Java

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

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

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

-Xms4096m

-Xmx4096m

-XX:MaxPermSize=1024m

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

 
 

可以通过如下命令打印输出默认值的大小,命令: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,里面可以针对每个服务端口设置线程大小。

转载请标明出处,并附上原文链接。遵守行业道德。

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

最新文章

  1. ASP.net封装
  2. 使用freemarker生成word,步骤详解并奉上源代码
  3. source insight资源
  4. word 2013 没有控件菜单怎么办,添加控件菜单
  5. swift学习:第一个swift程序
  6. 安卓TV开发(四) 实现主流智能TV视频播放器UI
  7. 你不知道的JavaScript--Item20 作用域与作用域链(scope chain)
  8. 【Vue.js】代码优化:在dom中加一行v-if就可少写一个循环类方法
  9. Kali Linux ——在无网络情况下安装无线网卡驱动
  10. STL 贺习笔记
  11. tensorflow机器学习模型的跨平台上线
  12. 原创科幻短篇《VR》
  13. UnicodeMath编码教程
  14. 100-days: sixteen
  15. logbak 配置相关
  16. NB-IOT_BC95_B5常用AT指令集
  17. Netty-gRPC介绍和使用
  18. Visual Studio 项目模板制作(三)
  19. Day 1. 占位符的使用方法(%d,%s)(格式化输出)
  20. Android中使用UncaughtExceptionHandler来处理未捕获的异常

热门文章

  1. Java枚举的小例子
  2. P1363 幻象迷宫[搜索]
  3. 使用poi进行数据的导出Demo
  4. reverse函数的实现
  5. 淘宝上的大智慧L2数据,月卡最便宜是8元钱,这个也可以获取BBD、DDX等数据!
  6. Sql Server (MSSQLSERVER) 服务无法启动
  7. man与info
  8. Greenplum最佳实践
  9. About & Ideas & Queries
  10. 【原创】go语言学习(七)数组