一台 Java 服务器可以跑多少个线程?

广告也精彩

Java服务器能跑多少线程?这个问题来自如下图所示的在线报警,超过了我们的配置阈值。京东自研UMP监控分析通过IBM Thread and Monitor dup analyzer for Java工具制作jstack文件,查看如下:IBM Threand Monitor dump Analyzer for Java共有1661个线程,与监控数据一致。但这个数字应该很大,我们都知道更多的线程,会有线程切换,带来性能费用。当时想到java服务器能跑多少线程?跟什么有关系?现在整理如下。通过-Xss设置,每个线程都有一个线程栈空间,查看我们服务器关于jvm内存的配置。只有这三个,没有-Xss和-XX:ThreadStackSize的配置,所以是默认值。JVM的几个默认栈大小。可通过以下命令打印输出默认值的大小,命令:jinfo-flagThreadStackSize;例如。不考虑系统限制,最大线程数可以通过以下公式计算。线程数=(机器本身可以用内存-JVM分配的堆内存)/Xss值。比如我们的容器本身大小是8G,堆放大小是4096M,走-Xss的默认值可以得到最大线程数:4096。根据计算公式,得出以下结论:结论1:jvm堆越大,系统创建的线程越小。结论2:当-Xss值越小时,可生成的线程越多。我们知道操作系统分配给每个过程的内存大小是有限的,比如32位Windows是2G。因此,操作系统限制了一个过程中的线程数量,不能无限增加。经验值:3000-5000左右(我没有验证)。我刚才说的不考虑系统限制。如果考虑系统限制,主要与以下参数有关。/proc/sys/kernel/pid_max增加,线程数量增加,pid_max有最高值,超过后不会改变,3264位也不一样。/proc/sys/kernel/thread-max系统可以生成最大线程数。没有具体的研究。/proc/sys/vm/max_map_count增加,数量增加。线程是一种非常宝贵的资源,我们应该严格控制线程的数量,就像我们上面的截图一样,显然线程的数量太多了。这与我们自己配置的fixed大小的线程池有关。京东有自己的rpc框架jsf,可以为每个服务端口设置线程大小。

一台 Java 服务器可以跑多少个线程?

 

转载于天翼云知识,如有侵权,请联系删除,谢谢

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

暂无评论...