一台Java服务器跑多少个线程
您目前处于:开发&语言  -  Java  2017年07月17日  阅读 8097

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


转载请并标注: “本文转载自 linkedkeeper.com (文/王新栋)”

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
分享到: 更多
作者  张强  发布于 2017年12月13日  阅读 400
作者  张强  发布于 2017年12月04日  阅读 823
作者  张强  发布于 2017年11月20日  阅读 2328
Spring AOP是我们日常开发中经常使用的工具,常被用来做统一的日志、异常处理、监控等功能,使用方法在此不多赘述,有兴趣的读者可以自行去网上查阅资料进行学习,我们以注解的使用方式为例,分析其相关源码,其他方式大同小异。开启Spring AOP注解方式首先要配置标签,我们就以这个标签的解析作为入口来分析,这里需要读者对Spring自定义标签解析的过程有一定的了解,笔者后续也会出相关的文章。锁定A...
作者  张强  发布于 2017年11月06日  阅读 2893
Spring事务是我们日常工作中经常使用的一项技术,Spring提供了编程、注解、aop切面三种方式供我们使用Spring事务,其中编程式事务因为对代码入侵较大所以不被推荐使用,注解和aop切面的方式可以基于需求自行选择,我们以注解的方式为例来分析Spring事务的原理和源码实现。首先我们简单看一下Spring事务的使用方式,配置: 在需要开启事务的方法上加上@Transactiona...
作者  张松然  发布于 2017年11月05日  阅读 7958
分布式事务分布式系统的特性分布式事务的基本介绍常用的分布式技术说明理解2PC和3PC协议「点击阅读」分布式服务协调技术什么是ZookeeperZookeeper和CAP的关系Zookeeper节点特性及节点属性分析Zookeeper的实现原理分析Zookeeper实践,共享锁,Master选举「点击阅读」分布式消息技术Kafka的基本介绍Kafka的设计原理分析Kafka数据传输的事务特点Kafk...