Linux常用性能调测命令简介

找不到分类 evilven 8个月前 (03-10) 95次浏览 未收录 0个评论 扫描二维码

Linux常用性能调测命令简介

一、 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:虚拟机占用百分比

Linux常用性能调测命令简介

按1切换过程查看单个 cpu详情模式

Linux常用性能调测命令简介

2 mpstat

简介:mpstat(multi-processor statistics),它能实时检测多处理器系统上的每个cpu的使用情况。

格式:mpstat [ -P {0|1|…|ALL} ] [interval] [count]

常用命令举例:mpstat -P ALL 1 100

输出:

Linux常用性能调测命令简介

一般我们最关心的几个:

%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端口的进程

输出:

Linux常用性能调测命令简介

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信息:

Linux常用性能调测命令简介

9 sar

简介:sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

查看网卡流量命令:sar -n DEV 2 100 

输出:

Linux常用性能调测命令简介

查看网卡流量的还有ifstat命令。

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指定进程

输出:

Linux常用性能调测命令简介

12 pstack

简介:pstack用来查看进程的堆栈快照 

命令:pstack pid 

输出:pstack pid,输出进程的各线程的堆栈

Linux常用性能调测命令简介

13 perf top -p pid

简介:perf是Linux kernel自带的系统性能优化工具,perf可以用于查看热点函数,从而帮助开发者来优化程序性能。 

命令:perf top -p pid查看某个进程的函数热点 

输出:

Linux常用性能调测命令简介

二、 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查看堆栈

Linux常用性能调测命令简介

4 GDB里常用的命令

bt查看堆栈 

f x进入某层调用的函数 

P 打印某个变量 

B 设置断点 b func b file.cpp:linenum b class:func 

Info b 查看设置的断点 

N 执行下一步 

C 继续执行上一个命令 

Run运行

Run运行

Linux常用性能调测命令简介

三、性能调测简介

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

输出:

Linux常用性能调测命令简介


蓝鲸智云简介

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

如有需要请联系蓝鲸客服QQ:800802001,有关蓝鲸搭建布署以及使用方面的疑问,可加入QQ群讨论交流:QQ群(495299374)

您可能比较感兴趣

Linux常用性能调测命令简介

蓝鲸智云招募合作伙伴

合作共赢,是腾讯文化中重要的一部分。蓝鲸智云团队计划在全国范围内,大力发展生态体系,寻找优质的合作伙伴,共创运维领域的新局面。我们希望为解决方案供应商、集成商、服务商、应用软件开发商、咨询机构等提供更多的增值服务。

招募详情,请点击访问蓝鲸官网:

http://bk.tencent.com

Linux常用性能调测命令简介


Hacking For Fun , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux常用性能调测命令简介
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址