You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.3 KiB
2.3 KiB
JVM 崩溃问题解决方案
问题分析
JVM 崩溃发生在 JIT 编译线程中,编译 JSQLParser 时失败。
解决方案
1. 使用优化后的启动脚本
已创建 start.bat,包含优化的 JVM 参数:
- 堆内存:2G-4G(适应7G系统内存)
- 元空间:256M-512M
- JIT 代码缓存:256M
- 使用 G1 垃圾回收器
- 启用堆转储和错误日志
2. 如果问题仍然存在,尝试以下方案
方案 A:禁用特定方法的 JIT 编译
在 start.bat 的 JAVA_OPTS 中添加:
-XX:CompileCommand=exclude,net/sf/jsqlparser/parser/CCJSqlParser,jj_3R_Alias_2314_5_165
方案 B:使用 C2 编译器(性能更好,但内存占用更大)
-XX:+TieredCompilation -XX:TieredStopAtLevel=4
方案 C:减少堆内存,增加系统内存
如果系统其他进程占用较多内存,调整:
-Xms1g -Xmx3g
3. 代码优化建议
检查复杂 SQL 查询
搜索项目中可能存在的复杂查询:
grep -r "last(" --include="*.java" | head -20
优化数据库查询
- 避免使用
last()方法 - 使用分页查询代替
limit 1 - 添加适当的索引
减少 MyBatis Plus 的复杂查询
// 不推荐
.last("limit 1")
// 推荐
.last("LIMIT 1")
// 或者使用分页
.last("limit 1").orderByDesc("create_time")
4. 监控和诊断
启用 GC 日志
在 start.bat 的 JAVA_OPTS 中添加:
-Xloggc:logs/gc.log ^
-XX:+PrintGCDetails ^
-XX:+PrintGCDateStamps
监控内存使用
使用工具:
- JConsole
- VisualVM
- JProfiler
5. 紧急方案(如果必须立即运行)
使用解释模式(不推荐,性能很差)
java -Xint -jar yudao-server.jar
限制 JIT 编译线程数
-XX:CICompilerCount=2
长期优化建议
-
升级硬件
- 增加系统内存到至少 16GB
- 推荐配置:32GB 内存 + 4 核心 CPU
-
优化应用架构
- 分离数据库和应用服务器
- 使用微服务架构
- 减少单个应用的复杂度
-
定期维护
- 清理日志文件
- 定期重启应用
- 监控内存使用情况
联系方式
如果问题仍然存在,请提供:
- 完整的 hs_err_pid.log 文件
- 应用日志(logs 目录)
- SQL 查询语句示例