linux系统是计算机的操作系统之一,在工作或者面试中 ,不免要经常接触到linux系统,本次小记以linux系统的负载为核心,重点总结一些linux的命令。
什么是linux负载
首先让我们在linux系统中,使用这个命令:
top
然后我们就可以看到这样的一个界面如图1
图1. top命令查看系统负载
这个命令如果类比windows系统,它的作用就是打开任务管理器查下当前的进程有哪些以及一些重要的信息,从这张图,我们需要知道以下一些关键字代表的信息:
第一行的信息从左到右分别是:
17:08:57 代表了当前时间
up 13 days,3:07 代表了当前系统运行了多久,这个图里是13天3小时07分
4 users 代表了系统目前有几个用户
load average 0.49 ,0.49, 0.45 这是一个很关键的信息 ,代表系统在过去 1 分钟内,5 分钟内,15 分钟内的平均负载,通过这个负载,我们可以大致 了解到目前服务器的压力。
小结:以上是第一行的信息,如果你想看到这一行信息,那么也可以使用这个命令:uptime
可以获得如图2所示的效果
图2. uptime命令
接下来看第二行信息:
Tasks: 101 total : 目前总共有 101个进程
1 running : 1 个进程正在占用 CPU
100 sleeping : 100 个睡眠进程
0 stopped : 0 个停止的进程
0 zombie : 0 个僵尸进程
这行信息也是十分关键的,因为我这个服务器是阿里云的单cpu服务器,所以进程也只能有一个在跑,其它的进程如果学过线程相关的知识应该都能明白,这里我需要讲以下linux 中僵尸进程的概念:一句通俗的话,僵尸进程就是半死不活的进程。它是一个早已经死亡的进程,但是在进程列表中还是占一个容量的位置。我们知道进程表的容量不是无线的,所以如果僵尸进程越多肯定会影响到内存。那么僵尸进程是怎么产生的呢?就是Linux系统在exit进程后,进程不会立马消失,而是留下一个僵尸进程,但是进程中的代码什么已经统统没有了。Linux系统之所以存在僵尸系统也是因为就像犯罪的人总会留下一点痕迹,程序员可以通过僵尸系统查到自己想要的系统。
最后,如何杀死僵尸系统,这个很简单,找到该defunct僵尸进程的父进程,将该进程的父进程杀掉,则此defunct进程将自动消失。或者,我们重启系统。
第三行是CPU的使用率,我们可以获得以下信息:
us (user): 非 nice 用户进程占用 CPU 的比率
sy (system): 内核、内核进程占用 CPU 的比率
ni (nice): 用户进程空间内改变过优先级的进程占用 CPU 比率
id (idle): CPU 空闲比率,如果系统缓慢而这个值很高,说明系统慢的原因不是 CPU 负载高
wa (iowait): CPU 等待执行 I/O 操作的时间比率,该指标可以用来排查磁盘 I/O 的问题,通常结合 wa 和 id 判断
hi (Hardware IRQ): CPU 处理硬件中断所占时间的比率
si (Software Interrupts): CPU 处理软件中断所占时间的比率
st (steal): 流逝的时间,虚拟机中的其他任务所占 CPU 时间的比率
在这些信息中,我们可以排查一些IO流相关的问题。
接下来,我们需要重点查看如图3所示的信息
图3.进程信息
从蓝框中,我们需要重点知道:
PID 进程的ID
USER 使用这个进程的用户
PR 该进程的优先级
NI nice值,如果为负,说明优先级比较高,为正相反
VIRT 该进程占用的虚拟内存
RES 改进程占用的物理内存
SHR 改进程占用的共享内存
S: 进程的状态(S:sleep R:run Z:zombie T :stop)
%CPU 占用的处理器时间
%MEM 占用的内存空间
TIME+ 这个程序已经运行多长时间
COMMAND 这个程序叫什么名字
以上的所有信息都是我们需要重点关注的,在这里面,我需要说一下虚拟内存的概念,我们都知道软件的大小理论上是可以无限的,那么当整个程序在运行时,如果超出我们的内存大小,软件难度就会停止或者崩溃吗?明显不会(对比各类大型游戏),这时候虚拟内存就十分有用了,在系统中,每个进程在运行时会被分配4G的虚拟内存,而这个虚拟内存映射到真实内存只会占用一点点空间,虚拟内存实际上有一部分就在磁盘中,按照我们的需要进行数据交换。
其它相关命令
那么还以一些命令也是和Linux的系统相关,我会列出来并且截图。
free命令 查看当前内存的使用量
图4.free命令
这个当前内存的使用量,最后的available 等于free+buffer(缓冲)+cache(缓存)
那么buffer和cache有什么区别吗?
首先这两个都是缓存区,buff用于储存速度不同步或者优先级不同的设备之间传输数据,比如磁盘和内存。Cache是高速缓存,是位于cpu和主内存之间的小容量储存器。
mpstat 命令查看cpu核状态
这个可以清楚的看到cpu的核心数据比如单核,使用率等
图5.mpstat命令
ifstat 命令查看网卡网络状态
图6. ifstat命令
df 命令查看磁盘的使用率
图7. df命令
总结
作为程序员,我们是需要时刻关系系统的状态,并且我们不能通过一条命令就能确定电脑目前的状况,应该结合以上多条命令,定量和定性结合从而确定电脑是否“健康”,从而采取相对于的措施。