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