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

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


在检查服务器的详细工做性能状态前,系统管理员须要对当前服务器状态有整体的了解. 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性能ide

在用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时是好是坏以前, 须要系统管理员更加深刻的了解特定工做量. 好比对于以下两个任务:spa

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并非老是很差, 如内核使用它把不须要的数据从内存移除, 以便释放更多内存空间.


监控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 进程命令.
相关文章
相关标签/搜索