linux性能分析

  • Post author:
  • Post category:linux




一、内存

free -h

top #进去后按m (按M表示以内存利用率进行排序)



二、cpu


什么是cpu 利用率 ,平均负载?

  • CPU Utilization : 非空闲进程(线程)占用时间的比例
  • Load Average:单位时间内平均活跃进程数(可运行状态R + 不可中断状态D 的平均进程数)

cpu负载知识点扩展:

如果load average大于cpu逻辑核数的70%,证明负载过高,因为此时进程响应会变慢。这个一段时间一般取1分钟、5分钟、15分钟。当逻辑核数为2时,负载为2,说明所有的核数被完全占用。

load average(一分钟)=(cpu正在处理的线程数+等待处理的线程数)/cpu单核每分钟最多能处理的线程



1、 cpu 利用率


导致cpu 利用率过高:cpu密集型

案例:cpu利用率过高,排查是哪个进程的哪个函数导致的

//开启2个CPU进程执行sqrt计算,600秒后结束。 -c,--cpu:代表进程个数(每个进程会占用一个cpu,当超出cpu个数时,进程间会互相争用cpu)
stress --cpu 2 --timeout 600

//查看利用率 top命令进去后按P 会以cpu利用率排序,按c显示详细命名

//如果某进程cpu使用率过高,可以用perf 命令排查是哪个函数导致的
//top实时显示占用 CPU 时钟最多的函数或者指令 -g开启调用关系分析,-p指定的进程号
//Shared,是该函数或指令所在的动态共享对象,如内核、进程名、动态链接库名、内核模块名等;Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示,[.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间
perf top -g -p [pid]

Samples: 169K of event 'cpu-clock', 4000 Hz, Event count (approx.): 6511972816 lost: 0/0 drop: 0/0                                                                            
  Children      Self  Shared Object     Symbol                                                                                                                                
+   37.55%    37.51%  libc-2.17.so      [.] __random_r
+   29.65%    29.63%  libc-2.17.so      [.] __random
+   10.76%    10.76%  stress            [.] 0x0000000000002dc1
+    9.62%     9.61%  libc-2.17.so      [.] rand
+    4.85%     4.84%  stress            [.] rand@plt


案例二:cpu利用率过高,但是无法发现cpu使用率过高的进程。

#通过pstree来查找父进程,找出调用关系
pstree |grep 进程名



2、cpu负载

导致cpu负载过高:cpu密集型(可能会)、I/O 密集型、上下文切换



2.1 I/O 密集型:
案例:
//-i 开启2个IO进程,执行sync系统调用,刷新内存缓冲区到磁盘;-hdd 临时读写文件个数
stress-ng -i 4 --hdd 1 --timeout 600 

//查看iowait
iostat 5 1

//查看所有进程的io情况
pidstat -d 5 1


2.2 上下文频繁切换

上下文:上下文又叫CPU上下文,是CPU运行任何任务前,必须依赖的环境

cpu执行任务所需要的环境:每个任务运行前, CPU 都需要知道任务从哪里加载,又从哪里开始运行。也就是说,需要系统事先给他设置好 CPU 寄存器和程序计数器

通过上面两个概念,可知上下文切换其实就是 :cpu执行所需要环境的切换

//使用 sysbench 来模拟系统多线程调度切换的情况
//以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题
sysbench --threads=10 --max-time=300 threads run

vmstat 1   //判断cs情况
	cs (context switch) 每秒上下文切换次数
	in (interrupt) 每秒中断次数
	r (runnning or runnable)就绪队列的长度,正在运行和等待CPU的进程数
	b (Blocked) 处于不可中断睡眠状态的进程数

pidstat -w //查看哪个进程的cs过高
	cswch 每秒自愿上下文切换次数 (进程无法获取所需资源导致的上下文切换)
	nvcswch 每秒非自愿上下文切换次数 (时间片轮流等系统强制调度)



三、磁盘



四、网络



3.1 丢包率

ping



3.2 网络延迟

tracepath

mtr



3.3 流量进出情况

iftop

iftop -i eth0 -P

在这里插入图片描述



3.2 sar

命令用法

sar -n DEV #查看当天从零点到当前时间的网卡流量信息
sar -n DEV 1 10 #每秒显示一次,共显示10次
sar -n DEV -f /var/log/sa/saxx #查看xx日的网卡流量历史
sar -q #查看历史负载
sar -b #查看磁盘读写

DEV显示网络接口信息

指标含义

IFACE 表示设备名称(LAN接口)
rxpck/s 每秒接收数据包的数量
txpck/s 每秒发出数据包的数量
rxKB/s 每秒接收的数据量(字节数),单位KByte 1KB=1000byte=8000bit
txKB/s 每秒发出的数据量(字节数),单位KByte
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
rxerr/s:每秒钟接收的坏数据包

txerr/s:每秒钟发送的坏数据包
coll/s:每秒冲突数
rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
txcarr/s:发送数据包时,每秒载波错误数
rxfram/s:每秒接收数据包的帧对齐错误数
rxfifo/s:接收的数据包每秒FIFO过速的错误数
txfifo/s:发送的数据包每秒FIFO过速的错误数



版权声明:本文为litaimin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。