一、认识进程
二、进程和程序的关系
三、进程相关操作
四、查看系统性能
一、认识进程
二、进程和程序的关系
程序
保存在硬盘、光盘等介质中的可执行代码和数据
是静态保存的代码
进程(有生命的,一个过程,死循环,长生不老)
在CPU及内存中运行的动态执行的程序代码
进程是程序运行的实例
同一个程序可能对应多个进程
注意点:
A.软件由程序和文档组成
B.Windows怎么查看进程,ctrl+alt+delete,如图:
C.进程是需要占用资源的,cpu资源,内存资源,io资源,网络资源。
子进程和父进程
INIT进程是系统中第一个进程,PID永远为1(相当于进程的祖宗,哈哈哈哈)
注意点:
A.查看当前运行的shell用命令ps
B.进程状态转换,如图:
a.首先要创建进程,双击已安装的程序就可以创建进程了。
b.一双击程序就会自动找内核,申请资源(如内存),内存中有一小部分是用来存放进程信息的,如进程名字,进程属于哪个用户,进程状态等,这一小部分空间叫做PCB(进程控制块),即PCB中记录了进程相关的信息。如果一个进程的PCB没有了,那么这个进程就结束了,没有了。
c.如果内核检查后,允许创建该进程,该进程进入就绪队列,在队列中排队等待内核分配CPU,(八核CPU同时只可以运行八个进程,处于就绪状态的进程除了不具备CPU资源。其他的资源都具备了),在就绪队列中,越靠前优先级越高。
d.内核给进程分配占用CPU的时间(此时间片单位为毫秒级别),运行该进程到达分配的时间就释放CPU,此时,CPU就有空闲了,内核就会为循环队列的进程分配CPU。
e.如果就绪状态的进程得到CPU资源,此进程就会进入执行状态。
f.如果进程在内核预分配的时间片内完成了该进程的工作,该进程就释放CPU资源,该进程终止。
g.如果进程在内核预分配的时间片内不能完后该进程的工作,时间一到,该进程也会释放CPU资源,重新进入就绪队列排队,等待下一次分配CPU资源。
h.如果进程在内核预分配的时间片内需要用到其他资源(例如需要读取硬盘的文件),该进程会释放CPU,进入阻塞队列排队,等待i/o完成进入就绪队列。
三、进程相关操作
ps命令
用途:查看静态的进程统计信息(某一个时间点的进程统计信息,按回车的那一刻时间点)
格式:ps aux
ps -elf(常用)
常用命令选项
ax:显示所有进程信息
u:使用以用户为主的格式输出进程信息
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
ps aux:
USER 进程的用户;
PID 进程的ID;进程号,每个进程都有一个唯一的进程号
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ 该进程使用的虚拟内存量(包括交换空间)(KB);
RSS 该进程占用的物理内存量(KB);
TTY 该进程在哪个终端上运行(登陆者的终端位置),若与终端无关,则显示 (?)。若为pts/0等,则表示由网络连接主机进程;
STAT 进程状态
START 该进程启动时间;
TIME 该进程实际使用CPU运行的时间;
COMMAND 命令的名称和参数;
ps -elf:
F 进程的flag, 4 代表使用者为 super user
S 进程状态
UID 进程的用户;
PID 进程的ID;
PPID 父进程的ID
C CPU利用率,以整数表示
PRI Priority的缩写
NI Nice的缩
PRI/NI 代表此进程被 CPU 所执行的优先顺序,数值越小代表该进程越快被 CPU 执行。
ADDR 指出该进程内存的地址,如果是 running的程序,一般就是 “-”
SZ 占用内存大小;
WCHAN 是否正在运作当中,若为 - 表示正在运作
STIME 进程的启动时间
TTY 该进程在哪个终端上运行(登陆者的终端位置)
TIME 该进程实际使用CPU运行的时间;
CMD 命令的名称和参数;
进程状态(只需要知道图中的那五个就可以,其他不用太关注):
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行,在可中断队列中;
S 处于休眠状态,静止状态;
T 停止或被追踪,暂停执行;
W 进入内存交换(从内核2.6开始无效);
X 死掉的进程;
Z 僵尸进程不存在但暂时无法消除;
W: 没有足够的记忆体分页可分配
WCHAN 正在等待的进程资源;
<: 高优先级进程
N: 低优先级进程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
- 位于后台的进程组;
top命令
用途:查看动态的进程排名信息(默认隔三秒刷新一次)
按P:按%CPU排序
按M:按%MEM排序
按空格:马上刷新
H:帮助
top -d 指定刷新间隔时间,单位为秒,例如top -d 1,隔一秒刷新一次
第一行:top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
当系统负载和CPU差不多时说明此时系统比较忙了,当系统负载比CPU大时,说明已经超负载了,在top界面按数字1可以查看有几个CPU,如图:
如图所示,此时有4个CPU,
这一行的信息用w和uptime 命令也能看到这些信息,如图:
第二行:Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数,如果休眠的进程数较多时,要考虑是不是进程太多了。
stopped 停止的进程数
zombie 僵尸进程数
第三行:Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0%st
0.3%us user用户空间占用CPU百分比 ,用户态
1.0% sy system内核空间占用CPU百分比 ,内核态
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比
注意点:
A.进程有时候运行在内核态,有时候运行在用户态, 运行在内核态的进程是内核程序,有些进程是可以自己完成的,有些进程是需要内核帮忙的,这就是内核态,硬盘的读写由内核态完成。
B.内核态和用户态也是有时间片的,只是时间片很短,人感觉不出来
Idel空闲
行 Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
行 Swap: 192772k total, 0k used, 192772k free, 123988k cached
Mem:
191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap:
192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
进程相关的操作
PID 进程id
USER 进程所有者的用户名
PR 优先级 (不能直接改,可以通过NI改优先级)
NI 负值表示高优先级,正值表示低优先级 (一般不去改)
VIRT 进程使用的虚拟内存总量,单位kb
RES 进程使用的、未被换出的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态
%CPU 使用的CPU百分比
%MEM 使用的物理内存百分比
TIME+ 使用的CPU时间总计,单位1/100秒
COMMAND 命令名
pstree命令
用途:以树型结构显示各进程间的关系
常用命令选项:
-p:列出进程的PID号
pgrep命令
用途:根据特定条件查询进程PID信息
常用命令选项:
-l:列出进程的名称
-u:根据进程所属的用户名进行查找
-t:根据进程所在的终端进行查找
这个命令有点像ps+grep命令
进程优先级设置:(一般不去设置进程优先级,知道即可)
Linux内核的基本任务是调度进程
每个进程受两个参数影响其调度
优先级(priority):内核控制动态变化
值越小越早被cpu执行
用户无法直接调整数值大小
niceness:表示进程可被执行的优先级的修正数值 ,可手工修改
与priority有关
优先级有正负之分(-20 -19)
加入nice值后 PRI(新) = PRI(老) + nice
root可以设置nice值范围(-20 - 19)
普通用户可以设置nice值范围(0- 19)
下面的这部分改nice,不重要,知道有就可以,一般用不到,用到help即可
用nice命令新的nice(新开启的进程)
以新的nice来启动命令
nice -10 vi & 设置nice值为10
nice --10 vi & 设置nice值为-10
用renice命令设置新nice(已经存在的进程)
renice 10 15132 设置nice值为10
renice -10 15132 设置nice值为-10
用top命令修改进程的优先级
先输入r,然后输入pid,最后输入优先级
作业(进程)控制:
手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号(要支持放在后台运行的才可以,不然处于停止状态)
jobs命令查看后台作业
+:最新放到后台的进程
- :仅次于最新放到后台的进程
fg命令
将处于后台的进程恢复到前台运行,需指定作业号
不指定作业号,将恢复有“+”标记的进程
Ctrl + Z组合键
将当前进程挂起,即调入后台并停止执行
bg命令
将后台停止的进程,在后台重新运行
bg+作业号
Kill命令
软中断信号,简称信号。是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。
kill -l列出Linux系统支持的信号种类
发送信号的原因
硬件异常
软件状态
终端中断
kill命令用来发送信号
kill -信号代码 PID
进程收到信号后采取的行动
终止
忽略信号
挂起
用户常用的信号
2-------中断信号
Sig信号
Interrupt中断
Terminate结束。终止
接收到信号不一定执行,可以忽略,15可以被屏蔽
kill命令取消后台作业
kill -9 PID
kill -9 %作业号
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程(一般不用)
pkill命令
用途:根据特定条件终止相应的进程
常用命令选项:
-u:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
系统性能监控 —— 查看内存使用情况
free命令(单位默认k字节)
显示系统的物理内存和交换空间的使用情况(物理内存不足时才用交换空间,交换空间是硬盘空间,交换空间为0 时非常好)
-m:以MB的形式显示内存信息
-g:以G的形式显示内存信息
-h:用易读单位显示出来
Cache:缓存从硬盘读取出来的数据(在cpu和内存之间)解决速度差问题
Buffer:缓存需要写入硬盘的数据(在内存和硬盘之间)
Cache和buffer用的都是内存空间
缓存越多CPU越贵
内存也算是缓存
top命令
内存监控
/proc/meminfo内存文件,在这个文件里要关注物理id,如图,下面的为四核,
Physical id*4 等于四核
CPU cores CPU核数
Physical id 那个CPU
查看物理CPU核数
查看物理CPU个数
/proc/cpuinfo CPU文件,可以算出来有多少CPU核
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync(8) first.
/proc是一个特殊文件系统,我们可以通过对它的读写操作,来作为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存
0是不清空缓存
CPU性能
uptime:运行时间,登录用户数,CPU平均负载
Iotop命令
查看
iostat命令
用于查看系统磁盘I/O统计信息(平时要关注,)
由软件包sysstat-7.0.0-3.el5.i386.rpm提供
sysstat还提供了 mpstat 命令,用于显示进程负载信息
Iostat -x 1每秒更新一次
mpstat命令
用于显示进程负载信息
sar命令
查看网络资源信息
Ifconfig命令
查看网络资源
例如:
Ifconfig eth0
RX:接收
TX:发送
ethtool命令
查看网口信息
例如;
ethtool eth0