Java程序CPU消耗过高一般有两种情况:1、 US过高,应用占用CPU资源过高,需要找出占用CPU线程的具体代码,分析定位问题的原因。分析步骤如下: (1) 使用top命令找出占用cpu最高的JAVA进程 (2) 找出占用cpu最高的线程 top -Hp 1781 (3) CPU最高线程17596转换为16进制对应线程44bc命令printff "%x\n" 17596 (4) CPU最高JAVA流程1781的堆栈信息 jstack 1781> stackdump.txt 代码如下:public class CPUConsumeTest { public static void main(String[] args) { int count = Runtime.getRuntime().availableProcessors(); System.out.println("processors " + count); new Thread(new ConsumeCPUTest()).start(); } for(int i=0; i<100; i++) { new Thread(new NotConsumeCPUTest()).start(); } } }class ConsumeCPUTest implements Runnable { public void run() { while(true) { for(int i=0; i<10000000; i++) { long l = 1000000; Math.acos(l); } try { Thread.currentThread().sleep(20); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }}class NotConsumeCPUTest implements Runnable { public void run() { while(true) { try { Thread.currentThread().sleep(50); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }} 2、sy过高,经常切换上下文,打印线程栈,看看哪个锁竞争是否太激烈。
