# Java调试技巧
# 日志使用
# 最佳实践
日志级别使用
- ERROR:系统错误和异常
- WARN:潜在问题警告
- INFO:重要业务事件
- DEBUG:调试信息
- TRACE:详细跟踪信息
日志内容规范
- 包含时间戳
- 记录线程信息
- 保留调用堆栈
- 添加业务标识
使用MDC记录追踪信息
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
try {
MDC.put("requestId", UUID.randomUUID().toString());
MDC.put("userId", getCurrentUserId());
chain.doFilter(request, response);
} finally {
MDC.clear();
}
}
}
- 日志配置示例
<!-- logback-spring.xml -->
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{requestId}] - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
# 常用工具
Logback
- 配置灵活
- 性能优秀
- 自动重载配置
- 支持多种输出格式
Log4j2
- 异步日志
- 性能更好
- 支持Lambda表达式
- 插件化架构
ELK日志分析
- Elasticsearch存储日志
- Logstash收集日志
- Kibana可视化分析
- 支持复杂查询
# 远程调试
# 配置方法
- JVM参数设置
# 启动时添加以下参数
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
IDE配置
- 创建远程调试配置
- 设置断点
- 连接远程JVM
- 开始调试
防火墙配置
- 开放调试端口
- 设置访问控制
- 配置安全组
- 限制IP访问
# 注意事项
安全考虑
- 仅在测试环境使用
- 设置访问IP白名单
- 使用SSH隧道
- 及时关闭调试端口
性能影响
- 避免在生产环境使用
- 控制调试会话数量
- 设置超时时间
- 注意网络带宽消耗
调试技巧
- 使用条件断点
- 查看线程堆栈
- 评估表达式
- 动态修改变量
# 性能分析
# JVM工具
jstack
- 查看线程状态
- 分析死锁
- 查看线程堆栈
- 诊断性能问题
jmap
- 生成堆转储
- 查看内存占用
- 分析对象分布
- 检查内存泄漏
jstat
- 监控GC活动
- 查看类加载
- 分析编译统计
- 查看内存池状态
# 性能分析工具
Arthas
- 线程分析
- 类加载分析
- 方法追踪
- 性能火焰图
JProfiler
- CPU分析
- 内存分析
- 线程分析
- SQL分析
VisualVM
- 实时监控
- CPU分析
- 内存分析
- 线程分析
← Java框架问题