Linux 服务器性能查看分析调优

sanlanlan 2020-3-3 标签: linux 浏览:1131 评论:0

1.Linux服务器性能查看分析调优
    1.cpu
    2.内存(free)
    3.磁盘 (df , iostat, du ,uptime)(i/o iostat,pidstat)
    4.网络

2.系统性能分析工具

    a.常用系统命令
    Vmstat、sar、iostat、netstat、free、ps、top等

    b.常用组合方式
    vmstat、sar、iostat检测是否是CPU瓶颈
    free、vmstat检测是否是内存瓶颈
    iostat检测是否是磁盘I/O瓶颈
    netstat检测是否是网络带宽瓶颈

3. Linux性能评估与优化

cpu
    1.系统整体性能评估(uptime命令)load average三值大小一般不能大于系统CPU的个数
    2.利用vmstat命令监控系统CPU,主要看CPU负载情况。
    3.利用sar命令监控系统CPU
内存
    1.利用free指令监控内存
    2.利用vmstat命令监控内存
磁盘
    1.利用iostat评估磁盘性能
    2.df
网络
    (1)通过ping命令检测网络的连通性
    (2)通过netstat –i组合检测网络接口状况
    (3)通过netstat –r组合检测系统的路由表信息
    (4)通过sar –n组合显示系统的网络运行状态



++++++++++++++
为了迅速定位内存问题,我通常会先运行几个覆盖面比较大的性能工具,比如 free、top、vmstat、pidstat 等

具体的分析思路主要有这几步:

    先用 free 和 top,查看系统整体的内存使用情况。
    再用 vmstat 和 pidstat,查看一段时间的趋势,从而判断出内存问题的类型。

    最后进行详细分析,比如内存分配分析、缓存 / 缓冲区分析、具体进程的内存使用分析等。


1. 先用 free 和 top,uptime,查看系统整体使用情况。

    %Cpu(s): 22.7 us,  3.9 sy,  0.0 ni, 70.0 id,  0.2 wa,  0.0 hi,  3.2 si,  0.0 st
    KiB Mem :  8008876 total,   247584 free,  2980320 used,  4780972 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  4296480 avail Mem


    Cpu(s)行展示了当前CPU的状态:

    us表示用户进程占用CPU比例,

    sy表示内核进程占用CPU比例,

    id表示空闲CPU百分比,

    wa表示IO等待所占用的CPU时间的百分比。wa占用超过30%则表示IO压力很大。

    Swap行同Mem行,cache表示缓存,用户已打开的文件。如果Swap的used很高,则表示系统内存不足。

    在top命令下,按1,则可以展示出服务器有多少CPU,及每个CPU的使用情况
    在top命令下,按shift + "c",则将进程按照CPU使用率从大到小排序,按shift+"p",则将进程按照内存使用率从大到小排序,很容易能够定位出哪些服务占用了较高的CPU和内存。


2. 再用 vmstat 和 pidstat,mpstat, 查看cpu 占有率。
    vmstat 1
    pidstat -d 1 | pidstat
    mpstat 1 | mpstat -P ALL 1

3. vmstat , free 查看内存,df 查看磁盘
    vmstat 1
    free -h | freee -m

4. iostat 查看io iostat -d -x 1

5.
    (1)通过ping命令检测网络的连通性
    (2)通过netstat –i组合检测网络接口状况
    (3)通过netstat –r组合检测系统的路由表信息
    (4)通过sar –n组合显示系统的网络运行状态  sar -n TCP,ETCP 1
 


+++++++++++++

1分钟快速查看服务器性能

1.uptime 快速查看机器负载情況

01:19:45 up 2 days, 14:43,  1 user,  load average: 1.11, 1.12, 1.12
表示1分钟、5分钟、15分钟的平均负载情况
如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。
反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

如果每個逻辑cpu当前的活动进程不大于3,则系统性能良好;
如果每個逻辑cpu当前的活动进程不大于4,表示可以接受;
如果每個逻辑cpu当前的活动进程大于5,则系统性能问题严重。

一般计算方法:负载值/逻辑cpu个数

2.vmstat (查看系统是否繁忙)

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 296944 440008 2535188    0    0    55   768    7   74 48  5 45  2  0
 1  0      0 296928 440008 2535188    0    0     0     0 1146  333 50  0 50  0  0
 5  0      0 222040 440008 2535188    0    0     0     0 1616 1011 59 10 30  0  0
13  0      0 144216 440008 2535188    0    0     0     0 2425 2473 72 28  0  0  0
 9  0      0 202152 440016 2535184    0    0     0    80 2440 3140 70 30  0  0  0

 r:等待在CPU资源的程序数.这个资料比平均负载更加能够体现CPU负载情况,资料中不包含等待IO的程序。
 如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。

si,so:交换区写入和读取的数量。如果这个资料不为0,说明系统已经在使用交换区(swap),机器实体内存已经不足。

us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示使用者时间(user)、系统(核心)时间(sys)、
空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机器消耗)。
这些cpu时间可以很快的了解CPU 是否出于繁忙状态。如果用户时间和系统时间相加非常大,cpu 出于忙于执行指令。
如果io 等待时间很长,那么系统瓶颈可能在磁盘io.


vmstat 1 (每秒 统计一次)

vmstat 3 2(每3秒 统计一次,统计2次)


procs
r:等待运行的进程数。
b:处在非中断睡眠状态的进程数。
w:被交换出去的可运行的进程数。

memeory
swpd:虚拟内存使用情况,单位为KB。
free:空闲的内存,单位为KB。
buff:被用来作为缓存的内存数,单位为KB。

swap
si:从磁盘交换到内存的交换页数量,单位为KB。
so:从内存交换到磁盘的交换页数量,单位为KB。

io
bi:发送到块设备的块数,单位为KB。
bo:从块设备接受的块数,单位为KB。

system
in:每秒的中断数,包括时钟中断。
cs:每秒的环境切换次数。

cpu
按cpu的总使用百分比来显示。
us:cpu使用时间。
sy:cpu系统使用时间。
id:闲置时间。


3.mpstat (进程的cpu 占有率)

mpstat 1 (统计总和cpu数据,每秒统计一次 ,不会覆盖之前数据)


mpstat -P ALL 1 (-P cpu, 统计所有cpu)
11:27:07  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
11:27:08  all   50.75    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.25
11:27:08    0    1.01    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.99
11:27:08    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单执行绪应用程式引起的。
输出CPU 的进程占有率

4.pidstat 进程的CPU 占有率

pidstat 1

11:29:10       PID    %usr %system  %guest    %CPU   CPU  Command
11:29:11      2436  100.00    0.00    0.00  100.00     1  php
11:29:11      7451    1.00    1.00    0.00    2.00     0  pidstat
11:29:11     25239    1.00    0.00    0.00    1.00     0  php


pidstat -d 1 (查看I/O 最多的进程 PID)
18:18:09    PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
18:18:10  17958      0.00     12.00      0.00  php
18:18:10  20355      0.00      4.00      0.00  php

18:18:10    PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
18:18:11    847      0.00     20.00      0.00  jbd2/dm-2-8
18:18:11   1811      0.00     36.00      0.00  crond

5.iostat

iostat -d -x 1

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          48.23    0.00    4.89    2.27    0.00   44.61

Device: rrqm/s  wrqm/s r/s   w/s  rsec/s  wsec/s  avgrq-sz avgqu-sz await r_await w_await svctm  %util
sda     0.16   19.18  0.32   0.94   11.48   160.94  136.18  0.02   12.35    7.29   14.09  1.81   0.23
sdb     0.35  136.74  1.78  11.13   51.42  1982.93   18.02  0.06    0.54    5.98    0.46  0.42   4.73
sdc     0.01  113.47  0.69   1.21  157.82   917.46  564.19  0.03   18.02    4.80   25.58  2.44   0.47
dm-0    0.00    0.00  0.48  20.12   11.44   160.94    8.37  1.53   74.36   12.32   75.85  0.11   0.23
dm-1    0.00    0.00  0.00   0.00    0.01     0.00      8.00  0.00    6.01     6.01    0.00  4.29   0.00
dm-2    0.00    0.00  2.84  62.55  209.24  2900.39    8.51  4.01   10.99    7.59   11.01  0.14   5.15


r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写资料量(千位元组)。读写量过大,可能会引起效能问题。

await:IO操作的平均等待时间,单位是毫秒。这是应用程式在和磁碟互动时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬体装置遇到了瓶颈或者出现故障。

avgqu-sz:向装置发出的请求平均数量。如果这个数值大于1,可能是硬体装置已经饱和(部分前端硬体装置支援并行写入)。

%util:装置利用率。这个数值表示装置的繁忙程度,经验值是如果超过60,可能会影响IO效能(可以参照IO操作平均等待时间)。如果到达100%,说明硬体装置已经饱和。

-d 选项是指显示出 I/O 的性能指标;
-x 选项是指显示出扩展统计信息(即显示所有 I/O 指标)。

6.free 查看内存情况

free -m
free -h

             total       used       free     shared    buffers     cached
Mem:          3957       3670        287          1        430       2477
-/+ buffers/cache:        762       3195
Swap:         4031          0       4031

shared:多进程共享的內存总额
- buffers/cache:(已用)的內存数,即used-buffers-cached
+ buffers/cache:(可用)的內存数,即free+buffers+cached


如果可用内存非常少,系统可能会动交换区(如果配置了),这样会增加io 开销(可以在iostat中体现),降低系统性能。


7.sar
sar -n DEV 1

11:37:29  IFACE  rxpck/s  txpck/s  rxkB/s  txkB/s rxcmp/s  txcmp/s  rxmcst/s
11:37:30     lo     0.00     0.00    0.00    0.00    0.00     0.00      0.00
11:37:30   eth0    41.00     4.00    2.42    0.45    0.00     0.00      0.00

11:37:30  IFACE  rxpck/s  txpck/s  rxkB/s  txkB/s rxcmp/s  txcmp/s  rxmcst/s
11:37:31     lo     0.00     0.00    0.00    0.00    0.00     0.00      0.00
11:37:31   eth0     5.94     5.94    0.57    0.91    0.00     0.00      0.00

11:37:31  IFACE  rxpck/s  txpck/s  rxkB/s  txkB/s rxcmp/s  txcmp/s  rxmcst/s
11:37:32     lo     0.00     0.00    0.00    0.00    0.00     0.00      0.00
11:37:32   eth0     3.00     3.00    0.19    0.55    0.00     0.00      0.00

sar命令在这里可以查看网络的吞吐率。在排查效能问题时,可以通过网络的吞吐量,判断网路装置是否已经饱和。
如示例输出中,eth0网络卡装置,吞吐率大概在12 Mbytes/s(5.94+5.94),既96 Mbits/sec,没有达到1Gbit/sec的硬体上限。

sar -n TCP,ETCP 1

11:42:35  active/s passive/s    iseg/s    oseg/s
11:42:36      0.00      0.00      6.00      6.00

11:42:35  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
11:42:36      0.00      0.00      0.00      0.00      0.00


sar命令在这里用于检视TCP连线状态,其中包括:

active/s:每秒本地发起的TCP连接数,既通过connect呼叫建立的TCP连接;

passive/s:每秒远端发起的TCP连接数,即通过accept呼叫建立的TCP连接;

retrans/s:每秒TCP重传数量;

TCP连线数可以用来判断效能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。

TCP重传可能是因为网路环境恶劣,或者服务器压力大



文章参考:
https://www.itread01.com/content/1545148691.html

本文相关标签:

发表评论: