共计 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 性能信息:
us | us 表示 user space 负载, 通常运行在 user space 下的应用程序由终端用户启动, 不以 root 权限运行, 如果 us 负载高, 这意味着应用程序消耗 CPU 高. |
sy | sy 表示 system space 负载, 通常运行在 system space 下的进程由操作系统内核调用, 正常情况下 sy 不会很高. |
ni | ni 表示已经启动的用 nice 命令调整的任务数. |
id | id 表示 CPU 空闲的时间. |
wa | wa 表示 CPU 正在等待 I /O, 如果 wa 连续大于 30, 这表示 关联 storage 和 network 的I/O channel 有问题,需要检查 network 和 storage 的性能问题. |
hi | hi 表示 CPU 用在处理硬件终端的时间. |
si | si 跟软件中断有关, 通常是些由内核创建的低优先级软件终端, 几乎很少会遇到 si 使用率很高. |
st | st 跟一个被虚拟化使用的环境有关, 在某些虚拟化环境中, 虚拟机会宿主操作系统偷取 CPU 时间, 如果这种情况发生, st 会有使用率, 若使用率很高, 需考虑从服务器卸载虚拟机. |
用 top 监控内存性能
top 命令的 Mem 行跟内存和交换分区有关, Mem 行包括五个参数:
total | 服务器总的物理内存. |
used | 当前使用的总得内存, 包括 buffers 和 cache. |
free | 当前没有使用的内存. |
buffers | buffer 跟服务器使用的 write cache 有关, 也包括文件系统表和一些服务器需要放在内存的结构. 所有需要写到磁盘的数据首先写到 write cache, 从终端用户的角度来看, 用户使用的应用程序不需要等待数据写入. 如果系统需要更多的内存, 而不能从 free 的内存分配时, write cache 能被刷新, 然后将 write cache 使用的内存给其他应用程序使用. 总之, buffer 使系统变得更快. |
cached | 当用户从服务器请求文件时,通常文件需要从磁盘读取, 由于磁盘比内存大约慢 1000 倍, 因此每次从磁盘获取文件后都放到 cache 来加速下次读取该文件. 如果分配给 cahce 的内存需要给其他应用程序使用, cache 可以被立即释放加入到 free 内存中以便使用. 对于那些读次数多的服务器,cache 内存通常很高,如果 cache 内存低于总内存的 40%, 那么服务器性能可能很慢, 这时需增加内存. |
swap | swap 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 性能信息:
us | us 表示 user space 负载, 通常运行在 user space 下的应用程序由终端用户启动, 不以 root 权限运行, 如果 us 负载高, 这意味着应用程序消耗 CPU 高. |
sy | sy 表示 system space 负载, 通常运行在 system space 下的进程由操作系统内核调用, 正常情况下 sy 不会很高. |
ni | ni 表示已经启动的用 nice 命令调整的任务数. |
id | id 表示 CPU 空闲的时间. |
wa | wa 表示 CPU 正在等待 I /O, 如果 wa 连续大于 30, 这表示 关联 storage 和 network 的I/O channel 有问题,需要检查 network 和 storage 的性能问题. |
hi | hi 表示 CPU 用在处理硬件终端的时间. |
si | si 跟软件中断有关, 通常是些由内核创建的低优先级软件终端, 几乎很少会遇到 si 使用率很高. |
st | st 跟一个被虚拟化使用的环境有关, 在某些虚拟化环境中, 虚拟机会宿主操作系统偷取 CPU 时间, 如果这种情况发生, st 会有使用率, 若使用率很高, 需考虑从服务器卸载虚拟机. |
用 top 监控内存性能
top 命令的 Mem 行跟内存和交换分区有关, Mem 行包括五个参数:
total | 服务器总的物理内存. |
used | 当前使用的总得内存, 包括 buffers 和 cache. |
free | 当前没有使用的内存. |
buffers | buffer 跟服务器使用的 write cache 有关, 也包括文件系统表和一些服务器需要放在内存的结构. 所有需要写到磁盘的数据首先写到 write cache, 从终端用户的角度来看, 用户使用的应用程序不需要等待数据写入. 如果系统需要更多的内存, 而不能从 free 的内存分配时, write cache 能被刷新, 然后将 write cache 使用的内存给其他应用程序使用. 总之, buffer 使系统变得更快. |
cached | 当用户从服务器请求文件时,通常文件需要从磁盘读取, 由于磁盘比内存大约慢 1000 倍, 因此每次从磁盘获取文件后都放到 cache 来加速下次读取该文件. 如果分配给 cahce 的内存需要给其他应用程序使用, cache 可以被立即释放加入到 free 内存中以便使用. 对于那些读次数多的服务器,cache 内存通常很高,如果 cache 内存低于总内存的 40%, 那么服务器性能可能很慢, 这时需增加内存. |
swap | swap 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