linux 观察系统当前进程,Linux 之 进程管理 -- 系统资源的观察

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

我们在使用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]

选项与参数:

-b 直接输入free时,显示的单位是Kbytes,我们可以使用b(bytes),m(Mbytes),k(Kbytes),g(Gbytes)来显示单位。也可以直接让系统自己指定单位(-h)

-t 在输出的最终结果,显示物理内存与swap的总量

-s 可以让系统每几秒钟输出一次,不间断一直输出

-c 与-s同时处理,让free列出几次的意思

ffa318a60a12

free显示系统的内存容量

这里解释一下我们看到的内容:

因为使用的命令是free -m(Mbytes来显示),所以我的系统当中有2848MB左右的物理内存,swap有1GB左右。

横向来看

Mem行:显示物理内存的量

Swap行:显示内存置换空间的量

纵向来看

total 是总量

used 是已被使用的量

free 是剩余可用的量

后面的 shared/buffers/cached则是在已被使用的量当中,用来作为缓冲及快取的量,而这些用量中,在系统比较忙碌时可以被释放出来继续利用,因此后面有avaliable

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

工作模式:uname [-asrmpi]

选项与参数:

-a 所有系统相关的信息,包括底下的数据都会被列出来

-s 系统核心名称

-r 核心的版本

-m 本系统的硬件名称,例如i686或x86_64等

-p CPU的类型,与-m类似,只是显示CPU的类型

-i 硬件的平台(ix86)

ffa318a60a12

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

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

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

ffa318a60a12

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

1.4 追踪网络或插槽文件 netstat

netstat的输出分为两大部分:

上半部:与网络较相关的部分

下半部分:与系统自己的进程相关性(非网络)

工作模式:netstat -[atunlp]

选项与参数:

-a 将目前系统上所有的联机、监听、Socket数据都列出来

-t 列出tcp网络封包的数据

-u 列出udp网络封包的数据

-n 不以进程的服务名称,以埠号(port number)来显示

-l 列出目前正在网络监听(listen)的服务

-p列出该网络服务的进程PID

ffa318a60a12

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

1.4.1 网络联机情况部分

解释一下每一列的意义:

Proto:网络的封包协议,主要分为TCP与UDP封包

Recv-Q:非由用户程序链接到此socket的复制的总bytes数

Send-Q:非由远程主机传送过来的acknowledged总bytes数

Local Address:本地端的IP:port情况

Foreign Address:远程主机的IP:prot情况

State:联机状态,主要由建立(ESTABLISED)及监听(LISTEN)

上面这张图里仅有一条联机的数据,他的意义是:透过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的输出字段意义:

Proto:一般就是unix

RefCnt:连接到此socket 的进程数量

Flags:联机的旗标

Type:socket 存取的类型。主要有确认联机的STREAM与DGRAM两种

State:若为CONNECTED表示多个进程之间已经联机建立

Path:连接到此socket的相关程序的路径,或者是相关数据输出的路径

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

ffa318a60a12

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

1.5 查看核心产生的讯息 dmesg

系统在开机的时候,核心会去侦测系统的硬件,所有核心侦测的讯息,不管是开机的时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记录到内存中的某个保护区段。

如果我想要查看“核心的侦测”过程中产生的信息?便可以使用dmesg命令,它就相当于一个“查看”指令,会将保护区段的信息读出来(为了查看方便,最好通过管线符号加上more 或者 less查看)

ffa318a60a12

dmesg查看核心产生的讯息

1.6侦测系统资源变化 vmstat

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

ffa318a60a12

服务器忙碌时使用vmstat查看

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

-a 使用 inactive/active(活跃与否)取代 buffer/cache 的内存输出信息;

-f 开机到目前为止,系统复制(fork)的进程数

-s 将一些事件(开机至目前为止)导致的内存变化情况列表说明

-S 后面可以接单位,让显示的数据有单位。例如K/M取代bytes的容量

-d 列出磁盘的读写总量统计表

-p 后面列出分区槽,可显示该分区槽的读写总量统计表

如果你想要实时得知道系统资源的运作状态,这个指令就不能不知道

进程字段(procs)的项目分别为

r:等待运作中的进程数量

b:不可被唤醒的进程数量

注意:这两个项目越多,代表系统越忙碌(因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)

内存字段(memory)项目分别为(和free相同)

swpd:虚拟内存被使用的容量

free:未被使用的内存容量

buff:用于缓冲存储器

cache:用于高速缓存

内存置换空间(swap)的项目分别为

si:由磁盘中将进程取出的量

so:由于内存不足而将没用到的进程写入磁盘的swap的容量

注意:如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间来回传来传去,系统效能会很差。

磁盘读写(io)的项目分别为

bi:由磁盘读入的区块数量

bo:写入到磁盘去的区块数量

注意:这部分的值越高,代表系统的I/O非常忙碌

系统(system)的项目分别为

in:每秒被中断的进程次数

cs:每秒钟进行的事件切换次数

注意:这两个数值越大,代表系统与接口设备的沟通非常频繁(这些接口设备当然包括磁盘、网络卡、时间钟等)

CPU 的项目分别为

us:非核心层的CPU使用状态

sy:核心层所使用的CPU状态

id:闲置的状态

wa:等待I/O所耗费的CPU状态

st:被虚拟机(virtual machine)所盗用的CPU使用状态

磁盘部分的观察 vmstat -d

ffa318a60a12

vmstat -d 观察系统磁盘

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

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

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

2.1 了解/proc目录下的文件

建议在自己的lunix操作系统中,下达ll /proc这个指令查看/proc

👇下面是截鸟哥的图来看/proc目录的样子~

ffa318a60a12

/proc目录的样子~

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

举例:我们开机所执行的第一支程序systemd他的PID为1,这个PID的所有相关信息都写入在/proc/1/*当中,我们可以直接观察它

同理:我想了解任何一个PID,都可以通过ll /proc/PID号码/*来查看

ffa318a60a12

`ll /proc/1`

解释其中的两个文件 cmdline、environ

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值