以jmeter来举例,当jmeter脚本写好后进行压测的时候。nginx自带工具监控nginx。用nmon监控服务器资源。查看gc日志垃圾回收情况。用jstack查看堆栈信息。比如监控服务器资源的时候发现系统模式下cpu占比较高。可以用mpstat查看cpu具体的消耗情况。通过mpstat监控发现软中断过高,说明导致了不断的上下文切换。从而引起系统模式下cpu占比偏高。 也可以在用top命令查看tomcat进程的线程执行情况。可以发现线程状态不断变化。从而导致软中断偏高。使用jvisualvm工具也可以进一步看到线程切换的情况。 对于软中断偏高可以做出以下优化: 因为CPU核数过少,而线程数过多。所以线程状态在不停变化。这时可以增加CPU核数。这是硬件扩展方式 减少tomcat的执行线程数(修改相应配置文件),一般建议并发执行线程数和CPU核数的比例关系要适中。 查看堆栈的时候发现大多数线程处于等待阻塞状态。通过日志发现Tomcat的执行线程需要不断地从任务队列中获取需要执行的任务,任务队列是一个LinkedBlockingQueue的阻塞队列,并且每次从任务队列中获取任务时都需要加同步锁。没有获取到同步锁的话,就需要等待,直到别的执行线程释放了这个锁,然后当前线程才可以去获取这个同步锁。另外,由于任务使用的是阻塞队列,当任务队列中没有任务时,当前获得了同步锁的线程将会一直处于阻塞等待状态,直到从阻塞队列中获取到任务。 出现上边问题的原因有以下几点 1。网络流量造成,请求数据受到限制 2。tomcat并发连接数配置的不够 3。nginx并发连接数受到限制 针对以上出现的原因做相应的调整,再次压测看看指标会不会有相应变化。