Linux简介(4)--计算机组成与进程及相关命令

计算机的基本组成

计算机组成五大部件

  • (1)运算器:也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻辑运算,移位,比较等。
  • (2)控制器:它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊的进行操作和处理。
  • (3)存储器:存储程序和各种数据。
  • (4)输入设备:把人所熟悉的信息,如图片、声音、文字,转化为计算机能够识别的信息存储起来。
  • (5)输出设备:把计算机能是识别的信息转换为人能识别的信息,进行呈现。一台计算机可以抽象成下图: CPU 中包含控制器和运算器, 内存就是存储器。I/O 设 备就是输入设备和输出设备,如:键盘、显示器、鼠标、硬盘、网卡。
    在这里插入图片描述

系统总线

  • (1)数据总线:用来在各个功能部件中间传输数据,是双向传输总线
  • (2) 地址总线 :用来指出数据总线上的源数据或目的数据在主存单元的地址或 io 设备的地 址。
  • (3) 控制总线 :由于各个连接在数据总线和地址总线的部件都是共享这两类总线的,那么在某一时刻由谁来使用,就是控制总线负责完成的。

指令

  • (1) 指令 : 是指示计算机执行某种操作的命令。一条指令通常由两部分构成:地址码 和操 作码。
  • (2) 程序 : 由一条一条的指令构成。
  • (3) 指令周期 :cpu 每取出并执行一条指令所需的全部时间称为指令周期。
  • (4) 指令系统 :计算机能够执行的全部指令的集合称为该计算机的指令系统。
  • (5) RISC :精简指令系统计算机。
  • (6) CISC :复杂指令系统计算机。
  • (7) 程序与指令:高级语言 汇编助记符 机器指令

进程

什么叫做进程呢?
进程其实就是运行起来的程序,比如你的QQ、微信、听歌软件、视频软件,在运行时都叫做进程。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
而线程 是操作系统能够进行运算调度的最小单位。它 被包含在进程之中,是进程中的实际运作单位。进程内部至少有一个线程。

PID

PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。
PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语。
PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统随机分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是你终止程序后再运行PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。
含义
只要运行一程序,系统会自动分配一个标识。
是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。

PCB

进程控制块,进程的属性信息。
在操作系统中会使用链表将PCB连接在一起,链表中有多少个节点,这个操作系统就有多少个进程,操作系统通过管理PCB来管理运行起来的进程。

进程信息

进程描述信息:

  • 进程标识符用于唯一的标识一个进程(pid,ppid)。

进程控制信息

  • 进程当前状态
  • 进程优先级
  • 程序开始地址
  • 各种计时信息
  • 通信信息

资源信息

  • 占用内存大小及管理数据结构指针
  • 交换区相关信息
  • I/O设备号、缓冲、设备相关
  • 文件系统相关指针

现场保护信息(cpu进行进程切换时)

  • 寄存器
  • PC
  • 程序状态字PSW
  • 栈指针

进程状态

操作系统中进程的三种状态:就绪、运行、阻塞
在这里插入图片描述

  • ready:标识线程已经被创建,正在等待系统调度分配CPU使用权
  • running:标识线程获得了CPU使用权,正在进行运算
  • waiting:表示线程等待(或者说挂起),让出CPU资源给其他线程使用
    这里为什么去除了new和terminated状态呢
    因为这两种状态实际上并不存在线程运行中,对于Java中的线程状态无论是Timed Waiting,Waiting还是Blocked,对应的都是操作系统线程的waiting状态。而Runnable状态则对应了操作系统中的ready和running状态。

进程管理命令

ps

只显示当前终端的进程
默认显示与当前终端有关的信息

  • -A:列出所有的进程
  • -e:等于“ -A ”
  • -a:显示现行终端机下的所有进程,包括其他用户的进程
  • -u:以用户为主的进程状态
  • -x:通常与a这个参数一起使用,可列出较完整信息
  • -w:显示加宽可以显示较多的咨询
  • -au:显示较详细的咨询
  • -aux:显示所有包含其他使用者的进程
  • -f:做一个更为完整的输出
  • -L:显示进程中的线程IDps
    ps -a 与 -A
    在这里插入图片描述
    打印指定用户的信息
    在这里插入图片描述
    显示所有进程信息,连带命令行
    在这里插入图片描述
    ps与grep组合。打印指定进程信息
    在这里插入图片描述
    最常用的命令:ps -aux
    在这里插入图片描述
    各个字段的意义如下:
  • USER表示哪个用户启动了进程
  • PID表示进程的ID
  • %CPU表示cpu的占用率,占用越高,进程越消耗资源
  • %MEM表示内存的使用率,占用越高,进程越消耗资源
  • VSZ表示如果一个程序完全驻留在内存中一共会需要多少内存(即该进程所占的虚拟机内存大小,单位kb)
  • RSS表示进程当前实际上占用了多少内存(该进程所占的物理内存,单位kb),注意这里不要跟VSZ混淆,VSZ的前提是进程完全驻留在内存中。
  • TTY表示tty终端,tty1 - tty7代表本地控制台终端,tty1 - tty6是本地的字符界面终端,tty7是图形终端。ps/0-256代表虚拟终端。
  • STAT表示当前进程的状态(S表示处于休眠状态,D表示不可中断状态,Z表示僵尸进程,X表示死掉的进程)
  • START表示启动这个命令的时间点
  • TIME表示进程执行起到现在总的CPU占用时间
  • COMMAND表示启动这个进程的命令
    ps -ef
    在这里插入图片描述
  • UID:说明该程序被谁拥有(用户ID)
  • PID:就是指该程序的ID(进程ID)
  • PPID:就是指该程序父级程序的ID(父进程号)
  • C:指CPU占用率
  • STIME:程序的启动时间
  • TTY:登陆终端
  • TIME:表示进程执行起到现在总的CPU占用时间
  • CMD:启动这个进程的命令

pstree

pstree命令以树状图显示进程间的关系(display a tree of processes)
在这里插入图片描述
pstree -p
在这里插入图片描述

pstree -p pid
在这里插入图片描述

sleep

睡眠n秒

&

让程序在后台运行
在这里插入图片描述
在这里插入图片描述

jobs

显示当前终端的任务
在这里插入图片描述

fg bg

  • fg %任务号 将后台运行的或挂起的进程挪到前台执行
  • bg %任务号 将 挂起的进程唤醒到后台执行
    在这里插入图片描述

kill

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pkill

结束一组同名进程
pkill [选项][信号]进程名
如 -t是按终端号剔除用户

在这里插入图片描述

killall

杀死所有进程,加信号和kill通用
killall [选项 ][信号]进程名

  • -i 交互式,询问是否要杀死某个进程
  • -I 忽略进程名的大小写

top

查看系统资源使用情况以及进程细信息
命令:top 参数

  • -d 秒数:指定top命令每隔几秒更新,默认为3秒
    在top命令的交互模式中可执行的命令:
  • ?或 h:显示交互模式的帮助
  • P:以CPU使用率排序,默认选项
  • M:以内存的使用率排序
  • N:以PID排序
  • q:退出top
    在这里插入图片描述
    前五行信息:
    第一行:任务队列信息,与uptime命令执行结果相同.
  • 12:42:50 : 系统当前时间
  • up 1:52 : 主机已运行时间
  • 1 user : 用户连接数(不是用户数)
  • load average : 0.05 , 0.03 ,0.00 : 系统负载,统计 最近1,5,15分钟的系统平均负载,三个值 相加 /3 *100% 判断结果与60%相比
    第二行:进程信息
  • Tasks : 212 total : 进程总数
  • 1 running : 正在 运行的进程数
  • 148 sleeping : 睡眠的进程数
  • 0 stopped : 停止的进程数
  • 0 zombie : 僵尸进程数
    第三行:cpu信息(当有多个cpu时,这些内容可能会超过两行)
  • 4.8 us :用户空间所占CPU百分比
  • 1.4 sy :内核空间所占用CPU百分比
  • 0.0 ni :用户进程空间内改变过优先级的进程占用CPU百分比
  • 93.9 id : 空闲CPU百分比
  • 0.0 wa :等待输入输出的CPU时间百分比
  • 0.0 hi :硬件CPU中断百分比
  • 0.0 si :软中断占用百分比
  • 0.0 st :虚拟机占用百分比
    第四行:内存信息
  • 1021164 total : 物理内存总量
  • 164048 free : 空闲的内存总量
  • 405772 used :已使用的内存总量
  • 451344 buff/cache : 用作内核缓存的内存量
    第五行:swap信息
  • 998396 total :交换分区总量
  • 986868 free :空闲交换区总量
  • 11528 used :已使用的交换分区总量
  • 440832 avail Mem :缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
    列信息
  • PID:进程ID,进程的唯一标识符
  • USER:进程所有者的实际用户名
  • PR:进程的调度优先级。这个字段的一些值是‘rt’,这意味着这些进程运行在实时态
  • NI:进程的nice值(优先级),越小的值意味着越高的优先级,负值代表高优先级,正值表示低优先级
  • VIRT:进程使用的虚拟内存,进程使用的虚拟内存总量,单位kb,VIRT = SWAP + RES
  • RES:驻留内存大小,驻留内存是任务使用的非交换物理内存大小,进程使用的、未被换出的物理内存大小,单位kb,RES = CODE + DATA
  • SHR:SHR是进程使用的共享内存,共享内存大小,单位kb
  • S:这是这个进程的状态,它有以下不同的值
    D:不可中断的睡眠态
    R:运行态
    S:睡眠态
    T:被跟踪或已停止
    Z:僵尸态
    • %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比
    • %MEM:进程使用的可用物理内存百分比
    • TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒
    • COMMAND:运行进程所使用的命令

pidstat -u

  • 在Debian/Ubuntu系统 中可以使用下面的命令来安装:apt-get install sysstat
  • CentOS/Fedora/RHEL版本的Linux中则使用下面的命令:yum install sysstat
    在这里插入图片描述
    各列信息:
  • PID:进程ID
  • %usr:进程在用户空间占用cpu的百分比
  • %system:进程在内核空间占用cpu的百分比
  • %guest:进程在虚拟机占用cpu的百分比
  • %CPU:进程占用cpu的百分比
  • CPU:处理进程的cpu编号
  • Command:当前进程对应的命令
    命令: pidstat [选项][时间间隔][次数]
    常用参数:
  • -u:默认的参数,显示各个进程的cpu使用统计
  • -r:显示各个进程的内存使用统计
  • -d:显示各个进程的IO使用情况
  • -p:指定进程号
  • -w:显示每个进程的上下文切换情况
  • -t:显示选择任务的线程的统计信息外的额外信息
  • -T { TASK | CHILD | ALL }
    这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
    注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
  • -V:版本号
  • -h:在一行上显示了所有活动,这样其他程序可以容易解析。
  • -I:在SMP环境,表示任务的CPU使用率/内核数量
  • -l:显示命令名和所有参数

故障诊断思路

这里我们自己写一个重复向文件中写入的死循环代码,进行测试。
在这里插入图片描述

在这里插入图片描述

步骤

  • 使用top命令找到CPU占比最高的
    在这里插入图片描述

  • 使用ps -ef 或jsp 进一步定位,得知是什么样的后台程序的问题
    在这里插入图片描述

  • 定位到具体线程或代码:ps -mp 进程 -o THREAD,tid,time。-m可以显示所有线程,-p显示pid进程使用CPU的时间。-o后面是用户自定义格式。
    在这里插入图片描述

  • 将需要的线程ID转化为16进制:printf ”%x\n“ 线程ID
    在这里插入图片描述

  • jstack 进程ID | grep tid(16进制) -A60
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值