Linux性能问题排查

1、生产环境服务器变慢,诊断思路和性能评估谈谈?

  1. 整机:top uptime,系统性能命令的精简版

  1. CPU:vmstat

vmstat -n 2 3

Linux性能问题排查_第1张图片

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔单位是秒,第二个参数是采样的次数

- procs

  • r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大
  • b:等待资源的进程数,比如正在等待磁盘I/O,网络I/O等。

- cpu

  • us :用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序;
  • sy : 内核进程消耗的CPU时间百分比;
  • us + sy : 参考值为80%,如果us + sy 大于 80%,说明可能存在CPU不足
  • id : 处于空闲的CPU百分比
  • wa : 系统等待IO的CPU时间百分比
  • st : 来自于一个虚拟机偷取的CPU时间的百分比
查看所有核的CPU信息:  mpstat -P ALL 2

 

每个进程使用cpu的用量分解信息 : pidstat -u 1 -p 进程编号
  1. 内存:free

应用程序可用内存数

Linux性能问题排查_第2张图片

- 经验值

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

查看额外:

pidstat -p 进程号 -r 采样间隔秒数

 

  1. 硬盘:df

查看磁盘剩余空闲数

Linux性能问题排查_第3张图片

  1. 磁盘IO:iostat

磁盘I/O性能评估

iostat -xdk 2 3

 

磁盘块设备分布

rkB/s 每秒读取数据量KB;

wkB/s 每秒写入数据量KB;

svctm I/O 请求的平均服务时间,单位毫秒;

await I/O 请求的平均等待时间,单位毫秒;值越小,性能越好;

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

rkB/s ,wkB/s 根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。

svctm的值与await的值很接近,表示几乎没有I/O等待,磁盘性能好

如果await的值远高于scvtm的值,则表示I/O队列等待太长,需要优化,需要优化程序或更换更快磁盘。

查看额外

pidstat -d 采样间隔秒数 -p 进程号
  1. 网络IO:ifstat

各个网卡的in,out

观察网络负载情况

程序网络读写是否正常

-程序网络I/O优化

-增加网络I/O带宽

2、假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位

结合Linux和JDK命令一块分析

案例步骤:

(1) 先用top命令找出CPU占比最高的,然后再按shift+p按照CPU排序,找到占用CPU过高的进程的pid

(2) ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序

(3) 定位到具体线程或者代码

①ps -mp 进程 -o THREAD,tid,time | sort -rn

②参数解释 -m 显示所有线程

-p pid进程使用cpu的时间

-o 该参数后是用户自定义格式

sort -rn 排序

或者 top -H -p [进程id] 找到进程中消耗资源最高的线程的id

(4) 将需要的线程ID转换为16进制格式(英文小写格式)

printf "%x\n" 有问题的线程ID

(5) jstack 进程ID | grep tid(16进制线程ID小写英文) -A60

3、对于JDK自带的JVM监控和性能分析工具用过哪些?一般你是怎么用的?

jps(虚拟机进程状况工具)

jinfo(Java配置信息工具)

jmap(内存映像工具)

jstat(统计信息监控工具)

jstack(堆栈异常跟踪工具)

jvisualvm

jconsole

你可能感兴趣的:(Linux,java,jvm,jvm诊断工具)