Linux常用性能调测命令简介
Linux常用性能调测命令简介
https://mp.weixin.qq.com/s?__biz=MjM5NTcxMTE2Nw==&mid=2653116870&idx=1&sn=db0f254e0c549eabc62a75*.f46505&chksm=bd23a8168a542.7a5cd6a5884dce9fd4809656ab7922417d0181ad342fc74136dbeb9e4663&scene=0#rd
一、 Linux常用命令
1 top
简介:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
top使用格式:top[-] [d]
[q] [c] [C] [S] 展开 [n]
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式 。
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名。
top常用参数,top是交互式命令,以下几个参数经常用到,在top界面输入以下字母:
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
输出参数介绍:
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
12.5% us 用户空间占用CPU百分比
8.4% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
74.67% id 空闲CPU百分比
1.4% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
3.1%si:软中断占用百分比
0.0%st:虚拟机占用百分比
按1切换过程查看单个 cpu详情模式
2 mpstat
简介:mpstat(multi-processor statistics),它能实时检测多处理器系统上的每个cpu的使用情况。
格式:mpstat [ -P {0|1|…|ALL} ] [interval] [count]
常用命令举例:mpstat -P ALL 1 *.
输出:
一般我们最关心的几个:
%usr 系统上程序运行在用户空间的时间占CPU总运行时间的比例 。
%sys 系统上所有进程运行在内核空间占CPU总时间的比例 。
%idle 系统空闲时间占CPU总运行时间的比例 。
%iowait CPU等待磁盘IO处理的时间占CPU运行总时间的比例。
3 free
命令格式:free -m
数据读取自/proc/meminfo文件
1 2 3 4 5 6
total used free shared buffers cached
1 Mem: 15793 14700*.* 0 3237922
2 -/+ buffers/cache: 64549339
3 Swap: 2039 2009 30
第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
15793MB(缺省时free的单位为KB)物理内存,即F[1][1];
在这些物理内存中有14700MB(即F[1][2])被使用了;
还用*.*(即F[1][3])是可用的;
A buffer is something that has yet to be “written” to disk.
A cache is something that has been “read” from the disk and stored for later use.
也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
F[2][2]=F[1][2] - F[1][5] - F[1][6]
F[2][3] = F[1][3] + F[1][5] + F[1][6]
4 vmstat
简介:vmstat(virtual memory statistics),实时的输出系统各资源的使用情况,如进程信息,CPU使用率,内存使用及I/O使用等情况
[***]# vmstat 5 4
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 2056748 283348 400532 8761*. 0 0 5 170 0 0 *.6 83 1 0
1 0 2056748 173896 400540 8761836 0 0 0 483 76313 112604 14 12 75 0 0
1 0 2056748 176040 400548 8762240 0 0 0 268 77209 *.122 11 8 80 0 0
1 0 2056748 178884 400556 8762576 0 0 0 234 76773 *.*24 11 9 79 0 0
注意,第1行是自系统启动以来的平均结果,后面输出的采样周期内的平均结果,输出结果的字段含义解释如下:
Procs:进程信息,r表示运行队列(就是说多少个进程真的分配到CPU)的进程数,b表示不可中断睡眠进程数,阻塞进程。
Memory:内存信息,swpd表示虚拟内存的使用数量,单位都是KB。
Swap:交换分区(虚拟内存)的使用信息,单位KB/s,si表示数据由磁盘交换至内存的速率,so表示数据由内存交换至磁盘的速率,如果这两个值经常变化,说明内存不足。
io: 块设备的使用信息,单位blocks/s,bi表示从块设备读取块的速率,bo表示向块设备写入块的速率。
System:系统信息,in表示每秒发生的中断次数,cs 表示每秒发生上下文切换(进程切换)次数。
CPU: CPU的使用信息,这四个参数见前面介绍
5 iostat
简介:iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。
命令:参数很多,这里只列了我常用的几个参数
iostat [-d] [-kx] [interval] [count]
-d 输出磁盘的详细信息
-k 单位k
-x 输出所有详细信息
输出:
[**_]# iostat -kx 1 *.
Linux 2.6.32.43-tlinux-1.0.17-default (V__...*) 07/16/17 x86_64 (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.86 0.00 1.60 0.07 0.00 96.46
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.12 39.41 0.95 6.78 92.35 184.79 71.78 0.06 8.33 0.75 0.58
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是*.%表示设备已经接近满负荷运行了。
6 df
简介:df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。
命令:df
输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 *.21208 5368524 4428396 55% /
/dev/sda3 20642428 9695556 9898296 50% /usr/local
/dev/sda4 928412856 742056300 139195844 85% /data
tmpfs 4025928 0 4025928 0% /dev/shm
补充一个查看文件大小举例:du -h –max-depth=1|sort -hr 按目录大小排序
7 lsof
简介:lsof(list open file),列出当前系统打开的文件描述符。用此命令查看进程打开了哪些文件描述符,常用于查看是否有文件句柄泄露。
格式:lsof
常用参数:
lsof -p pid //查看进程pid的所有句柄
lsof -i//显示所有打开的端口
lsof -i:80 //显示所有打开80端口的进程
输出:
8 Netstat
简介:Netstat 命令用于显示各种网络相关信息,如网络连接,路由表等。
参数说明:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
使用举例:
netstat -a 列出所有端口
netstat -at列出所有 tcp 端口
netstat -au列出所有 udp 端口
netstat -l只显示监听端口
netstat -p显示进程名
查看hlwmp信息:
9 sar
简介:sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
查看网卡流量命令:sar -n DEV 2 *.
输出:
查看网卡流量的还有ifstat命令。
*.tcpdump
简介:tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
使用参数说明:
-i 指定tcpdump 需要监听的接口. 任意网口any,指定网口lo或者eth0等
-s 指定抓包长度 0,表示整个包都抓, 如果不设置默认将会是68字节
-w 把包数据直接写入文件而不进行分析和打印输出
-x 以十六进制显示输出内容
-n 不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.
还有很多选项,这里不一一列出,可以查帮助文档
常用条件语句,不一一列举,可以查资料:
host
src host
dst host
Port
and or not
tcp
Udp
常见使用命令举例:
sudo /usr/sbin/tcpdump -i eth1 -s 0 src host .120...33 and port 26941 -w /tmp/captuer.cap
11 strace
简介:strace跟踪程序运行过程中执行系统调用的接收到的信号,并将系统调用名,参数,返回值,信息及消耗的时间输出到标准输出或者指定文件
命令参数说明:
-c 统计每个系统调用执行的时间,执行次数和出错次数
-f 跟踪由fork调用生成的子进程
-t 在输出的每一行前面加上时间信息
-e trace=set 只跟踪指定的系统调用如,-e trace=open, close, read等
-e trace=file 只跟踪文件操作相关的系统调用
-e trace=network 只跟踪网络相关的系统调用
-o 将结果输出到文件
-p pid指定进程
输出:
12 pstack
简介:pstack用来查看进程的堆栈快照
命令:pstack pid
输出:pstack pid,输出进程的各线程的堆栈
13 perf top -p pid
简介:perf是Linux kernel自带的系统性能优化工具,perf可以用于查看热点函数,从而帮助开发者来优化程序性能。
命令:perf top -p pid查看某个进程的函数热点
输出:
二、 GDB使用介绍
1 查看core文件
配置core文件大小, ulimit -c unlimited
查看生成的coredump文件
/home/user_00/services/spp_hlwcdkey/bin下
gdb ./spp_hlwcdkey_worker /data/coredump/core_xxxx
2 用GDB启动进程
gdb –args ./spp_hlwcdkey_worker ../etc/spp_worker.xml
3 gdb attach到已经运行的进程
/home/user_00/services/spp_hlwcdkey/bin
gdb -p 12509
BT查看堆栈
4 GDB里常用的命令
bt查看堆栈
f x进入某层调用的函数
P 打印某个变量
B 设置断点 b func b file.cpp:linenum b class:func
Info b 查看设置的断点
N 执行下一步
C 继续执行上一个命令
Run运行
Run运行
三、性能调测简介
1 CPU运算
聚合运算,减少循环次数,批量mt_access
2 内存拷贝
减少内存拷贝,内存池
引用传递
3 磁盘操作
聚合读写文件
sendfile,减少进程用户态到内核态切换及内存拷贝次数
当需要对一个文件进行传输的时候,其具体流程细节如下:
调用read函数,文件数据被copy到内核缓冲区
read函数返回,文件数据从内核缓冲区copy到用户缓冲区
write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区
数据从socket缓冲区copy到相关协议引擎
硬盘—>内核buf—>用户buf—>socket相关缓冲区—>协议引擎
运行流程如下:
sendfile系统调用,文件数据被copy至内核缓冲区
再从内核缓冲区copy至内核中socket相关的缓冲区
最后再socket相关的缓冲区copy到协议引擎
硬盘->内核buf———————————————->socket相关缓冲区->协议引擎
传文件fd及读的offset即可
而在内核版本2.4之后,sendfile实现了更简单的方式,系统调用方式仍然一样,细节与2.1版本的不同之处在于,当文件数据被复制到内核缓冲区时,不再将所有数据copy到socket相关的缓冲区,而是仅仅将记录数据位置和长度相关的数据保存到socket相关的缓存,而实际数据将由DMA模块直接发送到协议引擎,再次减少了一次copy操作
4 收发包
Epoll边缘模式收发包
四、Spp自带工具查看qps
命令:
/home/user_00/services/spp_query_vipinfo/bin/stat.sh -worker
输出:
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果