Linux系统CPU内存使用率过高的问题排查
服务器出现由内存问题引发的故障,例如系统内部服务响应速度变慢、服务器登录不上、系统触发 OOM(Out Of Memory)等。通常情况下当实例内存使用率持续高于90%时,可判断为实例内存使用率过高。CPU/内存使用率过高的问题原因可能由硬件因素、系统进程、业务进程或者木马病毒等因素导致。
笔者以前写过一篇文章- Linux 下的 60 秒分析的检查清单 ,适用于 任何性能问题 的分析工作,这一篇文章是关于CPU/内存使用率的具体的排查思路总结。
执行 top 命令后按 M ,根据驻留内存大小进行排序,查看 “RES” 及 “SHR” 列是否有进程占用内存过高。按 P,以 CPU 占用率大小的顺序排列进程列表,查看是否有进程占用cpu过高。
如果有异常进程占用了大量 CPU 或内存资源,记录需要终止的进程 PID,输入k,再输入需要终止进程的 PID ,按 Enter。
另外说明一下,top 运行中可以通过 top 的内部命令对进程的显示方式进行控制,最常用的是M和P。
CPU 空闲但高负载情况,Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。执行ps -axjf命令,查看进程状态,并检查是否存在 D 状态进程。D 状态指不可中断的睡眠状态,该状态进程无法被杀死,也无法自行退出。若出现较多 D 状态进程,可通过恢复该进程依赖资源或重启系统进行解决。
Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。换页操作非常消耗 CPU 资源,导致该进程持续占用高 CPU 资源。
执行top命令,找到 kswapd0 进程。观察 kswapd0 进程状态,若持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,执行 vmstat ,free,ps 等指令,查询系统内进程的内存占用情况,重启系统或终止不需要且安全的进程。如果 si,so 的值也比较高,则表示系统存在频繁的换页操作,当前系统的物理内存已经不能满足您的需要。 si 表示每秒从交换区写入内存的大小(单位:kb/s) , so 每秒从内存写到交换区的大小。
执行cat/proc/meminfo |grep-i shmem命令查看共享内存。
buddy可以以页为单位获取连续的物理内存了,即4K为单位。slab负责需要频繁的获取/释放并不大的连续物理内存,比如几十字节。执行cat /proc/meminfo | grep -i SUnreclaim命令查看slab 内存。
标准的 4KB 大小的页面外,内存大页管理内存中的巨大的页面,处理较少的页面映射表,从而减少访问/维护它们的开销。执行cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize" 查看内存大页。
内存使用率计算:
(Total - available)100% / Total
(Total - Free - Buffers - Cached - SReclaimable + Shmem) 100% / Total
cat /proc/meminfo查看信息含义:
linux查看cpu使用率的方法:首先确保linux环境能够上网,并且配置好源;然后执行命令“apt-get install dstat”来进行软件的安装;最后执行命令“dstat -c”显示系统整体的cpu情况即可。
在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。而监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。那么如何查看cpu使用率?下面本篇文章就来给大家具体介绍一下,希望对大家有所帮助。视频教程推荐:linux教程
1、使用top命令
这个命令很常用,在终端中直接执行top命令,即可在第三行看到cpu的使用率。
注:969id,表示空闲CPU,即CPU未使用率,100%-969%=31%,即系统的cpu使用率为31%。
如果有多个CPU,希望查询每个CPU的使用率,可以在top命令的界面,按数字键1,即可看到其它CPU的使用率,如下图:
2、使用vmstat命令
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存 交换情况,IO读写情况。
相比top命令,通过vmstat可以看到整个机器的 CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。
句式:
1
vmstat -w-w
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。例:
说明:2表示每个两秒采集一次服务器状态,1表示只采集一次。
3、使用dstat命令
dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。
如果没有dstat命令,则需要进行下载安装。
首先我们需要确保linux环境能够上网,并且配置好源。在root账户登录下。执行命令apt-get install dstat 。进行软件的安装。
然后执行命令dstat -c。显示系统整体的cpu情况。
显示各个信息为CPU用户占用,系统占用,空闲,等待,中断,软件中断等信息。
linux内核由哪些部分组成?
一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。
1、内存管理内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。
Linux内存管理支持虚拟内存,而多余出的这部分内存就是通过磁盘申请得到的,平时系统只把当前运行的程序块保留在内存中,其他程序块则保留在磁盘中。在内存紧缺时,内存管理负责在磁盘和内存间交换程序块。
2、进程管理进程管理主要控制系统进程对CPU的访问。当需要某个进程运行时,由进程调度器根据基于优先级的调度算法启动新的进程。:Linux支持多任务运行,那么如何在一个单CPU上支持多任务呢?这个工作就是由进程调度管理来实现的。
在系统运行时,每个进程都会分得一定的时间片,然后进程调度器根据时间片的不同,选择每个进程依次运行,例如当某个进程的时间片用完后,调度器会选择一个新的进程继续运行。
由于切换的时间和频率都非常的快,由此用户感觉是多个程序在同时运行,而实际上,CPU在同一时间内只有一个进程在运行,这一切都是进程调度管理的结果。
3、进程间通信进程间通信主要用于控制不同进程之间在用户空间的同步、数据共享和交换。由于不用的用户进程拥有不同的进程空间,因此进程间的通信要借助于内核的中转来实现。
一般情况下,当一个进程等待硬件操作完成时,会被挂起。当硬件操作完成,进程被恢复执行,而协调这个过程的就是进程间的通信机制。
4、虚拟文件系统Linux内核中的虚拟文件系统用一个通用的文件模型表示了各种不同的文件系统,这个文件模型屏蔽了很多具体文件系统的差异,使Linux内核支持很多不同的文件系统。
这个文件系统可以分为逻辑文件系统和设备驱动程序:逻辑文件系统指Linux所支持的文件系统,例如ext2、ext3和fat等;设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
5、网络接口网络接口提供了对各种网络标准的实现和各种网络硬件的支持。网络接口一般分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。
网络设备驱动程序则主要负责与硬件设备进行通信,每一种可能的网络硬件设备都有相应的设备驱动程序。
扩展资料:
Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。
1981年IBM公司推出微型计算机IBMPC。
1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNUC编译器已经出现,GNU的操作系统核心HURD一直处于实验阶段,没有任何可用性,实质上也没能开发出完整的GNU操作系统,但是GNU奠定了Linux用户基础和开发环境。
1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。1991年4月,林纳斯·托瓦兹开始酝酿并着手编制自己的操作系统。
1991年4月13日在composminix上发布说自己已经成功地将bash移植到了minix上,而且已经爱不释手、不能离开这个shell软件了。
1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux099的代码大约有十万行,用户大约有10万左右。
1994年3月,Linux10发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。
1995年1月,BobYoung创办了RedHat(小红帽),以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHatLinux,称为Linux"发行版",在市场上出售。这在经营模式上是一种创举。
2001年1月,Linux24发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等功能。
2003年12月,Linux26版内核发布,相对于24版内核26在对系统的支持都有很大的变化。
2004年的第1月,SuSE嫁到了Novell,SCO继续顶着骂名四处强行“化缘”,Asianux,MandrakeSoft也在五年中首次宣布季度赢利。3月,SGI宣布成功实现了Linux操作系统支持256个Itanium2处理器。
Linux操作系统的体系结构一般分为4个层次?
Linux采用分层设计,它包括4个层次。每层只能与它相邻的层通信,层次间具有从上到下的依赖关系,靠上的层依赖于靠下的层,但靠下的层并不依赖于靠上的层。各层系统介绍如下。
用户应用程序层:
位于整个系统的最顶层,是Linux系统上运行的应用程序集合,常见的用户应用程序有字处理应用程序、多媒体处理应用程序、网络应用程序等。
操作系统服务:
位于用户应用程序与系统内核之间,主要是指那些为用户提供服务且执行操作系统部分功能的程序,为应用程序提供系统内核的调用接口。X窗口系统、Shell命令解释系统、内核编程接口等就属于操作系统服务子系统。这一部分也称为系统程序。
Linux内核:
靠近硬件的是内核,即Linux操作系统常驻内存部分。Linux内核是整个操作系统的核心,由它实现对硬件资源的抽象和访问调度。它为上层调用提供了一个统一的虚拟机器接口,在编写上层程序的时候不需要考虑计算机使用何种类型的物理硬件,也不需要考虑临界资源问题。每个上层进程执行时就像它是计算机上的唯一进程,独占了系统的所有内存和其他硬件资源。但实际上,系统可以同时运行多个进程,由Linux内核保证和进程对临界资源的安全使用。所有运行在内核之上的程序可分为系统程序和用户程序两大类,但他们统统运行在用户模式之下。内核之外的所有程序必须通过系统调用才能进入操作系统的内核。
硬件系统:
包含Linux所使用的所有物理设备,如CPU、内存、硬盘和网络设备等。
linux系统通过命令行查看cpu信息?
1、首先我们介绍lscpu命令,该条命令可以查看CPU和处理单元的信息。没有其他的功能。下面我们执行命令"lscpu",具体输出信息如下图所示。
2、然后我们介绍第2种方式,通过读取/proc/cpuinfo文件进行查看。输入命令"cat/proc/cpuinfo",然后回车,查看cpu整体信息。具体结果如下图所示。
3、当然我们也可以针对某些指标进行查看,比如想查看查看物理CPU个数,我们可以通过命令"cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l"。具体操作如下图所示。
4、假如我们想要查看每个物理CPU中core的个数(即核数),我们可以输入命令"cat/proc/cpuinfo|grep"cpucores"|uniq"进行查看,具体操作如下图所示。
5、假如我们想要查看逻辑CPU的个数,可以输入命令"cat/proc/cpuinfo|grep"processor"|wc-l"进行查看,具体操作如下图所示。
6、假如我们想要查看cpu的型号,可以输入命令"cat/proc/cpuinfo|grepname|cut-f2-d:|uniq-c"进行查看,具体操作如下图所示。
0条评论