跳转至

常见问题分析

CPU

查询占用cpu高的线程

  • top 查看占用比较高的进程,再top -H -p pid来找到cpu使用率比较高的一些线程;
  • printf '%x\n' pid得到 nid,jstack pid |grep 'nid' -C5 –color查看对应堆栈信息;

频繁gc

jstat -gc pid 1000命令来对gc分代变化情况进行观察

  • 1000表示采样间隔(ms);
  • S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU分别代表两个Survivor区、Eden区、老年代、元数据区的容量和使用量;
  • YGC/YGT、FGC/FGCT、GCT则代表YoungGc、FullGc的耗时和次数以及总耗时。

上下文切换

vmstat [sample_interval] [sample_nums]命令:展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

  • system:
  • cs(context switch)一列则代表了上下文切换的次数
  • in(interrupt)每秒中断数,包括时钟中断

vmstat

pidstat -p pid -w [interval] [samples]对特定的pid进行监控

pidstat

磁盘

df -hl来查看文件系统状态,每个盘的总量和使用量等信息。

iostat -d -k -x来进行分析

  • 最后一列%util可以看到每块磁盘写入的程度,而rrqpm/s以及wrqm/s分别表示读写速度

image-20211216102914826

iotop命令来进行定位文件读写的来源:

  • iotop命令拿到的是tid,通过readlink -f /proc/*/task/$tid/../.. 查看tid对应的pid;

  • iotop -botq -p $pid 查看具体的进程的io读写;

lsof命令来确定具体的文件读写情况lsof -p pid