【Linux】系统故障排查常用命令

整机:top

查看整机信息:top命令+uptime命令

 

CPU:vmstat

查看CPU:vmstat

每2秒采样一次 一共采样3次

procs进程信息:

  • r 是运行和等待CPU时间片的进程数,原则上1核CPU的运行队列不要超过2,整个系统的运行队列不能超过综合书的2倍。否则系统压力过大。
  • b 是等待资源的进程数,比如正在等待的磁盘IO、网络IO等。

cpu信息:

  • us 是用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,需要优化程序
  • sy 是内核进程消耗的CPU时间百分比。
  • 如果us + sy > 80%说明CPU可能存在不足。
  • id 是处于空闲的CPU百分比
  • wa 是系统等待IO的CPU时间百分比
  • st 是来自于一个虚拟机偷取的CPU时间的百分比

查看所有CPU核的信息:mpstat -P ALL 【多少秒采样一次】

查看每个进程使用的CPU的用量信息:pidstat -u 【多少秒采样一次】 -p 【进程号】

ps -ef|grep java 查看java进程的进程号

 

内存:free

查看系统的内存:free -g / free -m / free (-单位)

  • 应用程序可用内存/系统物理内存 > 70 % 内存充足
  • 应用程序可用内存/系统物理内存 < 20 % 内存不足需要增加内存
  • 两者之间,基本够用

查看进程内存额外信息:pidstat -p 【进程号】 -r 【采样间隔时间】

硬盘df

查看磁盘剩余空间数:df / df -h(换算后的结果)

磁盘IO:iostat

磁盘性能评估:iostat -xdk 2 3 (2秒采样一次 共采样3次)

rkB/s 每秒读取数据量kB

wkB/s 每秒写入数据量kB

svctm:IO请求的平均服务时间 单位ms

await:IO请求的平均等待时间 单位ms 值越小性能越好

util:一秒钟有百分之几的时间用于IO操作,接近100%时,磁盘带宽跑满,需要优化程序或增加磁盘。

如果读写的数据量长期比较大,一定不正常,需要优化程序的读取。svctm的值和await的值很接近,表示几乎没有IO等待,磁盘性能较好。如果await的值远高于svctm,则表示IO队列等待时间太长,需要优化程序或更换磁盘。

网络IO:ifstat

默认本地没有,下载ifstat

 

如何处理生产环境中CPU占用过高的问题?

  1. 先用top命令找出CPU占比最高的
  2. ps -ef或者jps进一步定位,找到进程编号
  3. 定位到具体的线程或者代码
  4. 将需要的线程ID转换为16进制
  5. jstack 进程ID | grep tid(16进制英文小写的线程ID) -A60

命令:ps -ef|grep java|grep -v grep找到进程

命令:ps -mp 进程编号 -o THREAD,tid,time

参数:

  • -m:显式所有的线程
  • -p:pid进程使用cpu的时间
  • -o:该参数后是用户自定义的想要查询的字段

 找到进程5556中的线程5557,5557的十六进制15b5

命令:jstack 线程号 | grep tid(16进制线程号) -A60

-A60 打印出前60行

定位到Demo1.java程序中有问题的行号是6

原文地址:https://www.cnblogs.com/xdcat/p/13062640.html