Linux服务器常见的运维监控命令

uptime:

uptime命令,显示系统运行时间长度,依次显示如下信息:系统当前时间,系统已运行时长,目前有多少登陆用户,系统过去1min、5min、15min的平均负载。

一个典型的uptime命令输出如下:

这是一个典型的线上linux服务器的uptime输出,对监控来说,前面几个看看就好,这个命令最主要就是看最后面三个:最近1分钟、5分钟、15分钟内的平均Load。

Load是神马?Load就是系统负载,可是我们看到的这三个都是活生生的数字,那么,这个负载是怎么计算的?好问题!

对linux系统来说,load计算的时间间隔是5s,这个是定义在linux内核里的固定常量。每隔五秒,系统就会采样cpu的状态数据,这个状态数据包括正在cpu中running的进程数和在等待队列中的进程数。所以,很多人会简单的说,Load基本就是cpu进程队列的长度,大家也基本可以这么记。

关于Load计算,可以看Linux Kernel中的这段代码

 869        count -= ticks;
 870        if (unlikely(count < 0)) {
 871                active_tasks = count_active_tasks();
 872                do {
 873                        CALC_LOAD(avenrun[0], EXP_1, active_tasks); 
 874                        CALC_LOAD(avenrun[1], EXP_5, active_tasks);
 875                        CALC_LOAD(avenrun[2], EXP_15, active_tasks);
 876                        count += LOAD_FREQ;
 877                } while (count < 0);
 878        }

那么,我们如何判断系统负载过高?目前比较通用的一个评估方法是load/cpu数量<=1是正常的,大于1就算load需要预警的。从上面load计算也能看出,如果这个值大于1,说明cpu进程队列有进程在排队了。一般来说,每个cpu的进程队列不超过3个进程,高了负载就比较大了。

cat /proc/cpuinfo:

查看cpu信息。一个典型输出如下:

几个条目解释:

  • processor:这一逻辑处理器的唯一标示符
  • physical id:每个物理封装的唯一标示符
  • core id:每个内核的唯一标示符
  • sibling:每个内核的唯一标示符
  • cpu cores:位于相同物理封装中的内核数量
  • vendor_id:处理器厂家,如英特尔是GenuineIntel

说明:如果cpu cores和sibling相同,则说明没使用超线程,如果sibling是cpu cores的2倍,说明支持2个超线程,etc。

vmstat:

vmstat是一个查看虚拟内存使用状况的命令。比较有用。用这条命令可以得到关于进程、内存、内存分页、IO、以及cpu活动等信息。

一个典型的输出如下:

解释下个中含义:

procs:进程

  • r:运行队列中的进程数量
  • b:等待IO中的进程数量

memory:内存

  • swpd:使用虚拟内存大小
  • free:可用内存大小
  • buff:用作缓冲的内存大小
  • cache:用作缓存的内存大小

swap:交换区

  • si:每秒从交换区到内存的大小
  • so:每秒写入交换区的内存大小

IO:

  • bi:每秒读取的块数
  • bo:每秒写入的块数

sysytem:

  • in:每秒中断数
  • cs:每秒上下文切换数

CPU:单位百分比

  • us:用户进程执行时间
  • sy:系统进程执行时间
  • id:空闲时间
  • wa:等待IO时间

几点说明:

1. 如果一个cpu被充分使用,cpu这几个比较均衡的百分比基本是:

  • 65%-70% us
  • 30%-35% sy
  • 0%-5% id
posted @ 2012-11-28 22:48  半夜乱弹琴  阅读(709)  评论(0编辑  收藏  举报