linux查看性能几种方式

1、uptime

linux Mac

uptime
9:44  up 2 days, 23:11, 2 users, load averages: 2.63 2.40 2.38

对应含义

时间

系统启动的总时间 up 2 days, 23:11

当前用户数 2 users

负载5分钟、10分钟、15分钟 load averages: 2.63 2.40 2.38

2、dmesg |tail

linux

dmesg | tail
[24833196.329323] docker0: port 11(vethc40279c) entered forwarding state
[24833196.329684] docker0: port 11(vethc40279c) entered disabled state
[24833196.520603] eth0: renamed from veth5b842db
[24833196.530887] docker0: port 11(vethc40279c) entered blocking state
[24833196.530889] docker0: port 11(vethc40279c) entered forwarding state
[24848260.813224] veth0d65024: renamed from eth0
[24848260.838585] docker0: port 5(veth154bc9a) entered disabled state
[24848260.843238] docker0: port 5(veth154bc9a) entered disabled state
[24848260.860121] device veth154bc9a left promiscuous mode
[24848260.860138] docker0: port 5(veth154bc9a) entered disabled state

[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

如果有消息,它将查看最近的10条系统消息。通过此命令查找可能导致性能问题的错误。上面的示例包括oom-killer和TCP丢弃请求。

不要错过这一步!dmesg始终值得被检查。

3、vmstat 1

linux

vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1      0 37702664 297108 12554924    0    0     9    23    0    0  3  1 96  0  0
 2  0      0 37703372 297108 12554704    0    0    16   972 60624 55034  3  2 94  0  0
 4  0      0 37698956 297108 12558884    0    0     0   104 61869 53212  4  2 94  0  0
 5  0      0 37697212 297108 12558920    0    0     0     0 58687 48806  6  2 92  0  0
 3  0      0 37697556 297108 12559564    0    0     0    64 54957 53522  4  2 94  0  0
 5  0      0 37649904 297108 12557308    0    0     0   124 69720 67756  6  4 90  0  0
 5  0      0 37656512 297108 12557852    0    0     0     0 86792 86950 10  5 85  0  0
36  0      0 37679580 297108 12554840    0    0     0   112 71483 68682  6  3 91  0  0
 2  0      0 37648344 297112 12555888    0    0     0   408 72109 67240  6  3 91  0  0
 2  0      0 37629072 297112 12557852    0    0     0    68 68309 69688  6  3 91  0  0
 2  0      0 37649044 297112 12558996    0    0     0   168 66550 65630  6  3 90  0  0
 1  1      0 37647808 297112 12559580    0    0     0  2776 66278 62361  5  3 93  0  0

vmstat是虚拟内存状态的缩写。它在每一行上打印关键服务的统计信息。

vmstat在参数1下运行,以显示一秒钟的摘要。在某些版本中,第一行的某些列展示的是自启动以来的平均值,而不是前一秒的平均值。现在请跳过第一行,除非你想学习并记住那一列是那一列。

要检查的列:

  • r:在CPU上运行并等待切换的进程数。这为确定CPU饱和比平均负载提供了更好的信号,因为它不包括I/O。简单来说就是:r的值大于CPU数量即为饱和状态。
  • free:可用内存以字节为单位,如果数字很大,则说明你有足够的可用内存。free -m命令能够更好的描述此状态。
  • si, so:swap-ins和swap-outs. 如果这两个值不为0,则说明内存不足。
  • us, sy, id, wa, st:这是总CPU时间的百分比。他们分别是用户时间、系统时间(内核)、空闲时间(包括I/O等待)、I/O等待和被盗时间(虚拟机所消耗的时间)。

4、mpstat -P ALL 1

linux 需要安装

mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)

07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle
07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.78
07:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.99
07:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.00
07:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.00
07:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03
[...]

此命令用于显示每个CPU的CPU时间明细,可用于检查不平衡的情况。单个热CPU可能是因为存在一个单线程应用。

5、pidstat 1

linux 需要安装

pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)

07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0
07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java
07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java
07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java
07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat

07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java
07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java
07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat

pidstat有点像top的每个进程摘要,但是会打印滚动摘要,而不是清除屏幕。这对于观察随时间变化的模式很有用,还可以将看到的内容记录下来。

上面的示例中,两个java进程消耗了大部分CPU时间。%CPU这一列是所有CPU的总和。1591%意味着java进程几乎耗尽了16个CPU。

6、iostat -xz 1

Linux mac

iostat -xz 1
disk0       cpu    load average
    KB/t  tps  MB/s  us sy id   1m   5m   15m
   33.90   41  1.35   5  5 90  4.82 3.04 2.72

和top uptime差不多,但是多了us sy id用户时间、系统时间(内核)、空闲时间(包括I/O等待

7、free -m

root@crm-fire-timer-carry-5b89dc594b-zpp5q /]# free -m
              total        used        free      shared  buff/cache   available
Mem:          64322       15051       36527           3       12743       49384
Swap:             0           0           0

看最右边两列:

  • buffers:缓冲区缓存,用于块设备I/O。
  • cached:页缓存,用于文件系统。

我们检查他们的值是否接近0,接近0会导致更高的磁盘I/O(可以通过iostat来确认)以及更糟糕的磁盘性能。上面的示例看起来不错,每个值都有许多兆字节。

-/+ buffers/cache为已用内存和可用内存提供更加清晰的描述。Linux将部分空闲内存用作缓存,但是在应用程序需要时可以快速回收。因此,用作缓存的内存应该应该以某种方式包含在free这一列,-/+ buffers/cache这一行就是做这个事情的。

上面这一段翻译,可能比较抽象,感觉说的不像人话,老许来转述成人能理解的话:

total = used + free
used = (-/+ buffers/cache这一行used对应列) + buffers + cached
=> 24545 = 23944 + 59 + 541
free = (-/+ buffers/cache这一行free对应列) - buffers - cached
=> 221453 = 222053 - 59 - 541

如果在Linux使用了ZFS会令人更加疑惑(就像我们对某些服务所做的一样),因为ZFS有自己的文件系统缓存。而free -m并不能正确反应该文件系统缓存。它可能表现为,系统可用内存不足,而实际上该内存可根据需要从ZFS缓存中使用。

ZFS: Zettabyte File System,也叫动态文件系统,更多信息见百度百科

8、sar -n DEV 1

sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)

12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00
12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00
12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00
12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00
12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
^C

可以用这个工具检查网络接口的吞吐量:rxkB/s和txkB/s。作为工作负载的度量,还可以检查吞吐量是否达到上限。在上面的列子中,eth0的接受速度达到22Mbyte/s(176Mbit/s),该值远低于1Gbit/s的限制。

9、sar -n TCP,ETCP 1

sar -n TCP,ETCP 1
sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)

12:17:19 AM  active/s passive/s    iseg/s    oseg/s
12:17:20 AM      1.00      0.00  10233.00  18846.00

12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:20 AM      0.00      0.00      0.00      0.00      0.00

12:17:20 AM  active/s passive/s    iseg/s    oseg/s
12:17:21 AM      1.00      0.00   8359.00   6039.00

12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:21 AM      0.00      0.00      0.00      0.00      0.00

这是一些关键TCP指标的总结。其中包括:

  • active/s:本地每秒启动的TCP连接数(例如,通过connect())。
  • passive/s:远程每秒启动的TCP连接数(例如,通过accept())
  • retrans/s:TCP每秒重传次数。

active和passive连接数通常用于服务器负载的粗略度量。将active视为向外的连接,passive视为向内的连接可能会有帮助,但这样区分并不严格(例如,localhost连接到localhost)。

重传是网络或服务器出问题的迹象。它可能是不可靠的网络(例如,公共Internet),也可能是由于服务器过载并丢弃了数据包。上面的示例显示每秒仅一个新的TCP连接。

10、top

top
top - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92
Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie
%Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers
KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 20248 root      20   0  0.227t 0.012t  18748 S  3090  5.2  29812:58 java
  4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave
 66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top
  5235 root      20   0 38.227g 547004  49996 S   0.7  0.2   2:02.74 java
  4299 root      20   0 20.015g 2.682g  16836 S   0.3  1.1  33:14.42 java
     1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 ksoftirqd/0
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:06.94 kworker/u256:0
     8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched