本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容
知识点汇总
知识点详解
JMC(Java Mission Control)
1.7提供的图形化JVM分析与监控工具
- JVM浏览器
- 可列出正在运行的Java程序JVM,每个JVM实例叫做一个JVM连接,使用JDP(Java Discover Protocol),可以连接到本地和远程运行的JVM
- JFR(Java Flight Recorder)
- 提供了能够深入JVM内部,能看到运行时状态的能力,是个非常强大的性能profile工具,适合对程序进行调优和问题排查.主要对运行事件进行采集,可以通过指定采集的事件和频率,收集非常全面的的数据信息
- JMX(Java Management Extensions)
- 可以管理并监控JVM,通过对MBean的管理可以实时收集JVM信息,例如,类使用信息,堆使用情况,CPU负载,线程信息等,以及其他可以通过MBean管理的运行时属性
btrace
JVM实时监控工具,基于动态字节码修改技术,实现对运行中的Java程序跟踪和替换,可在不重启JVM的情况下,监控系统运行情况,获取JVM运行时的数据信息,如,方法参数,返回值,全局变量,堆栈信息等
可以做 | 不可以做 |
---|---|
方法调用信息 对象创建信息 内存统计 同步块执行 异常信息 定时执行 类加载信息 死锁检测 线程栈信息 文件/网络IO | 创建新对象 抛出或捕获异常 使用循环 定义static以外的属性和变量 使用synchronized 调用实例方法或静态方法 |
注意事项:
- 不恰当的使用会导致JVM崩溃
- btrace操作会持续JVM运行期间
- 通过JVM参数,取消btrace安全限制
其他常用工具
类 | 作用与特点 |
---|---|
jps | 查看Java进程信息 |
jmap | 查看JVM中对象的同级信息 |
jstat | 实时监控JVM的资源和性能 |
jstack | 查看JVM线程栈信息 |
jinfo | 动态查看,调整JVM参数 |
jcmd | 1.7提供的综合工具 |
jconsole,jprofiler,jvisualvm | 监控与性能分析.建议使用JMC代替 |
如,
- 希望打印GC详细日志,发现未开启时,可通过jinfo开启print_gc_details,动态生效
- 分析内存泄漏风险时,使用jmap或jcmd定期获取堆对象的统计信息,发现定期增长的可疑对象
- 发现所有服务都存在耗时较高的情况,可以使用jstat检查gc回收状况,看看是不是gc停顿耗时过高
- 遇到某个服务卡死或停止处理时,可用jstack查看线程栈,是否存在多个线程为block状态,产生了死锁
- 当服务上线后没有达到预期,可用jmc分析JVM运行信息,看看哪些热点方法可以优化,哪些线程竞争可以避免
Git
Git常用工作流
常用Linux分析工具
类 | 作用与特点 |
---|---|
vmstat | 进程,虚拟内存,页面交换,IO读写,CPU活动 |
instat&iotop | 系统IO状态信息 |
ifstat&iftop | 实时网络流量监控 |
netstat | 查看网络相关信息,各种网络协议套接字状态 |
dstat | 全能型实时系统信息统计 |
strace | 诊断,调试程序的系统调用 |
GDB | 程序调试,coredump分析 |
lsof | 查看系统当前打开的文件信息 |
tcpdump | 网络抓包工具 |
traceroute | 网络路由分析工具 |
考察点
- 了解常用的JVM分析工具
- 分析线程死锁可用jstack
- 内存溢出可用jmap
- 分析程序性能可用jmc中的jfr
- 掌握Git的常用操作与工作流
- merge命令与rebase命令的区别
- 各种工作流的优缺点
- 了解Linux系统下常用的分析工具
- 磁盘写入用时较高,可用iostat分析磁盘io情况
- 不能确定问题,可用strace对文件写入的系统调用进行分析
- 定位CPU负载较高的原因,可用top与jstack结合分析
加分项
- 能够主动出击体现知识广度
- 能够体现使实战能力
真题汇总
- 排查JVM问题有哪些常用工具?(你曾遇到过什么问题,如何排查,如何解决的)
- Git合并代码由哪些方法?有什么区别?
- Git与SVN有哪些差异?
- 你所在的吐纳对项目开发使用什么样的工作流?有什么优点?