阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux性能优化和监控系列(一)——top工具

104次阅读
没有评论

共计 7565 个字符,预计需要花费 19 分钟才能阅读完成。

解释服务器发生了什么——top 工具

在检查服务器的详细工作性能状态前,系统管理员需要对当前服务器状态有总体的了解. top 是检查服务器总体状态的强有力工具, 通过 top 可以获取 CPU, Memory, Process 运行信息, 如下是运行 top 命令后的数据显示:

top – 20:08:09 up 10 min,  1 user,  load average: 0.00, 0.02, 0.01
Tasks: 104 total,  1 running, 103 sleeping,  0 stopped,  0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  3924700k total,  260016k used,  3664684k free,    13552k buffers
Swap:  4063224k total,        0k used,  4063224k free,    75816k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
6284 root      20  0 15028 1308 1000 R  0.3  0.0  0:00.03 top
1 root      20  0 19356 1580 1268 S  0.0  0.0  0:01.80 init
2 root      20  0    0    0    0 S  0.0  0.0  0:00.00 kthreadd
3 root      RT  0    0    0    0 S  0.0  0.0  0:00.02 migration/0
4 root      20  0    0    0    0 S  0.0  0.0  0:00.00 ksoftirqd/0
5 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 migration/0
6 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 watchdog/0
7 root      RT  0    0    0    0 S  0.0  0.0  0:00.03 migration/1
8 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 migration/1
9 root      20  0    0    0    0 S  0.0  0.0  0:00.00 ksoftirqd/1
10 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 watchdog/1

用 top 监控 CPU 性能

在用 top 分析服务器性能时,首先注意的是 load average, load average 包括三个信息, 分别指最后一分钟, 最后 5 分钟, 最后 15 分钟系统平均性能, 该数值的锚固值 (anchor value) 是 1.0. 对于一个单核 CPU, 当锚固值达到 1.0 时, 系统会处于忙碌状态, 但应用也可以正常运行, 没有任何应用排队等待 CPU.

需要注意的是 load average 是系统的平均性能而不是 CPU 的, 有可能 load average 远高于 1.0, 但是 CPU 没有做任何工作, 如系统忙于等待 I /O.

使系统总是工作在 anchor value 为 1.0 也许很好, 但也许没有必要, 因此在判断系统工作在 anchor value 为 1.0 时是好是坏之前, 需要系统管理员更加深入的了解特定工作量. 比如对于如下两个任务:

Task 1: while true; do true; done

Task 2: dd if=/dev/sda of=/dev/null

当执行 Task 1 时, Task 1 会使 CPU 的一个核使用率达到 100%, anchor value 值也会超过 1.0, 如果系统 CPU 只有一个核, 那么系统会处于完全忙碌状态, 这时新的进程不会再开始, 会被放入队列中排队, 直到有空闲的 CPU 资源.

当执行 Task 2 时, Task 2 也会使 anchor value 大于或等于 1.0, 但是这时该任务只是在等待 I / O 资源, CPU 任然可以继续给其他进程使用.

如果系统 CPU 非常忙碌, 你需要通过 top 命令的 CPU 行深入的分析系统正在做什么, CPU 行提供如下 CPU 性能信息:

usus 表示 user space 负载, 通常运行在 user space 下的应用程序由终端用户启动, 不以 root 权限运行, 如果 us 负载高, 这意味着应用程序消耗 CPU 高.
sysy 表示 system space 负载, 通常运行在 system space 下的进程由操作系统内核调用, 正常情况下 sy 不会很高.
nini 表示已经启动的用 nice 命令调整的任务数.
idid 表示 CPU 空闲的时间.
wawa 表示 CPU 正在等待 I /O, 如果 wa 连续大于 30, 这表示 关联 storage 和 network 的I/O channel 有问题,需要检查 network 和 storage 的性能问题.
hihi 表示 CPU 用在处理硬件终端的时间.
sisi 跟软件中断有关, 通常是些由内核创建的低优先级软件终端, 几乎很少会遇到 si 使用率很高.
stst 跟一个被虚拟化使用的环境有关, 在某些虚拟化环境中, 虚拟机会宿主操作系统偷取 CPU 时间, 如果这种情况发生, st 会有使用率, 若使用率很高, 需考虑从服务器卸载虚拟机.

用 top 监控内存性能

top 命令的 Mem 行跟内存和交换分区有关, Mem 行包括五个参数:

total服务器总的物理内存.
used当前使用的总得内存, 包括 buffers 和 cache.
free当前没有使用的内存.
buffersbuffer 跟服务器使用的 write cache 有关, 也包括文件系统表和一些服务器需要放在内存的结构. 所有需要写到磁盘的数据首先写到 write cache, 从终端用户的角度来看, 用户使用的应用程序不需要等待数据写入. 如果系统需要更多的内存, 而不能从 free 的内存分配时, write cache 能被刷新, 然后将 write cache 使用的内存给其他应用程序使用. 总之, buffer 使系统变得更快.
cached当用户从服务器请求文件时,通常文件需要从磁盘读取, 由于磁盘比内存大约慢 1000 倍, 因此每次从磁盘获取文件后都放到 cache 来加速下次读取该文件. 如果分配给 cahce 的内存需要给其他应用程序使用, cache 可以被立即释放加入到 free 内存中以便使用. 对于那些读次数多的服务器,cache 内存通常很高,如果 cache 内存低于总内存的 40%, 那么服务器性能可能很慢, 这时需增加内存.
swapswap space 是在硬盘上模拟内存, 如果系统开始使用 swap, 这可不好, 因为 swap 比内存大约慢 1000 倍. 但 swap 并不是总是不好, 如内核使用它把不需要的数据从内存移除, 以便释放更多内存空间.

 

推荐阅读:

Linux 流量监控工具 – iftop http://www.linuxidc.com/Linux/2013-08/89102.htm

Linux top 命令详解 http://www.linuxidc.com/Linux/2013-06/85626.htm

Linux 下 top 命令 http://www.linuxidc.com/Linux/2013-04/83151.htm

Linux 下高效的使用 top 命令 http://www.linuxidc.com/Linux/2013-04/82676.htm

Linux 系统 top 命令详解 http://www.linuxidc.com/Linux/2012-12/76750.htm

Linux 系统监控负载 top 命令详解 http://www.linuxidc.com/Linux/2012-10/72756.htm 

监控 Buffer 和 Cache 内存

1. 重启服务器.

2. 观察当前服务器 Buffer 和 Cache.

top – 03:17:03 up 1 min,  3 users,  load average: 0.25, 0.11, 0.04

Tasks: 108 total,  1 running, 107 sleeping,  0 stopped,  0 zombie

Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  3924700k total,  199948k used,  3724752k free,    9448k buffers

Swap:  4063224k total,        0k used,  4063224k free,    55316k cached

3. 运行如下命令填满 Cache, 并观察 Cache 数量.

cd /etc

for I in *

do

cat $I

done

——————————————————————————–

top – 03:19:09 up 3 min,  3 users,  load average: 0.09, 0.08, 0.03

Tasks: 108 total,  1 running, 107 sleeping,  0 stopped,  0 zombie

Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  3924700k total,  212968k used,  3711732k free,    10556k buffers

Swap:  4063224k total,        0k used,  4063224k free,    65124k cached

4. 运行如下命令填满 Buffer, 并观察 Buffer 数量.

ls -Rl / > /dev/null &

——————————————————————————–

top – 03:22:07 up 6 min,  3 users,  load average: 0.44, 0.22, 0.08

Tasks: 108 total,  1 running, 107 sleeping,  0 stopped,  0 zombie

Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  3924700k total,  329528k used,  3595172k free,    39116k buffers

Swap:  4063224k total,        0k used,  4063224k free,    65176k cached

5. 通过如下命令清除服务器 Buffer 和 Cache.

echo 3 > /proc/sys/vm/drop_caches

用 top 监控进程

PID进程 ID.
USER启动这个进程的用户.
PR进程的优先级.
NI已启动进程的 nice 值.
VIRT进程首次启动时要求的内存大小.
RES常驻内存, 表示进程运行实际需要的内存, 实际内存可能比 virt 内存要小.
SHR当前进程与其他进程共享的内存.
S进程状态.
%CPU当前进程使用的 CPU 时间百分比.
%MEM当前进程使用的内存百分比.
TIME+当前进程使用 CPU 周期的总时间.
COMMAND进程命令.

解释服务器发生了什么——top 工具

在检查服务器的详细工作性能状态前,系统管理员需要对当前服务器状态有总体的了解. top 是检查服务器总体状态的强有力工具, 通过 top 可以获取 CPU, Memory, Process 运行信息, 如下是运行 top 命令后的数据显示:

top – 20:08:09 up 10 min,  1 user,  load average: 0.00, 0.02, 0.01
Tasks: 104 total,  1 running, 103 sleeping,  0 stopped,  0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  3924700k total,  260016k used,  3664684k free,    13552k buffers
Swap:  4063224k total,        0k used,  4063224k free,    75816k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
6284 root      20  0 15028 1308 1000 R  0.3  0.0  0:00.03 top
1 root      20  0 19356 1580 1268 S  0.0  0.0  0:01.80 init
2 root      20  0    0    0    0 S  0.0  0.0  0:00.00 kthreadd
3 root      RT  0    0    0    0 S  0.0  0.0  0:00.02 migration/0
4 root      20  0    0    0    0 S  0.0  0.0  0:00.00 ksoftirqd/0
5 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 migration/0
6 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 watchdog/0
7 root      RT  0    0    0    0 S  0.0  0.0  0:00.03 migration/1
8 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 migration/1
9 root      20  0    0    0    0 S  0.0  0.0  0:00.00 ksoftirqd/1
10 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 watchdog/1

用 top 监控 CPU 性能

在用 top 分析服务器性能时,首先注意的是 load average, load average 包括三个信息, 分别指最后一分钟, 最后 5 分钟, 最后 15 分钟系统平均性能, 该数值的锚固值 (anchor value) 是 1.0. 对于一个单核 CPU, 当锚固值达到 1.0 时, 系统会处于忙碌状态, 但应用也可以正常运行, 没有任何应用排队等待 CPU.

需要注意的是 load average 是系统的平均性能而不是 CPU 的, 有可能 load average 远高于 1.0, 但是 CPU 没有做任何工作, 如系统忙于等待 I /O.

使系统总是工作在 anchor value 为 1.0 也许很好, 但也许没有必要, 因此在判断系统工作在 anchor value 为 1.0 时是好是坏之前, 需要系统管理员更加深入的了解特定工作量. 比如对于如下两个任务:

Task 1: while true; do true; done

Task 2: dd if=/dev/sda of=/dev/null

当执行 Task 1 时, Task 1 会使 CPU 的一个核使用率达到 100%, anchor value 值也会超过 1.0, 如果系统 CPU 只有一个核, 那么系统会处于完全忙碌状态, 这时新的进程不会再开始, 会被放入队列中排队, 直到有空闲的 CPU 资源.

当执行 Task 2 时, Task 2 也会使 anchor value 大于或等于 1.0, 但是这时该任务只是在等待 I / O 资源, CPU 任然可以继续给其他进程使用.

如果系统 CPU 非常忙碌, 你需要通过 top 命令的 CPU 行深入的分析系统正在做什么, CPU 行提供如下 CPU 性能信息:

usus 表示 user space 负载, 通常运行在 user space 下的应用程序由终端用户启动, 不以 root 权限运行, 如果 us 负载高, 这意味着应用程序消耗 CPU 高.
sysy 表示 system space 负载, 通常运行在 system space 下的进程由操作系统内核调用, 正常情况下 sy 不会很高.
nini 表示已经启动的用 nice 命令调整的任务数.
idid 表示 CPU 空闲的时间.
wawa 表示 CPU 正在等待 I /O, 如果 wa 连续大于 30, 这表示 关联 storage 和 network 的I/O channel 有问题,需要检查 network 和 storage 的性能问题.
hihi 表示 CPU 用在处理硬件终端的时间.
sisi 跟软件中断有关, 通常是些由内核创建的低优先级软件终端, 几乎很少会遇到 si 使用率很高.
stst 跟一个被虚拟化使用的环境有关, 在某些虚拟化环境中, 虚拟机会宿主操作系统偷取 CPU 时间, 如果这种情况发生, st 会有使用率, 若使用率很高, 需考虑从服务器卸载虚拟机.

用 top 监控内存性能

top 命令的 Mem 行跟内存和交换分区有关, Mem 行包括五个参数:

total服务器总的物理内存.
used当前使用的总得内存, 包括 buffers 和 cache.
free当前没有使用的内存.
buffersbuffer 跟服务器使用的 write cache 有关, 也包括文件系统表和一些服务器需要放在内存的结构. 所有需要写到磁盘的数据首先写到 write cache, 从终端用户的角度来看, 用户使用的应用程序不需要等待数据写入. 如果系统需要更多的内存, 而不能从 free 的内存分配时, write cache 能被刷新, 然后将 write cache 使用的内存给其他应用程序使用. 总之, buffer 使系统变得更快.
cached当用户从服务器请求文件时,通常文件需要从磁盘读取, 由于磁盘比内存大约慢 1000 倍, 因此每次从磁盘获取文件后都放到 cache 来加速下次读取该文件. 如果分配给 cahce 的内存需要给其他应用程序使用, cache 可以被立即释放加入到 free 内存中以便使用. 对于那些读次数多的服务器,cache 内存通常很高,如果 cache 内存低于总内存的 40%, 那么服务器性能可能很慢, 这时需增加内存.
swapswap space 是在硬盘上模拟内存, 如果系统开始使用 swap, 这可不好, 因为 swap 比内存大约慢 1000 倍. 但 swap 并不是总是不好, 如内核使用它把不需要的数据从内存移除, 以便释放更多内存空间.

 

推荐阅读:

Linux 流量监控工具 – iftop http://www.linuxidc.com/Linux/2013-08/89102.htm

Linux top 命令详解 http://www.linuxidc.com/Linux/2013-06/85626.htm

Linux 下 top 命令 http://www.linuxidc.com/Linux/2013-04/83151.htm

Linux 下高效的使用 top 命令 http://www.linuxidc.com/Linux/2013-04/82676.htm

Linux 系统 top 命令详解 http://www.linuxidc.com/Linux/2012-12/76750.htm

Linux 系统监控负载 top 命令详解 http://www.linuxidc.com/Linux/2012-10/72756.htm 

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计7565字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中