服务器性能分析

1.top命令(最常用的性能分析工具)

top - 10:38:50 up 220 days, 11:36,  2 users,  load average: 0.23, 0.28, 1.22
Tasks: 755 total,   4 running, 751 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.7%us,  4.5%sy,  0.0%ni, 87.0%id,  0.0%wa,  0.0%hi,  1.8%si,  0.0%st
Mem:  65956496k total, 56346988k used,  9609508k free,    47104k buffers
Swap: 12582904k total,  7947060k used,  4635844k free,   842860k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                               
2608 redis     20   0 6176m 4.4g  848 S  9.9  7.0  49990:48 codis-server                                                                                                                    
14551 admin     20   0 38.7g 1.0g 2824 S  9.9  1.6  29398:48 java                                                                                                                                                                                                                             
16471 www       20   0  144m  45m  932 S  2.6  0.1   8475:36 nginx                                                                                                                           
16473 www       20   0  137m  41m  932 S  2.3  0.1   8493:40 nginx                                                                                                                           
16474 www       20   0  145m  52m  932 S  2.3  0.1   8586:39 nginx

通过top命令,可以看到

  • 时间信息:当前时间10:38:50;系统运行时间up 220 days, 11:36;
  • 用户信息:当前登录用户数2 user;
  • 系统负载(1min,5min,15min到现在的平均值)load average: 0.23, 0.28, 1.22(值越少,说明处理的越快,越好);
  • 进程信息(总进程数,正在运行进程数,睡眠进程数,停止进程数,僵尸进程数)Tasks: 755 total, 4 running, 751 sleeping, 0 stopped, 0 zombie;
  • CPU信息(用户空间占比,系统空间占比,用户进程空间内改变过优先级的进程占用CPU百分比,空闲CPU占比,等待输入输出的CPU占比,软中断占比,硬中断占比,潜性空间占比)Cpu(s): 6.7%us, 4.5%sy, 0.0%ni, 87.0%id, 0.0%wa, 0.0%hi, 1.8%si, 0.0%st;
  • Memory信息(物理内存总量,使用的物理内存量,空闲的内存量,用作内核缓存的内存量)Mem: 65956496k total, 56346988k used, 9609508k free, 47104k buffers;
  • 交换区信息(交换区总量,使用量,空闲量,缓存的交换区量)Swap: 12582904k total, 7947060k used, 4635844k free, 842860k cached;
  • 进程列表信息(进 程id,进程所有者的用户名,优先级,nice值[负值表示高优先级,正值表示低优先级],进程的虚拟内存总量[VIRT=SWAP+RES]kb,进程 正在使用未被换出的物理内存大小[RES=CODE+DATA]kb,共享内存大小kb,进程状态[D=不可中断的睡眠状态、 R=运行、S=睡眠、T= 跟踪/停止、Z=僵尸进程],上次更新到现在的CPU占比、进程使用的物理内存占比、进程使用的CPU时间总计0.01s、命令)PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

2.uptime和w命令(负载查询)

  • uptime命令

      10:46:12 up 220 days, 11:44,  2 users,  load average: 0.36, 0.28, 0.85
    

通过uptime命令,我们可以获取到如top第一行一样的负载信息(10:46:12 up 220 days, 11:44, 2 users, load average: 0.36, 0.28, 0.85)

  • w命令

      10:46:43 up 220 days, 11:44,  2 users,  load average: 0.26, 0.26, 0.82
      USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
      root     pts/0     Thu19    1:28m  0.04s  0.04s -bash
      admin    pts/1     10:37    0.00s  0.03s  0.01s w
    

通过w命令查看,我们可以获取到如top第一行一样的负载信息(10:46:43 up 220 days, 11:44, 2 users, load average: 0.26, 0.26, 0.82)。另外可以获得每个用户的登录名(USER)、终端(TTY,pts是虚拟终端)、登录机器的IP(FROM)、登录的时间(LOGIN@)、 空闲时间(IDLE)、JCPU(用户对应终端上所有进程执行的时间)、PCPU(当前这个进程所使用的时间)、当前正在运行的命令(WHAT)

3.free和vmstat命令(内存查询)

  • free命令

                    total        used        free      shared  buff/cache   available
      Mem:          64410       53463        9537          13        1409       10603
      Swap:         12287        7760        4527
    

通过free命令,我们可以获取到物理内存的大小、缓存的大小、交换区的大小(总量、使用量、空闲量、共享量、内核缓存、缓存的交互区量)。
同top的Mem比较:可以看出free命令不仅可以获得物理内存的大小,还可以获得缓存区、交换区的大小。
注意:当Mem中的used接近total时,不要说内存快用完了。再看看缓存的大小,因为缓存也可以去当物理内存使用。
free [-b/-k/-m/-g] 显示的物理内存量分别以bytes/KB/MB/GB为单位。free命令不带参数,默认和free –k命令一致。

  • vmstat命令

      procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
       3  0 7946948 9894296  29632 1293112    2    0    12    76    0    0 23 17 60  0  0
    

通过vmstat命令,我们可以获取到等待执行的任务数(r),等待IO的进程数量(b),正在使用的虚拟内存(swpd),空闲内存(free),块设 备进行读写的缓存(buff),文件系统缓存(cache),每秒从交换区写入内存的大小(si)kb/s,每秒从内存写到交换区的大小(so),每秒读 取磁盘的块数(bi),每秒写入磁盘的块数(bo),每秒中断数(in),上下文切换数(cs),用户进程耗cpu的时间(us),系统耗cpu的时间 (sy),空闲时间(id),等待io时间(wa),潜行时间(st)

4.netstat命令(网络查询 )

  • netstat

      Active Internet connections (w/o servers)
      Proto Recv-Q Send-Q Local Address               Foreign Address             State      
      tcp        0      0 4*.**2.**1.1*2:http           1*1.1**.1*4.*6:*7*8          SYN_RECV   
    

通过netstat命令,我们可以获取到Active Internet connections(有源TCP连接),以及网络中的协议、接收队列、发送队列(一般情况下,接收队列和发送队列为0;如果不是,则表示软件包正在队 列中堆积)、本地地址、外部地址、协议的状态。网络信息具体的有网络连接,路由表,接口状态,masquerade 连接,多播成员等。
另外还有一种Active UNIX domain sockets(有源Unix域套接口,和网络套接字一样,但是只能用于本机通信,性能可以提高一倍),以及网络协议、连接到本套接口上的进程号、标识、 套接口类型、套接口当前状态、i结点、连接到套接口的其他进程使用的路径名。

netstat的相关参数说明:
-a(可以看到上面两类)。
-t (仅显示tcp相关选项)
-u (仅显示udp相关选项) 在两台服务器上都没有该项内容,上个QQ,应该就有了。
-l (仅显示又在Listen监听的服务状态)
-r (仅显示路由信息)
-p (仅显示建立链接的程序名)
-s (按各个协议进行统计)
-e (显示扩展信息)

5.df -h命令(磁盘消耗情况)

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              97G  2.0G   90G   3% /
/dev/sda5             1.7T   35G  1.6T   3% /data
/dev/sda1              99M   12M   83M  12% /boot
tmpfs                 8.0G     0  8.0G   0% /dev/shm

通过df –h命令,我们可以获取到文件系统的类别,大小,使用量,空闲量,使用率,挂载点等信息。tmpfs是一种基于内存的文件系统。

6.iostat命令(磁盘I/O状态)

iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
1.命令格式:
iostat[参数][时间][次数]
2.命令功能:
通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。
3.命令参数:
-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息

Linux 2.6.32-279.el6.x86_64 (zk2.******.com)    09/08/2017      _x86_64_        (24 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
      22.92    0.00   17.45    0.06    0.00   59.57
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               7.17   436.16   14.06   14.21   553.40  3602.94   147.04     0.17    6.18   0.99   2.79

说明:

  • cpu属性值说明:
    %user:CPU处在用户模式下的时间百分比。
    %nice:CPU处在带NICE值的用户模式下的时间百分比。
    %system:CPU处在系统模式下的时间百分比。
    %iowait:CPU等待输入输出完成时间的百分比。
    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
    %idle:CPU空闲时间百分比。
    备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
  • disk属性值说明:
    rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
    wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
    r/s: 每秒完成的读 I/O 设备次数。即 rio/s
    w/s: 每秒完成的写 I/O 设备次数。即 wio/s
    rsec/s: 每秒读扇区数。即 rsect/s
    wsec/s: 每秒写扇区数。即 wsect/s
    rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
    wkB/s: 每秒写K字节数。是 wsect/s 的一半。
    avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
    avgqu-sz: 平均I/O队列长度。
    await: 平均每次设备I/O操作的等待时间 (毫秒)。
    svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
    %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
    备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

你可能感兴趣的:(服务器性能分析)