Linux性能优化和监控系列(一)

解释服务器发生了什么——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监控内存性能

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/07badd147d45a15ff7eb0fdf700c1abf.html