常用的 Linux 性能调优 工具

1、 top 命令详解

2、 使用top命令查看 系统中使用CPU最多的进程

3、 使用top命令查看 系统中内存使用最多的进程

4、 查看 系统中对磁盘读写最多的进程

5、 查看 系统中使用网络流量最多的 进程

1、top 命令详解常用的 Linux 性能调优 工具

1、1 第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

• 10:45:47 当前时间
• up 61 days 系统运行时间
• 1 user 当前登录用户数
• load average: 6.28, 6.99, 7.18 系统负载,任务队列的平均长度,即CPU的平均负载情况,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
我们任取一列,如第一列,即表示在刚刚过去的1分钟内:
如果是单核CPU的话,1.00就表示CPU已经满负荷了,
如果是多核CPU的话,load average达到CPU的核数即说明该CPU已经满负荷了,
如果是多颗物理CPU,则当load average达到所有物理CPU的总核数时,说明系统CPU满负荷了。
简而言之,CPU的核数即为我们根据load average衡量CPU负载的依据。
那么当CPU负载达到哪个值时,就该引起我们注意了呢?按照参考文章给的经验值是CPU核数乘以0.7,
即如果CPU总核数为4,当load average上15分钟的数值达到2.8时,我们就该好好进系统看看了。

1、2第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks:
• 310 total 进程总数
• 1 running 正在运行的进程数
• 309 sleeping 睡眠的进程数
• 0 stopped 停止的进程数
• 0 zombie 僵尸进程数
Cpu(s):
• 3.3 us 用户空间占用CPU百分比
• 3.6 sy 内核空间占用CPU百分比
• 0.2 ni 用户进程空间内改变过优先级的进程占用CPU百分比
• 27.1 id 空闲CPU百分比
• 65.6 wa 等待输入输出的CPU时间百分比
• 0.0 hi hardware irq
• 0.2 si software irq
• 0.0 st steal time

1、3 最后两行为内存信息。内容如下:

Mem:
• 12304244 total 物理内存总量
• 146240 free 空闲内存总量
• 8502892 used 使用的物理内存总量
• 3655112 buff/cache 用作内核缓存的内存量
buffer是即将要被写入磁盘的,cache是被从磁盘中读出来的。这二者是为了提高IO性能的,并由OS管理,并非应用自己分配的内存,而是OS自己根据需要对空闲内存进行的额外利用。因为这部分只是缓存,降低IO,提升性能,只要应用程序有需要,OS可以直接将buffer写入磁盘,将cache删掉来得到空闲内存给应用程序使用。
buffer是用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
使用内存是实际当前使用内存减去buffers/cache之和;空闲内存是实际空闲内存加上buffers/cache之和
Swap:
• 4063228 total 交换区总量
• 2991268 free 空闲交换区总量
• 1071960 used 使用的交换区总量
• 2905240 avail Mem 表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。
备注:
我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不必担心自己的内存太少。
如果常常看到swap用了很多,那么你就要考虑加物理内存了。这也是在Linux服务器上看内存是否够用的标准。

1、4 进程信息区

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

2、 使用top命令查看 系统中使用CPU最多的进程

2、1运行top命令 按大写的 P 可以按照CPU使用率来进行排序

常用的 Linux 性能调优 工具

2、2扩展:按照实际使用CPU 从大到小排序显示所有进程列表

[[email protected] ~]# ps -aux --sort -pcpu | more #按照CPU降序排序查看
常用的 Linux 性能调优 工具
注:-pcpu 可以显示出进程绝对路径,方便找出木马程序运行的路径

3、 使用top命令查看 系统中内存使用最多的进程

3、1运行top命令,然后按下大写的M 可以按照内存使用率来排序显示

常用的 Linux 性能调优 工具

3、2扩展:

按照实际内存,从大到小排序显示所有进程列表
ps -aux –sort -rss | more
常用的 Linux 性能调优 工具

4、查看 系统中对磁盘读写最多的进程

4、1通过iostat 命令查看IO是否存在瓶颈

[[email protected] ~]# yum install -y sysstat #安装iostat 命令

常用参数:
-d 仅显示磁盘统计信息
-x 该选项将用于显示和io相关的扩展数据
-k 以k为单位显示每秒的磁盘请求数,默认单位块
-p device | ALL 用于显示块设备级系统分区的统计信息
常用的 Linux 性能调优 工具
输出信息含义:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)

测试: 给磁盘写入一些内容,写入时尽可能不读磁盘
[[email protected] ~]# dd if=/dev/zero of=a.txt bs=10M count=1000 ; sync
读入数据用/dev/zero /dev/zero不会读磁盘的
sync 把内存中的数据快速读写到磁盘上,只做dd不执行sync,不容易看出写入效果(如未安装sync 需要执行 yum install -y rsync)

4、2如果公司服务器很卡,查看CPU使用率

查看 系统中使用网络流量最多的 进程不高,内存也够用,但就是卡,打开新程序或文件时,更卡。这是瓶颈在那里呢,需要查看哪个进程使用磁盘读写最多。
安装 iotop 命令
yum install -y iotop
参数:
-o,only 只显示在读写硬盘的程序
-d SEC, -delay=SEC 设定显示时间间隔,刷新时间

[[email protected] ~]# iotop -o -d 1 # 显示正在使用磁盘的进程 在另一个终端对磁盘进行大量都操作,执行:
[[email protected] ~]# find /
查看结果
常用的 Linux 性能调优 工具

5、 查看 系统中使用网络流量最多的 进程

5、1使用nload 监控总体带宽使用情况

安装nload
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum install -y nload
开始监控
[[email protected] ~]# nload
常用的 Linux 性能调优 工具

在另一台终端下 进行压力测试
安装 ab 命令
[[email protected] ~]# yum install -y httpd-tools
[[email protected] ~]# ab -n 1000 -c 2 http:///www.baidu.com/index.html #产生一些数据
查看结果
常用的 Linux 性能调优 工具
当前速度为:6.79Mbit/s

5、2使用nethogs 找出使用带宽最多的进程

安装 nethogs
yum install -y hethogs
执行 命令
[[email protected] ~]# nethogs

在另一个终端下 产生数据
[[email protected] ~]# wget http://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_5.5.3.exe

查看结果
常用的 Linux 性能调优 工具