Linux常用性能调测命令简介

·  阅读 44

一、 Linux常用命令

1 top

简介:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

top使用格式:top[-] [d] [p] [q] [c] [C] [S] [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 100 输出: 一般我们最关心的几个:

%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 147001093 0 3237922 
2 -/+ buffers/cache: 64549339 
3 Swap: 2039 2009 30
复制代码

第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:

15793MB(缺省时free的单位为KB)物理内存,即F[1][1];

在这些物理内存中有14700MB(即F[1][2])被使用了;

还用1093(即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 8761104 0 0 5 170 0 0 10 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 109122 11 8 80 0 0 
1 0 2056748 178884 400556 8762576 0 0 0 234 76773 109424 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 100

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%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了。


6 df

简介:df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。

命令: df

输出:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10321208   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 100

输出:


10 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 10.120.100.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

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,减少进程用户态到内核态切换及内存拷贝次数

当需要对一个文件进行传输的时候,其具体流程细节如下:

1 调用read函数,文件数据被copy到内核缓冲区 

2 read函数返回,文件数据从内核缓冲区copy到用户缓冲区 

3 write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区

4 数据从socket缓冲区copy到相关协议引擎
复制代码

硬盘—>内核buf—>用户buf—>socket相关缓冲区—>协议引擎

运行流程如下:

1 sendfile系统调用,文件数据被copy至内核缓冲区 

2 再从内核缓冲区copy至内核中socket相关的缓冲区 

3 最后再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

输出:

在这里插入图片描述


蓝鲸智云简介

腾讯蓝鲸智云(简称蓝鲸)软件体系是一套基于PaaS的技术解决方案,致力于打造行业领先的一站式自动化运维平台。目前已经推出社区版、企业版,欢迎体验。 请点击访问蓝鲸官网:bk.tencent.com

分类:
开发工具
标签:
收藏成功!
已添加到「」, 点击更改