VisualVM

线程数=N(CPU核数)*(1+WT(线程等待时间)/ST(线程时间运行时间))

VisualVM查看

'self time' is a 'wall-clock' time spent in method itself (without time in methods invoked from that method). 'self time (cpu)' is a time processor time, so it does not include time spent waiting, sleeping, etc. Both 'self-time' and 'self (cpu) time' in sampler are approximation of actual data. 'self time[%]' refer to 'self time'.

在“调用树”标签页中,可以看到各个线程的调用树,其中记录了自用时间和自用时间(CPU) ,这两者分别代表:

  • 自用时间:方法本身消耗的时间,不包括调用该方法的时间
  • 自用时间(CPU) :消耗的处理器时间,不包括等待时间,睡眠时间等

测试结果

12核测试结果:
CPU:
8:
平均每个线程整体花费时间: 10260
平均每个线程执行花费时间: 1417
12:
平均每个线程整体花费时间: 6389
平均每个线程执行花费时间: 1356
24:
平均每个线程整体花费时间: 4340
平均每个线程执行花费时间: 1619

IO:
8:
平均每个线程整体花费时间: 24280
平均每个线程执行花费时间: 3468
12:
平均每个线程整体花费时间: 21765
平均每个线程执行花费时间: 4474
24:
平均每个线程整体花费时间: 21038
平均每个线程执行花费时间: 7789

18:
平均每个线程整体花费时间: 20722
平均每个线程执行花费时间: 6150

CPUTypeTest:
--2020-08-16--2.25.18

IOTypeTest:
--2020-08-16--2.24.41

PS:在笔记本上测试其实不太准,上面跑了太多程序会互相干扰。

其他设置

在一些非核心业务,我们可以将核心线程数设置小一些,最大线程数量设置为计算线程数量。在一些核心业务中,两者可以设置一样。阻塞队列可以根据具体业务场景设置,如果线程处理业务非常迅速,我们可以考虑将阻塞队列设置大一些,处理的请求吞吐量会大些;如果线程处理业务非常耗时,阻塞队列设置小些,防止请求在阻塞队列中等待过长时间而导致请求已超时。

refer:https://sq.163yun.com/blog/article/175369520457637888

comments powered by Disqus