面试官问:平常你是怎么对Java服务进行调优的?
点击关注上方“ 程序员私房菜 ”,设为“置顶或星标”,第一时间送达技术干货。 来源:http://t.cn/AiCTERJz Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。 Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层 ,如图 1 所示。 图 1.Java 性能优化分层模型 每层优化难度逐级增加,涉及的知识和解决的问题也会不同。比如应用层需要理解代码逻辑,通过 Java 线程栈 定位有问题代码行等;数据库层面需要 分析 SQL、定位死锁 等;框架层需要 懂源代码 , 理解框架 机制;JVM 层需要对 GC 的类型和工作机制有深入了解,对 各种 JVM 参数 作用了然于胸。 围绕 Java 性能优化,有两种最基本的分析方法: 现场分析法和事后分析法。 现场分析法 通过保留现场,再采用诊断工具分析定位。现场分析对线上影响较大,部分场景(特别是涉及到用户关键的在线业务时)不太合适。 事后分析法 需要尽可能多收集现场数据