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