Linux 之 进程管理 -- 系统资源的观察

2019-10-11  本文已影响0人  熊猫人和熊猫猫

学习 系统资源观察 的原因:

我们在使用linux操作系统的计算机来帮助我们完成一些工作任务时,或多或少会碰到一些计算机反应迟钝、甚至死机的情况。其中多数是由于内存不足等等,一系列系统资源问题引起。因此了解一些观察系统资源的linux指令,学会寻找当机原因,从而有的放矢得寻找解决问题的方法是有必要的~因此写这篇文章也是有必要的~

还记得在Linux 之 进程管理 -- 进程观察里学到的top吗?里面有非常详细的关于top的解释。相比较文章中一起学习的ps,猫毛更喜欢用top,因为它不仅能用来动态得观察进程,还可以观察系统资源。今天就从 1.系统资源观察指令2.特殊文件 /proc/* 两个方面展开系统资源的观察。

1.系统资源观察指令

1.1观察内存使用情况 free

工作模式: free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
选项与参数:

1.2 查阅系统与核心相关信息uname

工作模式:uname [-asrmpi]
选项与参数:

1.3 观察系统启动时间与工作负载 uptime

鸡肋~uptime这个指令很单纯,就是显示出,目前系统已经开机多久的时间,以及1,5,15分钟的平均负载,就是top画面的最上面一行

uptime观察系统启动时间与工作负载

1.4 追踪网络或插槽文件 netstat

netstat的输出分为两大部分:

netstat列出目前系统已经建立的网络联机与unix socket状态
1.4.1 网络联机情况部分

解释一下每一列的意义:

上面这张图里仅有一条联机的数据,他的意义是:透过TCP封包的联机,远程的172.16.220.234:48300联机到本地端的172.16.15.100:ssh,这条联机状态是建立(ESTABLISHED)的状态!

1.4.2 系统自己进程相关部分

除了网络上的联机之外,其实Linux系统上面的进程是可以接受不同进程发来的信息,那就是Linux上头的插槽档(socket file)。
socket file可以沟通两个进程之间的信息,因此进程可以取得对方传送过来的资料。由于有socket file,因此类似X Window这种需要透过网络连接的软件,目前新版的distributions就以socket来进行窗口接口的联机沟通了。

解释一下socket file的输出字段意义:

利用netstat去看看我们的哪些进程有启动哪些网络的后门呢?


netstat 查找目前系统上已在监听的网络联机及其PID

1.5 查看核心产生的讯息 dmesg

系统在开机的时候,核心会去侦测系统的硬件,所有核心侦测的讯息,不管是开机的时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记录到内存中的某个保护区段。
如果我想要查看“核心的侦测”过程中产生的信息?便可以使用dmesg命令,它就相当于一个“查看”指令,会将保护区段的信息读出来(为了查看方便,最好通过管线符号加上more 或者 less查看)

dmesg查看核心产生的讯息

1.6侦测系统资源变化 vmstat

vmstat可以侦测 [CPU/内存/磁盘输入输出状态]等等,可以帮你系统中哪个环节是最累人的。

服务器忙碌时使用vmstat查看

vmstat的常见选项与参数说明:

2. 学习特殊文件/proc/*

之前,我们通过对“进程”的学习了解到:所谓的进程,都是在内存当中运行的。实际上,内存当中的数据又都是写入/proc/*这个目录下的。因此,我们可以通过直接观察proc这个目录当中的文件,了解进程和系统资源。

下面了解一些特殊文件吧,看他们能够提供给我们哪些有用的信息。

2.1 了解/proc目录下的文件

建议在自己的lunix操作系统中,下达ll /proc这个指令查看/proc
👇下面是截鸟哥的图来看/proc目录的样子~

/proc目录的样子~
其中,鸟哥省略了很多PID的目录,因为目前主机上面的各个进程的PID都是以目录的型态存在于/proc当中。当你在自己的linux系统上查看/proc时,看到更多的应该是以PID号码命名的目录,每个PID目录中都有好多与该进程相关的工作文档

举例:我们开机所执行的第一支程序systemd他的PID为1,这个PID的所有相关信息都写入在/proc/1/*当中,我们可以直接观察它
同理:我想了解任何一个PID,都可以通过ll /proc/PID号码/*来查看

`ll /proc/1`
解释其中的两个文件 cmdline、environ

2.2 针对整个Linux系统相关的参数文件

文档名 文件内容
/proc/cmdline 加载kernel时所下达的相关指令与参数
/proc/cpuinfo 本机的CPU的相关信息,包括频率、类型与运算功能等
/proc/devices 这个文件记录了系统各个主要装置的主要装置代号,与mknod有关
/proc/filesystems 目前系统已经加载的文件系统
/proc/interrupts 目前系统上面的IRQ分配状态
/proc/ioports 目前系统上面各个装置所配置的I/O地址
/proc/kcore 内存大小
/proc/loadavg top 以及 uptime 上头的三个平均数值就记录在这
/proc/meminfo 使用 free列出的内存信息
/proc/mounts 系统已经挂载的数据,就是用mount这个指令呼叫出来的数据
/proc/swaps 系统挂载的内存就在这里,使用掉的partition就记录在这里啦
/proc/partitions 使用 fdisk -l会出现目前所有的partition吧?在这个文件当中也有记录
/proc/uptime 就是用uptime的时候,会出现的信息
/proc/version 核心的版本,就是uname -a显示的内容
/proc/bus/* 一些总线的装置,还有USB的装置也记录在这里

了解了/proc目录下的文件信息,是不是有种茅塞顿开、恍然大悟的感觉:我们刚刚学习的那些“查看系统资源的指令”如uptimefree等等,会不会都只是被系统包装好的快捷键,本质工作就是调取/proc目录下的相关文件?猫毛深刻怀疑如此~以后,如果我们想要撰写一些监控系统资源的工具软件,这个目录下的文件没准就有帮助啦~

上一篇 下一篇

猜你喜欢

热点阅读