linux管理进程

一、程序与五大性能

1.程序

程序:执行特定任务的一串代码,静态的存放在硬盘上

1.是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具

2.用于描述进程要完成的功能,是控制进程执行的指令集

2.五大性能

开启进程会消耗硬件资源(五大性能:内存使用率、硬盘容量、硬盘读写性能、cpu使用率、网络带宽),硬件资源消耗完了轻则卡顿重则死机,要时刻关注。

内核功用:进程管理,内存管理,文件系统,网络功能、驱动程序、安全功能等

五大性能命令
内存使用率free
硬盘使用率df
磁盘读写性能iostat
cpu使用情况top、ps、w、iostat、uptime
网络带宽iftop

1.查看内存使用率命令:free

1.free   ##查看内存使用总大小

2.free  -h   ##以GB显示大小

3.free  -m   ##以MB显示大小

4.free  -s   几秒   ##每隔几秒刷新一次(这里假设3秒刷新一次)

2.查看cpu使用率:ps、top、w

1.查看cpu占用情况:top

3.w  ##也能查看cpu的负载情况

3.硬盘容量、硬盘使用率

1.查看硬盘容量:dfv

2.查看硬盘容量带单位:df  -h

4.磁盘读写性能

1.查看每秒读多少写多少:iostat

5.网络带宽

1.系统版本:cat  /etc/redhat-release

2.查看ip地址、子网掩码、广播地址:ifconfig

二、进程和线程

1.进程

进程是运行中的程序,是有生命周期的,程序的执行实例,拥有独立的资源和状态

进程特征:

1.动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的

2.并发性:任何进程都可以同其他进程一起并发执行

3.独立性:进程是系统进行资源分配和调度的一个独立单位

4.结构性:进程由程序、数据和进程控制块三部分组成

2.线程

线程是进程中的执行路径,共享进程的资源和地址空间,多个线程可以并发执行,实现程序的并发处理。线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。

3.协程

协程(Coroutines):一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己写的程序,管理的轻量级线程叫做『用户空间线程』,具有对内核来说不可见的特性

4.进程与线程的区别

1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位

2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其他进程不可见

4.线程上下文切换比进程上下文切换要快得多

5.进程优先级

表示优先级有两个参数:PR(Priority)和NI(Nice)

我们可以使用top命令看到

这两个相加为最终优先级:PRI(最终值)=PRI+NI,最终值越小,优先级越高

6.进程使用内存的问题

1.内存泄漏:Memory Leak

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

2.内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出

3.内存不足:OOM

内存不足(out of meory):给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

当我们出现内存不足(OOM)时常使用的解决办法:

1,限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用

2,给系统增加swap空间

4.查看进程中的线程

这里的-p是显示进程pid号

命令格式:pstree -p

5.查看当前内存占用情况

命令格式:pmap  pid号

注:.so结尾的一般是功能模块

三、进程状态

1.进程的基本状态

1.创建状态:进程在创建时需要申请一个空白PCB(process control block)进程控制块,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

2.*就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

3.*执行状态:进程处于就绪状态被调度后,进程进入执行状态

4.阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足需求时进入就绪状态等待系统调用

5.终止状态:进程结束、出现错误或被系统终止,进入终止状态无法再执行

2.状态之间转换六种情况

1.运行---就绪:主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态

2.就绪---运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

3.运行---阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求

4.阻塞---就绪:进程所等待的事件已经发生,就进入就绪队列

5.阻塞---运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取

6.就绪---阻塞:就绪态根本就没有执行,谈不上进入阻塞态

1.进程更多的状态

1.运行态:running 

2.就绪态:ready

3.睡眠态:分为两种,可中断:interruptable不可中断:uninterruptable

4.停止态:stopped,暂停于内存,但不会被调度,除非手动启动

5.僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭。解决办法:杀死父进程可以关闭僵死态的子进程但不推荐这样做。结束父进程,父进程会回收子进程的硬件资源,子进程如果出现意外关闭,父进程无感知就不会收回资源,人为关闭父进程,资源不会回收产生僵尸进程,当一个子进程终止时,内核会将其相关信息保留在系统中,以供父进程查询。僵尸进程不会执行任何代码,也不会占用系统资源,但它们的进程表项和一些资源(比如PID等)仍然存在于系统中,这可能导致系统中存在大量僵尸进程,造成资源浪费

2.解决僵尸进程

1.先制造一个僵尸态

这里可以看到bash(5806)是父进程,bash(8969)是子进程

先停掉父进程再停掉子进程

然后另开一个xshell用ps aux |grep Z查看僵尸态(Z)

两种解决办法:

1.恢复父进程,可以看到恢复后就没有僵尸态了

2.(不推荐)杀掉父进程

四、进程分类

1.进程类型

1.守护进程:daemon,在系统引导过程中启动的进程,和终端无关

2.前台进程:通过终端启动的进程,跟终端相关

注:二者可以相互转化

前台执行:会影响当前的操作

后台执行:不会影响当前的操作

特性:

1.将前台程序放入后台执行,因为这样可以并行执行

命令  &将前台命令放入后台执行
命令 ctrl+z将运行中的前台命令放入后台挂起
jobs后台任务列表,会显示序号
bg 序号继续运行后台的命令
fg  序号将后台程序调回前台

五、命令

1.ps:静态查看进程信息

ps命令是用于查看当前运行的进程信息的命令,它提供了有关正在运行的进程的详细信息,例如进程ID(PID)、父进程ID(PPID)、进程状态、CPU和内存使用情况等

选项功能
a显示当前终端下的所有进程信息,包括其他用户的进程
u使用以用户为主的格式输出进程信息
x显示当前用户在所有终端下的进程信息
-e显示系统内的所有进程信息
-l使用长格式显示进程信息
-f使用完整的格式显示进程信息
[选项]-- soft对属性排序,属性前加 - 表示降序排列

1.ps:静态查看进程信息

2.ps  aux:查看系统中的所有进程信息,常用选项

表头含义
USER该进程是由哪个用户产生的
PID进程的ID
%CPU

该进程占用CPU资源的百分比,占用的百分比越高,进程越耗费资源

%MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源
VSZ该进程占用虚拟内存的大小,单位为KB
RSS该进程占用实际物理内存的大小,单位为KB
TTY该进程是在哪个终端运行的
STAT

进程状态

START该进程的启动时间
TIME该进程占用CPU的运算时间,注意不是系统时间
COMMAND产生此进程的命令名

2.TTY

tty1~tty7代表本地控制台终端(可以通过AIt+F1~F7快捷键切换不同的终端)
tty1~tty6本地的字符界面终端
tty7图形终端
pts/0~255虚拟终端,是远程连接的终端,第一个远程连接占用pts/0,第二个远程连接?代表和终端无关,系统进程

3.STAT进程状态

进程状态含义
-D不可被唤醒的睡眠状态,通常用于I/0情况
-R进程正在运行
-S进程处于睡眠状态,可被唤醒
-T停止状态,可能是在后台暂停或进程处于除错状态
-W内存交互状态
-X死掉的进程,无法出现这种
-Z僵尸进程,进程已经终止,但是还会占用硬件资源
-<高优先级(以下状态在BSD格式中出现)
-N低优先级
-L被锁入内存
-s包含子进程
-l多线程(小写L)
-+位于后台

4.ps -lef:这里效果同上,加l是以长格式显示

pa  auxps  -ef
排序用户进程的启动时间
输出包含更多例如CPU使用率和内存使用量包含更多的进程状态相关的列,例如UID

5.查看进程的特定属性

ps  -o  pid,ppid,cmd,%cpu,%mem

6.仅显示父进程pid、cpu占用

ps -eo ppid,%cpu

7.进程排序--sort

1.ps a --sort=user:按照用户排序,以显示同一用户的进程在一起

2.ps a --sort=pid:按照进程ID排序

3.ps a --sort=cpu:按照CPU使用率

4.ps a --sort=mem:按照内存使用量

5.ps a --sort=time:按照进程运行时间

6.ps  aux  --sort=cpu | head -n  5:按cpu占用率降序排序所有进程,并显示前七行

7.ps aux  --sort=-pid:按pid降序排列

2.top:动态查看进程信息

top 命令可以动态地持续监听进程的运行状态top命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,从而更清楚进程的运行状态。

1.top:动态查看进程信息

第一行基础信息

18:48:19系统当前时间
up  1:40系统的运行时间
3 user当前登录了三个用户
load average:0.00,0.01,0.05系统在之前 1 分钟、5 分钟、15 分钟的平均负载

第二行进程信息

Tasks:159 total系统中的进程总数
1 running正在运行的进程数
158 sleeping睡眠的进程数
0 stopped正在停止的进程数
0 zombie僵尸进程数,如果不是0,则需要手工检查僵尸进程

第三行CPU信息

%cpu(s):0.0  us用户模式占用的CPU百分比,个人用户开启进程的cpu占用率
0.0  sy系统模式占用的 CPU 百分比
0.0  ni改变过优先级的用户进程占用的 CPU 百分比
100.0  id空闲 CPU 占用的 CPU 百分比
0.0  wa等待输入/输出的进程占用的 CPU 百分比 1
0.0  hi硬中断请求服务占用的 CPU 百分比
0.0  si软中断请求服务占用的 CPU 百分比
0.0  stst(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行物理内存信息

KiB  Mem:3865308 total物理内存的总量,单位为KB
3104152 free空闲大小
311300 used已经使用的物理内存数量
449856 buff/cache作为缓冲的内存数量

第五行交换分区swap信息

KiB Swap:4063228 total交换分区(虚拟内存)的总大小,单位为KB
4063228  free空闲交换分区的大小
3260408  avail Mem作为缓存的交换分区的大小

第六行系统进程信息

PID进程的ID
USER该进程所属的用户
PR优先级,数值越小优先级越高
NI优先级,数值越小优先级越高
VIRT该进程使用的虚拟内存的大小,单位为KB
RES该进程使用的物理内存的大小,单位为 KB
SHR共享内存大小,单位为 KB
S进程状态
%CPU该进程占用 CPU 的百分比
%MEM该进程占用内存的百分比
TIME+该进程共占用的 CPU 时间
COMMAND进程的命令名

2.top命令的选项

top -u username:显示特点用户的进程使用情况(这里拿root做演示)

top -p pid:显示特点PID的进程使用情况(这里拿1做演示)

top -H:显示进程的线程视图,并按照线程ID(LWP)排序

top -o:可以使用不同的排序字段,例如top -o %MEM 将使用内存使用率进行排序

top -n:设置top命令的显示次数或循环次数,例子:top  -n  6  将top命令的输出限制为6次

top -b:以批处理模式运行top命令,将结果输出到标准输出,适用于脚本和后续处理

top -d:设置刷新间隔,即更新数据的时间间隔,例子:top -d 9将每隔9秒刷新一次数据

3.top命令的交互界面

在top命令的交互界面中,可以使用不同的键来执行各种操作和切换不同的视图

k杀掉选中的进程
1切换到全局统计视图
m切换内存使用视图
t

切换进程排序模式,可以按不同的字段排序进程列表

3.pstree:以树状结构显示当前系统中运行的进程

pstree命令以树状结构显示当前系统中运行的进程,其中包括进程的父子关系和层级关系

命令格式:pstree  选项  PID或用户名

-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p显示PID
-T不显示线程thread,默认显示线程
-u显示用户切换
-Hpid高亮显示指定进程及其前辈进程

1.pstree:显示所有进程

2.pstree  11585   显示pid为11585的进程

3.pstree -p root:显示用户root的进程和pid

4.prtstat:根据PID查询程序名

1.prtstat 51936:查看PID为51936的进程

2.pgrep/pidof:根据程序名查PID,排列方式不同

5.vmstat:监控系统资源

用于报告虚拟内存统计信息,监视系统的内存、进程、交换等方面的性能,这些信息对于诊断系统性能问题非常有用

1.process进程信息

r:等待运行的进程数,数量越大系统越繁忙

b:不可被唤醒的进程数,数量越大系统越繁忙

2.memory内存信息

swpd:虚拟内存的使用情况,单位为KB

free:空闲的内存容量,单位为KB

buff:缓冲的内存容量,单位为KB

cache:缓存的内存容量,单位为KB

3.swap交换分区信息

si:从磁盘中交换到内存中数据的数量,单位为KB

so:从内存中交换到磁盘中数据的数量,单位为KB,这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差

4.io磁盘读/写信息

bi:从块设备中读入的数据的总理,单位为块

bo:写到块设备的数据总理,单位为快

注:io磁盘的两个数越大,代表系统的I/O越繁忙

5.system系统信息

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

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

注:这两个数字越大,代表系统与接口设备的通信越繁忙

6.cpu信息

-us:非内核进程消耗CPU运算时间的百分比

-sy:内核进程消耗CPU运算时间的百分比

-id:空闲CPU的百分比

-wa:等待I/O所消耗的CPU百分比

-st:被虚拟机所盗用的CPU百分比

六、结束进程

1.kill:根据进程的PID向进程发送信号以终止或操作进程

命令格式:kill  信号  PID

-1重新加载进程
-9强制结束进程
-19暂时停止进程
-18让进程从停止状态恢复

2.killall:根据进程名称终止匹配的所有进程

命令格式:killall  选项  信号  进程名

-u仅终止指定用户的进程
-l列出可用的信号列表
-i交互式,询问是否要杀死某个进程
-I(这里是大写i)忽略进程名的大小写

注:killall -i 信号  进程名:交互式终止进程,终止前会进行询问

七、计划任务的管理

1.crontab工具:定期执行命令或脚本的工具,可以按照指定的时间表安排命令的执行,无需手动操作

命令格式:crontab  选项  file文件夹

选项功能
-u用来设定某个用户的crontab服务,例如 “-u demo” 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e编辑某个用户的crontab文件内容,如果不指定用户则表示编辑当前用户的crontab文件
-l显示某用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容
-r从/var/spool/cron删除某用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件
-i在删除用户的crontab文件时,出现确认提示

查看/etc/crontab文件

这里前面必须要加上5个*,从左到右*依次释义如下:

第一个*:minute(0-59)分钟,从0到59的整数

第二个*:hour(0-23)小时,从0到23的整数

第三个*:day of mouth(1-31)一个月中的几号,从1到31的整数 (必须是指定月份的有效日期)

第四个*:mouth(1-12)or jan,fed,mar,apr......几月份,从1到12的整数 (或如Jan或Feb简写的月份)

第五个*:day of week(0-6)(sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat一周中的星期几,从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

注:*表示所有可用的值,比如*在指month时表示每月执行(需要符合其他限制条件)该命令,整数间的-表示整数列,比如1-4意思就是整数1,2,3,4,指定数值由逗号分开。如:3,4,6,8表示这四个指定整数,符号/指定步进设置。/表示步进值。如0-59/2定义每两分钟执行一次。/也可用星号表示。如*/3用来运行每三个月份运行指定任务,以#开头的为注释行,不会被执行。

user-name:用户名(注:root表示以root用户身份来运行,run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本

command:需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

to be executed:待执行

crontab  -u 设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab  -l列出某个用户的cron服务的详细内容
crontab  -r删除某个用户的cron服务
crontab  -e编辑某个用户的cron服务

1.crontab定时任务

1.6个选项都不能为空:* * * * * 命令。必须填写,如果不确定,则使用*,代表任意时间

2.crontab定时任务的最小有效时间是分钟,最大有效时间是月,像2018年某时执行,3点30分30秒这样的事件都不能被识别

3.在定义时间时,日期和星期最好不要在一条定时任务中出现,因为他们都以天为单位,非常容易让管理员混淆

4.在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径,有时使用相对路径会报错

2.例子:每个月的1号早上5点复制/bin/bash到/mnt下

2.at工具:一次性计划任务

单个命令的执行,安排命令“command”在上午9:30执行

在相对时间执行命令。安排命令“command”在当前时间过两个小时执行

从文件中执行命令

七、解决问题

1.中毒

2.确定单线程还是多线程

3.过滤僵尸进程

4.统计进程总数,用top命令可以直接看到,tasks可以直接看到,也可以用ps aux |wc  -l

统计某用户的进程总数:pgrep  -u   用户名 |wc  -l

5.根据pid号能找到进程的具体位置

6.删除大文件不释放空间

7.误删恢复

8.服务器运行了3天,3天之后非常卡,就是因为缓存问题

echo 3 > /proc/sys/vm/drop_caches:清缓存

确定端口是否被打开,找到哪些进程打开了端口:lsof   -i  :端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值