ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基础24

2022-05-09 19:03:12  阅读:120  来源: 互联网

标签:24 0.0 top 基础 进程 root CPU localhost


进程管理

进程概述

  • 什么是进程
    • 进程就是一个正在运行的程序
  • 程序与进程的区别
    • 进程是动态概念,具有生命周期,无法长期存放在系统中
    • 程序是静态概念,代码的集合,可以长期存放在系统中
  • 进程的生命周期
    • 1.用户发起请求
    • 2.父进程会fork出子进程,子进程会继承父进程大部分的属性,如:文件描述符等,处理任务
    • 3.子进程在处理任务中,父进程是一个wait状态,等待子进程
    • 4.正常结束
    • 5.非正常结束
      • 僵尸进程
      • 孤儿进程
# 僵尸进程及产生的原因
僵尸进程:
1.子进程比父进程先结束
2.父进程没有回收子进程的资源
3.此时的子进程就称为”僵尸进程”

产生的原因:
1.子进程的结束和父进程的运行是异步的
2.父进程永远不知道子进程什么时候结束
3.子进程在结束时,父进程繁忙来不及回收子进程,则会导致,子进程变成僵尸进程


# 孤儿进程及产生的原因
孤儿进程:
1.父进程比子进程先结束
2,子进程还在执行任务,没有父进程管理
3.此时的子进程就成为孤儿进程

产生的原因:
1.子进程的结束和父进程的运行是异步的
2.父进程永远不知道子进程什么时候结束
3.当父进程正常完成任务或其它原因终止,则会导致,子进程变成孤儿进程

监控进程的状态

进程状态管理命令

ps [选项] [参数]

#常用选项组合
[root@localhost ~]# ps -ef
[root@localhost ~]# ps aux
a:查看所有与终端相关的进程,由终端发起的进程
u:显示进程的管理用户
x:查看所有与终端无关的进程


[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    14:19   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    14:19   0:00 [kworker/0:0]

USER:该进程的管理用户
PID:进程号
%CPU:该进程占用CPU的百分比
%MEM:该进程占用内存的百分比
VSZ:该进程占用虚拟内存的大小
RSS:该进程占用物理内存的大小

TTY:终端
    ?:由内核发起的进程
    tty:机器上的终端进程
    pts/N:远程连接工具的终端进程

STAT:进程运行的状态
     D:无法中断的休眠状态(通IO的进程)
     R:正在运行的状态
     S:处于休眠状态的进程
     T:暂停或者被追踪的状态
     Z:僵尸进程
     <:优先级高的进程
     N:优先级低的进程
     +:在前台运行
     s:父进程,在它下面有子进程
     L:有些数据页被缩进内存的进程
     l:存在多进程的进程
     i:以线程的方式运行
     W:进入交换内存的进程(swap,centos7见不到)
     X:死掉的进程(少见)

START:进程开启的时间
TIME:该进程占用CPU的时间
COMMAND:进程的名字或者进程的命令
        []:内核态进程
        没[]:用户态进程
        
        
## 如果后台有被暂停的进程
ctrl + r :将命令暂时挂起到后台
# 查看所有被暂停的进程
[root@localhost ~]# jobs
[1]- Stopped     vim 1.txt
[2]+ Stopped     ping baidu.com

bg:让暂停的进程运行起来,后面加数字,就可以运行第几个被暂停的进程(默认是最后一个)
fg:是把后台被暂停的进程,调到前台运行,后面加数字,可以将第N个进程调到前台运行(默认是最后一个)


# ps命令的用法
# 1,根据%CPU进行排序
[root@localhost ~]# ps aux|sort -k 3
[root@localhost ~]# ps aux --sort %cpu
[root@localhost ~]# ps aux --sort %mem

# 2.自定义显示字段
o:自定义显示字段
[root@localhost ~]# ps axo %cpu,%mem
%CPU %MEM
 0.0  0.3
 0.0  0.0
 0.0  0.0

# 3.显示子进程
f:查看子进程和父进程的关系
[root@localhost ~]# ps auf|grep nginx

# 4.查看指定进程的pid
[root@localhost ~]# ps aux|grep [n]ginx
[root@localhost ~]# pgrep nginx 
1245
1246
[root@localhost ~]# pidof nginx
1246 1245

-l:显示该进程的启动命令
-a:显示该进程的完整描述信息
[root@localhost ~]# pgrep -al nginx
1245 nginx: master process nginx
1246 nginx: worker process

# 结束进程
[root@localhost ~]# pgrep nginx|xargs kill

进程管理命令-top

[root@localhost ~]# top
# 第一行 系统相关
top - 14:48:55 up  6:25,  2 users,  load average: 0.00, 0.01, 0.05

top:命令
14:48:55:当前系统时间
up  6:25:该服务器运行的时间
2 users:当前登录的用户数量
load average: 0.01,0.02,0.05:系统的平均负载
0.01:1分钟
0.02:2分钟
0.05:5分钟


# 第二行 进程状态
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie

95 total:当前系统中所有的进程数量
1 running:处于R状态,正在运行状态的进程数
94 sleeping:处于S状态,休眠状态的进程数
0 stopped:处于T状态,后台挂起暂停的进程数
0 zombie:处于Z状态,僵尸进程的进程数


# 第三行 CPU百分比
%Cpu(s):  5.9 us,  0.0 sy,  0.0 ni, 94.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us:用户进程占用CPU的百分比(用户态)
sy:系统进程占用CPU的百分比(内核态)
ni:优先级较高的进程占用CPU的百分比
id:CPU的空闲程度
wa:等待状态的进程占用CPU的百分比
hi:硬中断占用CPU的百分比
si:软中断占用CPU的百分比
st:虚拟化技术占用CPU的百分比


# 第四行 物理内存
KiB Mem :   995672 total,   712992 free,   176668 used,   106012 buff/cache

995672 total:总内存数
712992 free:空闲内存数
176668 used:已使用的内存数
106012 buff/cache:buffer缓冲区/缓存区


# 第五行 swap虚拟内存
KiB Swap:  1048572 total,  1048572 free,        0 used.   690712 avail Mem 

1048572 total:总共的虚拟内存数
1048572 free:空闲的虚拟内存数
0 used:已使用的虚拟内存数
690712 avail Mem:可用的虚拟内存数

什么是中断

中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求

中断在Linux系统中被分为两个阶段执行

  • 硬中断:快速处理中断请求,将中断请求放入缓存中
  • 软中断:延迟处理中断请求,将缓存中没有处理完的中断请求继续处理

top命令的用法

top
# 选项
-d:指定更新的时间(默认是3s更新一次)
-p:只查看指定pid的进程
-u:指定相关用户
-b:将top内容保存到文件中
-n:指定次数
# 例:
[root@localhost ~]# top -d 1

[root@localhost ~]# top -p 11
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.31 watchdog/0        

[root@localhost ~]# top -u root 
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM 
  1503 root      20   0       0      0      0 S  0.3  0.0 
     1 root      20   0  125352   3816   2584 S  0.0  0.4 

# -b,-n 要配合使用
[root@localhost ~]# top -b -n 1 > ./1.txt
[root@localhost ~]# ll 
total 1048
-rw-r--r-- 1 root root    5957 May  5 16:50 1.txt



top 常见指令
h  查看帮助
z  高亮显示
l  显示所有CPU的负载
s  设置刷新时间
b  高亮显示处于R状态的进程
M  按内存使用百分比排序输出
P  按CPU使用百分比排序输出
R  对排序进行反转
f  自定义显示字段
k  kill掉指定PID进程
w  保存top环境设置
q  退出

# 例:l
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0  125352   3816   2584 S  0.0  0.4   0:02.34 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H

# k
PID to signal/kill [default pid = 1163] kill 10
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  1163 root      20   0  161512   6064   4688 S  6.2  0.6   0:00.84 sshd


PID:进程ID号
USER:该进程的用户
PR NI:进程优先级
VIRT:虚拟内存占用空间
RES:物理内存占用空间
SHR:共享内存占用空间
S:进程的状态
%CPU:占用CPU的百分比
%MEM:内存占用的百分比
TIME+:运行时间
COMMAND:进程的运行命令

进程的信号管理

[root@localhost ~]# kill -l 
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

# 常见信号列表
数字信号   信号别名    作用
1         HUP       挂起信号,往往可以让进程重新配置(重新加载配置文件)
2         INT       中断信号,起到结束进程的作用,和 ctrl + c 的作用一样
3         QUIT      让进程退出,结果是进程退出
9         KILL      直接结束进程,不能被进程捕获
15        TERM      进程终止,这是默认信号
18        CONT      被暂停的进程将恢复运行(放在后台运行,bg)
19        STOP      暂停进程
20        TSTP      用户停止请求,作用类似于 ctrl + z 把进程放到后台并暂停

# 例:
[root@localhost ~]# ps aux |grep nginx
root       1593  0.0  0.1  45996  1132 ?        Ss   17:16   0:00 nginx: master process nginx
nobody     1594  0.0  0.1  46444  1884 ?        S    17:16   0:00 nginx: worker process
root       1597  0.0  0.0 112812   980 pts/0    R+   17:17   0:00 grep --color=auto nginx
[root@localhost ~]# kill -1 1593

[root@localhost ~]# kill -3 1593
[root@localhost ~]# ps aux |grep nginx
root       1600  0.0  0.0 112812   980 pts/0    R+   17:18   0:00 grep --color=auto nginx


killall:杀掉所有进程,不用指定pid
pill:杀掉所有进程,不用指定pid

[root@localhost ~]# pkill -9 -t pts/0

Linux系统假死

什么是假死

所谓假死,就是能ping通,但是ssh不上去;任何其他操作也都没反应,包括上面部署的nginx也打不开页面。

出现假死怎么办

使用nice将sshd的进程优先级调高。这样当系统内存吃紧,还能勉强登陆sshd,进入调试。然后分析故障。

进程的优先级

什么是优先级

优先级高的进程,可以优先享用系统的资源

优先级的定义和配置

在启动进程时,为不同的进程使用不同的调度方案

nice值越高,表示优先级越低,例如:19,该进程容易将CPU使用量让给其它进程。

nice值越低,表示优先级越高,例如:-20,该进程更不倾向于让出CPU

# 指定优先级执行命令
nice -n 19 vim 1.txt

# 重置,已经在运行的程序的优先级
# 查看sshd服务的优先级
[root@localhost ~]# ps axo pid,user,nice,command|grep ssh
   892 root       0 /usr/sbin/sshd -D

# 重新设置sshd服务的优先级为-20
[root@localhost ~]# renice -n -20 892
892 (process ID) old priority 0, new priority -20

# 再次查看
[root@localhost ~]# ps axo pid,user,nice,command|grep ssh
   892 root     -20 /usr/sbin/sshd -D

后台进程管理

# 在执行的命令后面加 & 会直接将该命令放在后台运行
[root@localhost ~]# ping baidu.com &
[1] 1981

# 先把进程放在后台暂停,配合 bg 将暂停的进程,在后台恢复运行
ctrl + z
jobs
bg fg

[root@localhost ~]# ping baidu.com 
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=79.5 ms
^Z
[1]+  Stopped                 ping baidu.com
[root@localhost ~]# jobs
[1]+  Stopped                 ping baidu.com
[root@localhost ~]# bg 1
[1]+ ping baidu.com &

# nohup将执行的命令放入后台执行,并且将输出的结果保存到 nohup.out 文件中
[root@localhost ~]# nohup ping baidu.com &
[1] 1990
[root@localhost ~]# nohup: ignoring input and appending output to ‘nohup.out’
^C
[root@localhost ~]# ll 
total 1044
-rw------- 1 root root    1239 May  6 16:35 nohup.out
[root@localhost ~]# cat nohup.out 
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=161 ms

# screen将进程放入后台(开启一个子shell)
[root@localhost ~]# yum install -y screen

screen [选项]
-ls:查看所有screen的后台进程
-r:指定后台进程号,进入该后台进程
-S:指定后台进程的名字
ctrl + a + d :放在后台执行

[root@localhost ~]# screen -S xxx 
[detached from 2108.xxx]
[root@localhost ~]# screen -ls
There is a screen on:
	2108.xxx	(Attached)
1 Socket in /var/run/screen/S-root.
[root@localhost ~]# screen -r 2108

平均负载

什么是平均负载

平均负载是指,单位时间内,系统处于可运行状态(R)和不可中断状态(D)的平均进程数,也就是平均活跃进程数

平均负载多少合适

# 查看CPU的个数
1).查看/proc/cpuinfo文件
[root@localhost ~]# cat /proc/cpuinfo 
cpu cores	: 1

2).使用top命令
 top 按1
[root@localhost ~]# top
%Cpu0 

3).使用lscpu命令
[root@localhost ~]# lscpu
CPU(s):                1



假设我们在有2个CPU系统上看到平均负载为2.73,6.90,12.98那么说明在过去1分钟内,系统有136%的超载(2.73/2*100%=136%)
5分钟:(6.90/2*100%=345%)
15分钟:(12.98/2*100%=649%)
但整体趋势来看,系统负载是在逐步降低。

CPU类型

CPU密集型:计算相关
io密集型:数据库相关服务

标签:24,0.0,top,基础,进程,root,CPU,localhost
来源: https://www.cnblogs.com/LZA1218/p/16250405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有