性能是许多系统管理员所害怕的事情之一。有时,当事情进展顺利时,你甚至不会考虑它。然后,突然您接到最终用户(或更糟糕的是,许多最终用户)打来的电话,称您负责的应用程序“感觉很慢”。或者也许它完全不可用。现在您必须进入故障排除模式。
不过,你从哪里开始呢?在本文中,我将介绍一些基础知识,但首先,我将退后一步。在尝试识别问题之前,了解有关系统的一些基线信息非常重要。也许您的系统正在做一些不应该做的事情,这导致了高负载。或者也许它正在做它一直以来所做的事情,只是承受了一些额外的负载。通过保留良好的文档和历史性能数据,在问题发生之前开始进行性能故障排除。
从顶部开始
第一个首选的性能故障排除工具是top
. 该top
实用程序为您提供了一个出色的、不断更新的流程和性能仪表板。正在使用多少内存?平均负载是多少?哪些进程使用的资源最多?所有这一切都已准备就绪top
。
top - 10:55:50 up 6 min, 1 user, load average: 0.03, 0.18, 0.10
Tasks: 188 total, 1 running, 187 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.6 us, 0.0 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3654.6 total, 1477.3 free, 700.3 used, 1752.4 buff/cache
MiB Swap: 3280.0 total, 3280.0 free, 0.0 used. 2954.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
6 root 20 0 0 0 0 I 0.0 0.0 0:00.01 kworker/0:0-xfs-c+
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-even+
8 root 20 0 0 0 0 I 0.0 0.0 0:00.16 kworker/u8:0-flus+
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 I 0.0 0.0 0:00.36 kworker/u8:1-even+
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_kthre
12 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_rude_
13 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_trace
14 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0
15 root 20 0 0 0 0 I 0.0 0.0 0:00.41 rcu_preempt
16 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
17 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:1-xfs-c+
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
此外,您还可以过滤top
、搜索进程,甚至查看系统中每个核心的利用率。所以,你的第一站应该是top
!
你有空吗?
该free
工具显示系统当前的内存消耗情况,这是您发现系统消耗情况的第二站。
total used free shared buff/cache available
Mem: 3742352 717408 1512544 5312 1794520 3024944
Swap: 3358716 0 3358716
请记住,Linux 内核将获取可用内存并将其分配给磁盘缓冲区和缓存。Linux 将在系统需要时释放这些资源,因此,如果free
提示您没有可用内存,请务必在确定内存不足之前检查缓冲区/缓存列。
检查虚拟机状态
使用vmstat
是查看内存消耗的另一种好方法。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1511816 9684 1784948 0 0 233 676 256 262 3 2 95 0 0
它会分解缓冲区和缓存,您还将获得有关交换利用率的信息。交换通常表明您的系统正在耗尽其高性能内存,并且必须诉诸交换到磁盘。此过程可能会对某些应用程序产生破坏性影响。