CPU飙高
执行死循环的jar
[root@storm-nimbus-a opt]# java -jar cpu.jar 2>&1 &
[1] 12507
[root@storm-nimbus-a opt]# java -jar cpu.jar 2>&1 &
[2] 12526
[root@storm-nimbus-a opt]# jps
12507 jar
12526 jar
查找cpu过高的进程
top
网站中:如果负载(load)过大,将不能处理新的请求
发现 12507 和 12526 cpu占有率过高
jstack
[root@storm-nimbus-a opt]# jstack 12507 > /opt/12507.txt
用jstack导出相关信息
[root@storm-nimbus-a opt]# top -p 12507 –H
发现12508(十进制,需转换十六进制)
[root@storm-nimbus-a opt]# printf "%x" 12508
30dc
在/opt/12507.txt定位该线程正在做什么
"main" #1 prio=5 os_prio=0 tid=0xb7606400 nid=0x30dc runnable [0xb7783000]
java.lang.Thread.State: RUNNABLE
at java.lang.String.indexOf(String.java:1759)
at java.lang.String.indexOf(String.java:1705)
at com.pcitc.Cpu.getPartneridsFromJson(Cpu.java:45)
at com.pcitc.Cpu.main(Cpu.java:15)
死锁代码
public class deadlock {
private Object lock1 = new Object();
private Object lock2 = new Object();
public static void main(String[] args) {
System.out.println("死锁演示");
deadlock test = new deadlock();
MyThread1 thread1 = test.new MyThread1();
MyThread2 thread2 = test.new MyThread2();
thread1.start();
thread2.start();
}
class MyThread1 extends Thread{
@Override
public void run() {
synchronized(lock1) {
try {Thread.sleep(1000);}catch(Exception e) {}
synchronized(lock2) {
System.out.println("Thread1 over");
}
}
}
}
class MyThread2 extends Thread{
@Override
public void run() {
synchronized(lock2) {
try {Thread.sleep(1000);}catch(Exception e) {}
synchronized(lock1) {
System.out.println("Thread2 over");
}
}
}
}
}
两个线程相互等待对方持有的锁,形成死锁
执行死锁的jar并定位
[root@storm-nimbus-a opt]# java -jar deadlock.jar 2>&1 &
[1] 12900
[root@storm-nimbus-a opt]# jstack 12900 > /opt/12900.txt
查看相关日志/opt/12900.txt
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x08c6ab70 (object 0xa54b3d00, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x08c691b4 (object 0xa54b3d08, a java.lang.Object),
which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
at com.pcitc.deadlock$MyThread2.run(deadlock.java:42)
- waiting to lock <0xa54b3d00> (a java.lang.Object)
- locked <0xa54b3d08> (a java.lang.Object)
"Thread-0":
at com.pcitc.deadlock$MyThread1.run(deadlock.java:30)
- waiting to lock <0xa54b3d08> (a java.lang.Object)
- locked <0xa54b3d00> (a java.lang.Object)
Found 1 deadlock.