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

图:京东自研UMP监控分析

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

图:IBM Thread and Monitor Dump Analyzer for Java

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

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

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

1

2

3

-Xms4096m

-Xmx4096m

-XX:MaxPermSize=1024m

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

图:JVM的默认栈大小

可以通过如下命令打印输出默认值的大小,命令:

1

jinfo -flag ThreadStackSize

例如:

1

2

[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,里面可以针对每个服务端口设置线程大小。

java线程服务器_一台Java服务器跑多少个线程相关推荐

  1. 能跑java的服务器_一台java服务器可以跑多少个线程?

    一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...

  2. bigint最大有多少位_一台 Java 服务器可以跑多少个线程?

    一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出jstack文件,通过IBM Thread and Monitor Dump An ...

  3. java xss 默认值_一台 Java 服务器可以跑多少个线程?

    原标题:一台 Java 服务器可以跑多少个线程? 转自:简书,作者:新栋BOOK 一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值. 京东自研UMP监控分析 打出 ...

  4. java tls 证书_在使用Java 8重新协商TLS_1.2期间,服务器证书更改受到限制

    我对SSL很陌生,并且被看似已知的问题所困扰.我的应用程序是SSL客户端,并调用另一个为双向SSL启用的组件.两个组件中的证书都是正确的,有时连接工作正常.每个服务器都有自己的服务器证书和私钥,但具有 ...

  5. linux下tomcat部署java web项目_求助帖 linux服务器 tomcat部署javaweb项目问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 03-Sep-2018 17:42:07.330 SEVERE [localhost-startStop-1] org.apache.catalina.c ...

  6. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  7. 不允许使用java方式启动_细品 Java 中启动线程的正确和错误方式

    细品 Java 中启动线程的正确和错误方式 前文回顾详细分析 Java 中实现多线程的方法有几种?(从本质上出发) start 方法和 run 方法的比较 代码演示:/** * * start() 和 ...

  8. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  9. 自定义java线程池_我的Java自定义线程池执行器

    自定义java线程池 ThreadPoolExecutor是Java并发api添加的一项功能,可以有效地维护和重用线程,因此我们的程序不必担心创建和销毁线程,也不必关注核心功能. 我创建了一个自定义线 ...

最新文章

  1. 什么是PCB板上的鼠牙洞?
  2. Win7 下面 用easybcd 引导 安装 ubuntu 14.04
  3. 修改MySQL字符集
  4. pycharm 怎么查看函数信息?
  5. LOJ#2132. 「NOI2015」荷马史诗
  6. Dapr闪电说 - Dapr落地云原生架构
  7. Visual Studio 2017的第五个更新包扩展了调试工具
  8. 人脸检测的model类facemodel
  9. java 判断范围_java判断一个点是否在一个围栏范围内
  10. Java中的List、Set、Map
  11. noip2013 day2
  12. 计算机概念图图例,写出统计图的名称和制图什么并标出图例
  13. 第二本书:疯狂人类进化史20190621
  14. about-page
  15. 详解交换机的GVRP
  16. 数据库之通过例子了解单表查询
  17. iOS 支付宝支付 微信支付SDK接口不统一? 盘他!
  18. 2022年Q3过去了,平常心最重要
  19. 带分数——排列和组合
  20. java导出excel数字格式_POI 导出excel带小数点的数字格式显示不对解决方法

热门文章

  1. 724. 寻找数组的中心索引
  2. 传奇gm命令怎么用_传奇GM常用命令
  3. python sqlite3 executemany_python – SQLite executemany的问题
  4. json apis and ajax,FreeCodeCamp - JSON APIs and Ajax
  5. Python+OpenCV:图像去噪(Image Denoising)
  6. 竹节纱疵的成因及预防措施
  7. 基于机器视觉的眼镜镜片轮廓提取
  8. 这是一台家庭计算机重启无效,我买了一台二手计算机,配置还可以,但有时会自动重启机器,这是为什? 爱问知识人...
  9. volley全然解析
  10. Mysql event时间触发器,实现定时修改某些符合某一条件的某一字段