查看Linux系统的平均负载
1、Linux系统的平均负载的概念
有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网站或系统变慢时第一时间查系统的负载,即CPU的平均负载。
2、查看平均负载
究竟应该如何查看平均负载呢?最简单的命令是uptime,如下所示:
|
目前的主流服务器都是双四核,有相当强悍的CPU,做一般的应用服务的话,Linux系统的负载这块倒不用我们担心。
还可以用w命令来查看,顺便可以查看一下系统当前有哪些用户,他们占用了哪些终端,如下所示:
|
另外,还有动态命令top,这个命令也可以反映系统负载情况。在下面的命令提示中,我们只关心加粗字体部分。
|
上面加粗字体显示的内容是什么意思呢?再通过uptime查看一下。
|
原来它所表示的是过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。
那么,如何衡量当前系统是否负载过高呢?可以从以下几点来考虑。
如果每个CPU(可以按CPU核心的数量计算)当前的活动进程数不大于3,则系统性能良好。
如果每个CPU当前的活动进程数不大于4,表示可以接受。
如果每个CPU当前的活动进程数大于5,则系统性能问题严重。
还可以结合vmstat命令来判断我们的系统是否过于繁忙,如果确定很繁忙的话,就要考虑是否更换服务器或增加CPU的个数了。总结如下:
如果r经常大于3或4,且id经常少于50,则表示CPU的负荷很重。
在上面例子中,我的服务器是PowerEdge 2850,CPU是双核双线程的,则0.09/2=0.045(即负载值/真实CPU个数),此系统的CPU负载基本可以忽略了。事实上,现在主流服务器的CPU都很强悍,如果不是应用虚拟化等特殊场景,基本上负载都很小。
按照前面的计算公式,我所配置Nagios报警的CPU负载阈值为CPU核心的数量(即CPU的物理个数×核数)。还是以我的服务器PowerEdge 2850为例,其CPU核心的数量为2×2=4,则设置报警值为4。这样设置是合理的,因为毕竟不是每个应用服务器的CPU都支持多核心,毕竟整个网站中还有些性能比较弱的服务器是用来做备份的。
1. CPU 占用情况:
1.1: 首先看Process运行时占用CPU的细节:
正如Linux Kernel中所介绍的,Process的状态有3种:
正在被CPU处理,可被CPU处理,blocked状态。
正在被CPU处理:顾名思义,就是process正在占用CPU。
可被CPU处理:即runnable状态,这就意味着它将同其他runnable状态的process等待CPU时间。由schedule程序选择调哪个runnable状态的process进CPU。(这些runnable状态的process的队列叫做作Run Queue)
blocked状态:process可能在等待一个I/O操作获取的数据,或者是一个系统调用的结果
runnable processes的数目和blocked processes的数目可以表现出CPU是否很忙。
另外,很多系统工具会显示一个值: load average。 它就是指running和runnable process的总和。
load average显示的三个数字的时间分别为1分钟,五分钟和十五分钟 的load average数量。
1.2:CPU的上下文切换:
Linux Kernel中有个schedule() 函数。它用来从runnable 队列中挑选出一个process进入CPU,并完成上下文切换(Context Switch)。
当系统做Context Switch时,CPU保存所有old process的context信息并获得new process的所有context信息.Context信息包括大量的linux追踪每个process信息,尤其是一些资源:那些process正在执行,被分配了哪些内存,它打开了那些文件,等等.切换Context会触发大量的信息移动,这是比较高的开销.如果可能的话尽量保持很小的 context switches.
kernel schedule() 触发context switches.为了保证每个process平等的共享CPU时间,kernel周期性中断running的process,看是否有需要作context switches. 如果需要,kernel调度器会开始另外的process而不是让当前的process继续执行,每次的周期性中断或者定时中断都可能触发context switch.每秒定时中断的次数因不同架构和不同的kernel版本而不同(Kernel中的HZ?,
Kernel中这个值通常设置为1000) .
$cat .config |grep CONFIG_HZ
可以看到这个值设置为多少。(通常为1000)。 也就是每秒钟1000次时钟中断。
用户态如何察看时钟中断,以前Sam使用:
#cat /proc/interrupts
认为其中中断0 就是时钟中断数。可以利用间隔10秒的差值算出每秒时钟中断数。但现在在多核上好像不适用了。
1.3:CPU状态信息:
us -- User CPU time
The time the CPU has spent running users' processes that are not niced.
非nice过的用户程序所占用的百分比。
sy -- System CPU time
The time the CPU has spent running the kernel and its processes.
kernel和系统调用所占用的百分比。
ni -- Nice CPU time
The time the CPU has spent running users' proccess that have been niced.
被nice过的用户程序所占百分比。
wa -- iowait
Amount of time the CPU has been waiting for I/O to complete.
等待IO操作时所占百分比。
hi -- Hardware IRQ
The amount of time the CPU has been servicing hardware interrupts.
处理硬件中断所用百分比。
si -- Software Interrupts
The amount of time the CPU has been servicing software interrupts.
处理软件中断所用百分比。
st -- Steal Time
The amount of CPU 'stolen' from this virtual machine by the hypervisor for other tasks (such as running another vir鈥?
tual machine).
NICE以及修改process优先级: 见附录1。
1.4:使用top查看CPU状况:
$top -d 1 -c
top有相当强大的功能。不光可以显示当前CPU各个状态下的时间。还可以分别显示多个CPU Core(按1)。以及某个process具体是运行在哪个core上。(按f,j)
如果发现CPU system部分占用太多,可以使用OProfile 工具查看。
如果iowait很高时,则需要具体检查IO部分,如硬盘和网卡等。
1.5: 使用vmstat查看CPU状况:
使用top查看cpu状态时,可以看到CPU在哪些状态下占用较多。以及哪些Process占用较多CPU。
而使用vmstat查看,在CPU实用方面,则有其它信息可看。
$vmstat 1 //每隔1s 输出一次结果
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
CPU项目下的:us sy id wa st与top下的相似。
procs下则有几项有新意:
r:in run queue
b:blocked for resources I/O, paging etc
如果r 的值持续较大,且连续超过CPU Core的数量,则表明CPU资源严重不足,有很多process在等待CPU, CPU计算能力已经成为瓶颈。
2. 查看其它IO负载:
当使用top或者vmstat发现CPU wa时间多时。 vmstat中发现b列一直比较大的话(超过CPU Core)。则表明IO性能不佳。
IO性能,可以具体查看存储设备和网络设备。
Partition察看类型:
很多时候,在察看U盘格式时,Sam 使用fdisk -l。 察看其U盘中partition list以及格式。但其实这个方法并不准确。因为fdisk拿到的值只是在 -t 时修改的值。
例如:我们创建了一个ext3 partition. 但没有使用-t 修改其值为82。则fdisk 还是会显示为 Win95 FAT32.
所以可以使用 blkid。
附录1:process优先级及其修改:
当使用top命令时。有2列显示与process的优先级别有关:
PR:Priority.
NI:nice.
PR数值越小,process的优先级约高。
PR(new) = PR(old) + NI
指定和修改porcess优先级,可以使用:nice和renice命令。
$sudo nice -n -10 top -d 1
则看到top的NI=-10
linux nice 命令详解
功能说明:设置优先权。
语 法:nice [-n <优先等级>][--help][--version][执行指令]
补充说明:nice指令可以改变程序执行的优先权等级。
参 数:-n<优先等级>或-<优先等级>或--adjustment=<优先等级> 设置欲执行的指令的优先权等级。等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
renice:
renice -10 -p 6200
将pid=6100的process NI 设置为-10
另外:使用top,也可以修改porcess的优先级。
#top -d 1
"r"-->输入进程PID-->输入nice值



0
喜欢
0
赠金笔
查看Linux系统的平均负载的更多相关文章
- 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
可使用 uptime.top.w 命令来查看. 以 uptime 命令为例: liuqian@ubuntu:~$ uptime 17:31:26 up 7:27, 2 users, load aver ...
- 1 理解Linux系统的“平均负载”
什么是平均负载 我们知道使用top或uptime可以用来了解系统的负载情况. uptime 2 02:34:03 up 2 days, 20:14, 1 user, load average: 0.6 ...
- 解析Linux系统的平均负载概念
一.什么是系统平均负载(Load average)? 在Linux系统中,uptime.w.top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为 ...
- Linux系统排查——CPU负载篇
本随笔介绍CPU负载的排查手段. 查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数, 可运行:运行态,占用CPU,或就绪态,等待CPU调度. ...
- Linux系统中到底应该怎么理解系统的平均负载
02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...
- 08: 查看Linux系统基本信息和硬盘CPU等
目录: 1.1 查看Linux系统基本信息 1.2 查看三秒内的平均CPU 1.3 查看内存使用情况 1.4 查看当前系统负载 1.1 查看Linux系统基本信息返回顶部 1.查看Linux系统uui ...
- uptime---系统总共运行时间和系统的平均负载
uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的 ...
- Day 22 进程管理2之系统的平均负载
1.管理进程状态 当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对进程发送关闭信号.当然除了kill.还有killall,pkill 1.使用kill ...
- Linux性能优化-平均负载
Linux性能优化-平均负载 目录 Linux性能优化-平均负载 平均负载的含义 平均负载为多少时合理 平均负载与 CPU 使用率 平均负载案例分析 场景一:CPU 密集型进程 场景二:I/O 密集型 ...
随机推荐
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
上一篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)中我们已经介绍了参数解析相关的东西,并且也提到了HandlerMethodArgume ...
- 【mybatis深度历险系列】mybatis中的输入映射和输出映射
在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...
- Eclipse的Debug调试技巧
作为开发人员,掌握开发环境下的调试技巧十分有必要.我们在编写java程序的过程中,经常会遇到各种莫名其妙的问题,为了检测程序是哪里出现问题,经常需要增加日志,看变量的值,这样调试很麻烦.假设我每天花费 ...
- 【Unity Shader】Unity Chan的卡通材质
写在前面 时隔两个月我终于来更新博客了,之前一直在学东西,做一些项目,感觉没什么可以分享的就一直没写.本来之前打算写云彩渲染或是Compute Shader的,觉得时间比较长所以打算先写个简单的. 今 ...
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.JDK 1.2的版本中就提供java.lang.ThreadLocal,使用这个工具类可以很简洁地编写出优美的多线程程序,Threa ...
- [csdn markdown]使用摘记二 快捷键及导入导出Markdown文件
csdn推出了新的编辑器markdown,对于习惯使用离线编辑的人员来说是个大的福利,比如上班的时候,不能联网,但是又有好些知识点需要记录,等到下班了呢,又想直接把这些排版格式良好的文件直接上传到cs ...
- [lua]luasocket.c:20:17: fatal error: lua.h: No such file or directory
安装luasocket的时候出现了如下的错误 问题 $ tar xzf luasocket-2.0.2.tar.gz $ cd luasocket-2.0.2 $ $ make cd src; mak ...
- [Python] 图像简单处理(PIL or Pillow)
前几天弄了下django的图片上传,上传之后还需要做些简单的处理,python中PIL模块就是专门用来做这个事情的. 于是照葫芦画瓢做了几个常用图片操作,在这里记录下,以便备用. 这里有个字体文件,大 ...
- Java并发框架——AQS之原子性如何保证?
在研究AQS框架时,会发现这个类很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要 ...
- Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52392430 前言:前一篇的mediaPlayer ...