项目启动时CPU高()

  • 发布时候load飙高
  • 发布时候响应时间飙高

cpu使用率较高的两个线程详细信息

  • “C2 CompilerThread1” daemon prio=10 tid=0x00007fce48125800 nid=0x852 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE
    Locked ownable synchronizers:

"C2 CompilerThread1" daemon prio=10 tid=0x00007fce48125800 nid=0x852 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
  • “C2 CompilerThread0” daemon prio=10 tid=0x00007fce48123000 nid=0x851 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLELocked ownable synchronizers:

"C2 CompilerThread0" daemon prio=10 tid=0x00007fce48123000 nid=0x851 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLELocked ownable synchronizers:

C2 CompilerThread线程项目启动初期cpu使用率那么高,它在干什么呢?

解决方案

预热

  • 程序主动预热:在启动完成后,程序主动的访问热点的代码,确保主要的热点代码已被编译成机器码后再放入流量,可通过-XX:+PrintCompilation来确认。
  • 复制流量预热:通过拷贝一份线上的流量进行预热,完成之后再导入线上流量。

启动多个线程进行编译优化

采用分层编译

  • Client模式
  • Server模式
  • Tiered模式
————————
  • 发布时候load飙高
  • 发布时候响应时间飙高

cpu使用率较高的两个线程详细信息

  • “C2 CompilerThread1” daemon prio=10 tid=0x00007fce48125800 nid=0x852 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE
    Locked ownable synchronizers:

"C2 CompilerThread1" daemon prio=10 tid=0x00007fce48125800 nid=0x852 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
  • “C2 CompilerThread0” daemon prio=10 tid=0x00007fce48123000 nid=0x851 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLELocked ownable synchronizers:

"C2 CompilerThread0" daemon prio=10 tid=0x00007fce48123000 nid=0x851 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLELocked ownable synchronizers:

C2 CompilerThread线程项目启动初期cpu使用率那么高,它在干什么呢?

解决方案

预热

  • 程序主动预热:在启动完成后,程序主动的访问热点的代码,确保主要的热点代码已被编译成机器码后再放入流量,可通过-XX:+PrintCompilation来确认。
  • 复制流量预热:通过拷贝一份线上的流量进行预热,完成之后再导入线上流量。

启动多个线程进行编译优化

采用分层编译

  • Client模式
  • Server模式
  • Tiered模式