一台Java服务器启动多少线程,性能最佳呢?( 三 )

根据计算公式 , 得出如下结论:

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

推荐阅读