锁竞争

java性能监控常用的几个命令

假如想象 提交于 2020-01-07 17:48:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 找到性能问题的第一步是监控应用的行为,通过监控提供的线索,我们可以将性能问题进行归类并分析。 1、CPU使用率:大多数操作系统的CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比,相比而言,系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。理想情况下,应用达到最高性能和扩展时,它的系统态CPU使用率为0%,所以提高应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。 CPU停滞通常会浪费几百个时钟周期,因此提高计算密集型应用性能的策略是减少停滞或者改善CPU高速缓存使用率,从而减少CPU在等待内存数据时浪费的时钟周期。 Linux命令行监控CPU使用率的有vmstat或者top(或者htop,需要自行安装,但查看效果更好): vmstat 采集间隔(秒) 采集次数 当一直监控时,可以省去采集次数,即 vmstat 2,每隔2秒采集一次,一直持续。 命令介绍完毕,现在开始实战讲解每个参数的意思,后面还会使用到: r 表示运行队列的长度,值是运行队列中轻量级进程的实际数量,即当内核线程已经准备好运行只是还没有可用的处理器执行时,运行队列就会有值。