本文转载自:http://zuo.ai.xiao.blog.163.com/blog/static/607915532011867432394/
感谢原作者。
可能大家都会注意到,当在Linux系统中执行uptime、w和top三个命令时。在第一行的结果结尾都会有load average,并且后面会跟着三个数字,这就是今天我们要说的系统平均负载。
系统平均负载的定义:在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件,则其就会位于运行队列中:
1. 没有在等待I/O 操作的结果
2. 没有主动进入等待状态(也就是没有调用'wait')
3. 没有被停止(例如:等待终止)
top
1、获取cpu占用情况$ top -n 1 |grep Cpu
Cpu(s): 1.4%us, 0.3%sy, 0.0%ni, 96.9%id, 1.5%wa, 0.0%hi, 0.0%si, 0.0%st
解释:1.4%us是用户占用cpu情况 0.3%sy是系统占用cpu情况
2、获得内存占用情况
$ top -n 1 |grep Mem
Mem: 8167984k total, 7503820k used, 664164k free, 254480k buffers
uptime
linux系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息。uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
uptime命令用法十分简单:直接输入uptime即可
$ uptime
10:26:30 up 3 days, 20:59, 2 users, load average: 0.27, 0.19, 0.21
显示内容说明:
10:26:30 //系统当前时间
up 3 days, 20:59 //主机已运行时间,时间越大,说明你的机器越稳定。
2 users //用户连接数,是总连接数而不是用户数
load average // 系统平均负载,统计最近1,5,15分钟的系统平均负载
那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
vmstat
通过STATSPACK收集服务器信息,主要通过收集VMSTAT的信息来展现服务器状况。VMSTAT工具是最常见的UNIX监控工具,可以展现给定时间间隔的服务器的状态值。一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。如:
$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 665016 254480 3405752 0 0 31 80 16 10 1 0 97 1
0 0 0 665132 254480 3405756 0 0 0 114 786 1410 3 1 94 3
2 0 0 665148 254480 3405756 0 0 0 34 564 1057 1 1 97 1
0 0 0 665188 254480 3405756 0 0 0 530 627 1147 1 0 96 2
0 0 0 664692 254480 3405756 0 0 0 6 680 1135 3 0 97 0
目前说来,对于服务器监控有用处的度量主要有:
r------运行队列
b------表示阻塞的进程的数量。
swpd-----代表虚拟内存使用的数量。
free -------代表空闲内存的数量。
buff--------代表作为缓冲区的内存的数量。
cache-------文件系统缓存使用的RAM数量。
si ------------从磁盘分页到内存的数量。
so----------从内存分页到磁盘的数量。
bi----------代表从硬盘读出的块数量。
bo---------代表写入硬盘的块数量。
us---------代表用户的进程所占的cpu百分比。
sy---------代表系统进程所占的cpu的百分比。
id----------系统空闲的cpu所占的百分比。
(如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。)
(如果bi,bo 长期不等于0,表示内存不足)
通过VMSTAT识别CPU瓶颈
r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了
获得CPU个数的命令(LINUX环境):
cat /proc/cpuinfo|grep processor|wc -l
当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
1. 最简单的就是增加CPU个数
2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3. 调整已有任务的优先级
通过VMSTAT识别CPU满负荷
首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
free
通过VMSTAT识别RAM瓶颈数据库服务器都只有有限的RAM,出现内存争用现象是Oracle的常见问题。
首先察看RAM的数量,命令如下(LINUX环境):
$ free
total used free shared buffers cached
Mem: 8167984 7502712 665272 0 254480 3406208
-/+ buffers/cache: 3842024 4325960
Swap: 9459708 0 9459708
free命令默认以k为单位输出结果,为便于阅读,可以加上-m或-g参数分别表示以MB或GB显示容量数值。
当然可以使用top等其他命令来显示RAM。
当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会 出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。
解决的办法有几种:
1. 最简单的,加大RAM
2. 改小SGA,使得对RAM需求减少
3. 减少RAM的需求(如:减少PGA)
loadavg
利用/proc/loadavg监控CPU的平均负载文件内容如下:$ cat /proc/loadavg
0.23 0.29 0.25 1/423 31052
这里的平均负载也就是可运行的进程的平均数
前三个值分别对应系统在5分钟、10分钟、15分钟内的平均负载
第四个值的分子是正在运行的进程数,分母是进程总数,最后一个是最近运行的进程ID号
现在我们将平均负载的值写到虚拟终端的标题栏上。