在工作中,会因为业务量比较庞大,访问qps比较高,会造成服务器负载比较高
本文描述一些常用的排查系统性能瓶颈工具
uptime
uptime用来查看系统的负载
[root@localhost ~]# uptime
08:54:12 up 1 min, 2 users, load average: 1.02, 0.67, 0.26
#注释
开机时间 运行的时间 当前用户 负载
load average: 1.02, 0.67, 0.26##显示的是1分钟 5分钟 15分钟内的平均负载
一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对 于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。
查看cpu相关命令说明
mpstat
[root@localhost ~]# mpstat
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2019年11月13日 _x86_64_ (4 CPU)
09时02分35秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09时02分35秒 all 0.38 0.00 1.05 0.70 0.00 0.06 0.00 0.00 0.00 97.81
# ------------注释
CPU 处理器ID
user 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负进程
nice 在internal时间段里,nice值为负进程的CPU时间(%)
system 在internal时间段里,核心时间(%)
iowait 在internal时间段里,硬盘IO等待时间(%)
irq 在internal时间段里,硬中断时间(%)
soft 在internal时间段里,软中断时间(%)
idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%)
intr/s 在internal时间段里,每秒CPU接收的中断的次数
vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写, 是实时系统监控工具。该命令通过使用knlist子程序和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。vmstat反馈的与CPU相关的信息包括:
(1)多少任务在运行
(2)CPU使用的情况
(3)CPU收到多少中断
(4)发生多少上下文切换
sar
sar是System Activity Reporter(系统活跃情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行采样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统采样,获得大量的采样数据;采样数据和分析的结果都可以存入文件,所需的负载很小。这些是检查历史数据和一些近来的系统事件。sar 用于检查的性能数据类似于vmstat, mpstat和 iostat的显示。 sar的数据是一段时间保存的内容,因此可以察看过去的信息。 lastcomm可以现在系统最近被执行的命令。这些可以用在系统审计中。sar可以在BSD和Linux中找到,它给用户在系统审计中更多的选项来收集信息。
下面只列出常用选项:
-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:内存和交换空间的使用统计。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-q:报告队列长度和系统平均负载
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
-x { pid | SELF | ALL }:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计。
在反馈CPU整体信息方面,sar 反馈的与CPU相关的信息包括:
(1)多少任务在运行
(2)CPU使用的情况
(3)CPU收到多少中断
(4)发生多少上下文切换
内存相关
free
1 free -mh
网络相关
nload
进程相关
lsof命令详解
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
查看linux系统CPU, 物理个数 逻辑个数 单个CPU的核心数
查看物理CPU个数
cat /proc/cpuinfo | grep “pysical id” | sort | uniq | wc -l
查看单个CPU的核心数
cat /proc/cpuinfo | grep “cpu cores” | uniq
查看逻辑CPU的个数
cat /proc/cpuinfo | grep “processor” | wc -l
物理CPU:
很好理解,实际服务器插槽上的cpu个数
逻辑CPU:
CPU使用超线程技术,在逻辑上在分一倍数量的cpu core出来
1逻辑cpu = 物理cpu * 单个cpu核心数 * 2
CPU核心数:
官方话: 一块CPU上面能处理数据的芯片组的数量