11月项目开发问题总结
编辑
41
2024-12-03
线程死锁排查
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/dead")
public class DeadLockController {
private static final Object a = new Object();
private static final Object b = new Object();
@GetMapping("/lock")
public void lock() {
Thread t1 = new Thread(() -> {
synchronized (a) {
System.out.println("a被锁住了!!!");
try {
Thread.sleep(200);
synchronized (b) {
System.out.println("b被锁住了!!!");
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
Thread t2 = new Thread(() -> {
synchronized (b) {
System.out.println("b被锁住了!!!!");
try {
Thread.sleep(200);
synchronized (a) {
System.out.println("a被锁住了!!!");
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
t1.start();
t2.start();
}
}
使用idea自带的分析器插件

使用arthas的 thread 命令排查
https://arthas.aliyun.com/doc/thread.html

JVM的调优
常见调优

jps 查看JAVA进程

JInfo 查看JVM参数

Jstat -gc 查看java进程内存分配

说明:
S0C: 年轻代中第一个survivor(幸存区)的容量(字节)
S1C: 年轻代中第二个survivor(幸存区)的容量(字节)
S0U: 年轻代中第一个survivor(幸存区)目前已使用空间(字节)
S1U: 年轻代中第二个survivor(幸存区)目前已使用空间(字节)
EC: 年轻代中Eden(伊甸园)的容量(字节)
EU: 年轻代中Eden(伊甸园)目前已使用空间(字节)
OC: Old代的容量(字节)
OU: Od代目前已使用空间(字节)
MC: metaspace(元空间)的容量(字节)
MU: metaspace(元空间)目前己使用空间(字节)
YGC:从应用程序启动到采样时年轻代中gC次数
YGCT: 从应用程序启动到采样时年轻代中gC所用时间(S)
FGC:从应用程序启动到采样时old代(全gc) gc次数
FGCT:从应用程序启动到采样时old代(全gc) gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
- 0
- 0
-
分享