由JVM虚拟机配置问题引发的程序变慢
1. 发现Thred-pools前端请求线程池列表非常的慢
通过日志查看,判断是nacos连接不上
奇怪的是,通过nacos控制面板可以显示nacos信息
2. 在服务器上用top命令查看cpu占用率
一个java进程的cpu占用率超过600%;
- ps -fp 11070
- 查看此进程号对应的java服务的jar路径/或全类名;即通过进程号确定java服务
- 查看此进程号对应的java服务的jar路径/或全类名;即通过进程号确定java服务
- 使用jstat -gcutil 11070 1000 5
- Eden区满,Old区满,FGC总数2万多次,5s内发生近20次
- 使用 jstack 11070 > jstack.log 生成日志(内容太多,不太会分析)
部分 | 说明 |
---|---|
sudo | 以管理员权限运行(访问 JVM 进程需要权限) |
jstat | JDK 自带的 JVM 统计监控工具 |
-gcutil | 显示垃圾回收和内存分代使用率的百分比 |
11217 | 目标 Java 进程的 PID |
1000 | 采样间隔时间(毫秒) |
5 | 采样次数 |
3. 发现JVM内存出现严重问题
-Xms128m # 堆最小128MB
-Xmx256m # 堆最大256MB
-Xmn512m # 新生代512MB → 比最大堆还大!
导致频繁的full GC
4. 重新调整nacos的JVM堆内存分配
-Xms1g -Xmx1g -Xmn512m