性能分析工具

编程

性能分析工具

JVM问题分析工具学习,最近在项目遇到许多jvm相关问题,借此机会,梳理一下jdk自带的诊断工具,以及服务器出现问题后一些常用工具

系统性能监控工具

LINXU

  • uptime

这几个信息的意思方便我们了解服务器当前运行的状态。对应含义如下:

系统时间 运行时间 连接数 1,5,15分钟系统平均负载(运行队列中的平均进程数)

  • top

利用top命令可以帮助我们了解哪个进程占用的资源最多

  • 最顶部的信息,标识的内容与uptime一样

  • Tasks 显示系统中正在运行的所有任务数(116),在运行的数量(1)、休眠的(115)、停止的(0)、僵尸状态的(0)

  • 中间%cpu显示的目前cpu的相关信息

    • us, user: 运行(未调整优先级的) 用户进程的CPU时间
    • sy,system: 运行内核进程的CPU时间
    • ni,niced:运行已调整优先级的用户进程的CPU时间
    • wa,IO wait: 用于等待IO完成的CPU时间
    • hi:处理硬件中断的CPU时间
    • si: 处理软件中断的CPU时间
    • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

  • Kib Mem 和 Swap 显示的内存的使用情况。

    • total — 物理内存总量

    • used — 使用中的内存总量

    • free — 空闲内存总量

    • buffer/cache内存量

      swap交换分区

    • total — 交换区总量

    • used — 使用的交换区总量

    • free — 空闲交换区总量

    • avail Mem 可用交换区总量

  • 最下面则显示所有的进程详情。

    • PID:进程ID,进程的唯一标识符

    • USER:进程所有者的实际用户名。

    • PR:进程的调度优先级。这个字段的一些值是"rt"。这意味这这些进程运行在实时态。

    • NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

    • VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

    • RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

    • SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

    • S:这个是进程的状态。它有以下不同的值:、

      • D - 不可中断的睡眠态。

      • R – 运行态

      • S – 睡眠态

      • T – 被跟踪或已停止

      • Z – 僵尸态

    • %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

    • %MEM:进程使用的可用物理内存百分比。

    • TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

    • COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

  • vmstat

  • vmstat 1 4 其中,1表示采样频率 4是采样次数

  • 可以统计系统的CPU,内存,swap,io等情况

  • Procs(进程)

    • r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
    • b: 等待IO的进程数量。

    Memory(内存)

    • swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
    • free: 空闲物理内存大小。
    • buff: 用作缓冲的内存大小。
    • cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

  • Swap

    • si: 每秒从交换区写到内存的大小,由磁盘调入内存。
    • so: 每秒写入交换区的内存大小,由内存调入磁盘。

    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

  • IO(现在的Linux版本块的大小为1kb)

    • bi: 每秒读取的块数
    • bo: 每秒写入的块数

    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

  • system(系统)

    • in: 每秒中断数,包括时钟中断。
    • cs: 每秒上下文切换数。

    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

  • CPU(以百分比表示)

    • us: 用户进程执行时间百分比(user time)

    us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

    • sy: 内核系统进程执行时间百分比(system time)

    sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

    • wa: IO等待时间百分比

    wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

    • id: 空闲时间百分比

  • pidstat

  • 细致观察线程、监控CPU、IO、内存
  • pidstat -p 线程Id -u 采样频率 采样次数
  • 通过 -t 参数可以查看进程号

Java自带工具 todo

  • jps
  • jinfo
  • jmap
  • Dump堆
  • jstack
  • JConsole
  • Visual VM

以上是 性能分析工具 的全部内容, 来源链接: utcz.com/z/518439.html

回到顶部