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列出几次的意思
    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)
    uname查阅系统与核心相关信息

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

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

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

1.4 追踪网络或插槽文件 netstat

netstat的输出分为两大部分:

  • 上半部:与网络较相关的部分
  • 下半部分:与系统自己的进程相关性(非网络)
    工作模式:netstat -[atunlp]
    选项与参数:
  • -a 将目前系统上所有的联机、监听、Socket数据都列出来
  • -t 列出tcp网络封包的数据
  • -u 列出udp网络封包的数据
  • -n 不以进程的服务名称,以埠号(port number)来显示
  • -l 列出目前正在网络监听(listen)的服务
  • -p列出该网络服务的进程PID
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去看看我们的哪些进程有启动哪些网络的后门呢?


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

1.5 查看核心产生的讯息 dmesg

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

dmesg查看核心产生的讯息

1.6侦测系统资源变化 vmstat

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

服务器忙碌时使用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
    vmstat -d 观察系统磁盘

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

  • 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目录下的相关文件?猫毛深刻怀疑如此~以后,如果我们想要撰写一些监控系统资源的工具软件,这个目录下的文件没准就有帮助啦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容