进程的概念

程序:程序是数据和指令的集合,是一个静态的概念。比如/bin/ls、/bin/cp等二进制文件。同时程序可以长期存在系统中。
进程:进程是程序运行的过程,是一个动态的概念。进程是存在生命周期的概念的,也就是说进程会随着程序的终止而销毁,不会永久存在系统中。

进程的生命周期
[root@k8s-node01 ~]# ps  #查看当前用户进程
  PID TTY          TIME CMD
57647 pts/1    00:00:00 bash
63487 pts/1    00:00:00 ps

[root@k8s-node01 ~]# ps aux|grep sshd  #查看sshd相关的进程
root      6015  0.0  0.1 112860  4348 ?        S<s  Aug03   0:00 /usr/sbin/sshd -D
root     57644  0.0  0.2 163552  6112 ?        Rs   18:38   0:01 sshd: root@pts/1
root     60619  0.0  0.2 163552  6112 ?        S<s  19:23   0:01 sshd: root@pts/2
root     60796  0.0  0.2 163552  6108 ?        S<s  19:24   0:01 sshd: root@pts/3
root     63753  0.0  0.0 112712   984 pts/1    S+   20:05   0:00 grep --color=auto ssh

[root@k8s-node01 ~]# ps aux  #查看所有进程
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.1 125728  4172 ?        Ss   Aug03   2:43 /usr/lib/systemd/systemd --switched-root --syste
root         2  0.0  0.0      0     0 ?        S    Aug03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Aug03   0:42 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Aug03   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Aug03   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Aug03   0:00 [rcu_bh]
root         9  0.1  0.0      0     0 ?        S    Aug03   2:54 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   Aug03   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S    Aug03   0:02 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    Aug03   0:02 [watchdog/1]
root        13  0.0  0.0      0     0 ?        S    Aug03   0:00 [migration/1]
root        14  0.0  0.0      0     0 ?        S    Aug03   0:21 [ksoftirqd/1]
root        16  0.0  0.0      0     0 ?        S<   Aug03   0:00 [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S    Aug03   0:00 [kdevtmpfs]
root        19  0.0  0.0      0     0 ?        S<   Aug03   0:00 [netns]
root        20  0.0  0.0      0     0 ?        S    Aug03   0:00 [khungtaskd]
root        21  0.0  0.0      0     0 ?        S<   Aug03   0:00 [writeback]
root        22  0.0  0.0      0     0 ?        S<   Aug03   0:00 [kintegrityd]
root        23  0.0  0.0      0     0 ?        S<   Aug03   0:00 [bioset]
USER:      运行进程的用户
PID:      进程ID
%CPU:    CPU占用率
%MEM:      内存占用率
VSZ:      占用虚拟内存
RSS:       占用实际内存 驻留内存
TTY:      进程运行的终端
STAT:     进程状态     man ps (/STATE)            
      R     运行
      S     可中断睡眠 Sleep
      D     不可中断睡眠
      T     停止的进程 
      Z     僵尸进程
      X     死掉的进程
      
      Ss     s进程的领导者,父进程
      S<    <优先级较高的进程
      SN     N优先级较低的进程
      R+      +表示是前台的进程组
      Sl     以线程的方式运行    
START:     进程的启动时间
TIME:     进程占用CPU的总时间
COMMAND:  进程文件,进程名
查看进程信息
[root@k8s-node01 ~]# w
 20:08:18 up 1 day,  8:27,  3 users,  load average: 0.04, 0.07, 0.12
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.1.101    18:38    2.00s  0.25s  0.02s w
root     pts/2    192.168.1.101    19:23   38:02  12.40s 12.32s top
root     pts/3    192.168.1.101    19:24   43:22  13.77s 13.72s top

[root@k8s-node01 ~]# uptime
 20:09:13 up 1 day,  8:28,  3 users, load average: 0.02, 0.06, 0.12
 
 # 0.02:1分钟内的平均负载
 # 0.06:5分钟内的平均负载
 # 0.12:15分钟内的平均负载
# 更详细的查看命令
[root@k8s-node01 ~]# top                              

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

# top命令中,可以使用如下命名
h	查看帮出
1	数字1,显示所有CPU核心的负载
z	以高亮显示数据
b	高亮显示处于R状态的进程
M	按内存使用百分比排序输出
P	按CPU使用百分比排序输出
q	退出top
进程管理

Kill pkill killall

[root@k8s-node01 sdd_test]# 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: SIGHUP 通常用来重新加载配置文件
9: SIGKILL 强制杀死进程
15:SIGTERM 终止进程,默认kill使用该信号

当进程或服务没有停止的信号,可以使用系统的kill给进程发送信号

#默认kill进程父进程,这样才能彻底的杀掉该进程.  否则如果只是kill子进程,没有用
[root@k8s-node01 ~]# kill 18788

重载配置,PID号不会发生变化,只要PID发生变化说明进程被停止过
[root@k8s-node01 ~]# kill -1 20154

强制杀死某个进程.慎用
[root@k8s-node01 ~]# kill -9 20154

批量杀死进程
[root@k8s-node01 ~]# ps aux|grep nginx |grep -v grep|awk '{print $2}'|sed -r 's#(.*)#kill \1#g'|bash
[root@k8s-node01 ~]# killall nginx		#跟进程的名称
[root@k8s-node01 ~]# pkill nginx		#跟上进程名称
[root@k8s-node01 ~]# pkill -9 -t pts/

进程优先级

nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。
NI: 实际nice级别,默认是0。 PR: 显示nice值,-20映射到0,19映射到39
如:ni:0 pr:20
如:ni:5 pr:25

#nice指定程序的优先级。语法格式 nice -n 优先级数字 进程名称
#1.开启vim并且指定程序优先级为-5
[root@k8s-node01 sdd_test]# nice -n -5 vim &
[1] 17097

#.查看该进程的优先级情况
[root@k8s-node01 sdd_test]# ps axo pid,command,nice |grep 98417
98417 vim                         -5
 
# renice命令修改一个正在运行的进程优先级。语法格式 renice -n 优先级数字 进程pid
查看sshd进程当前的优先级状态
[root@k8s-node01 sdd_test]# ps axo pid,command,nice |grep [s]shd
70840 sshd: root@pts/2              0
98002 /usr/sbin/sshd -D             0
	 
调整sshd主进程的优先级
[root@k8s-node01 sdd_test]# renice -n -20 98002
98002 (process ID) old priority 0, new priority -20
[root@k8s-node01 sdd_test]# ps axo pid,command,nice |grep [s]shd
70840 sshd: root@pts/2              0 98002 /usr/sbin/sshd -D           -20
[root@k8s-node01 sdd_test]# exit
当再次登陆sshd服务,会由主进程fork子进程(那么子进程会继承主进程的优先级)
[root@k8s-node01 sdd_test]# ps axo pid,command,nice |grep [s]shd
98002 /usr/sbin/sshd -D           -20
98122 sshd: root@pts/0            -20
平均负载

如何理解平均负载: 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数, 平均负载与 CPU 使用率并没有直接关系,1分钟、5分钟、15分钟平均负载越相近表示系统越趋于稳定。
因此可以简单理解为,平均负载其实就是单位时间内的活跃进程数。

平均负载高有可能是 CPU 密集型进程导致的;
平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 繁忙了;
当发现负载高的时候,可以使用 mpstat、pidstat 等工具,辅助分析负载的来源

[root@k8s-node01 sdd_test]# pidstat -u 5 1 
Linux 3.10.0-957.el7.x86_64 (k8s-node01) 	08/06/2019 	_x86_64_	(2 CPU)

09:53:53 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:53:58 PM     0         9    0.00    0.20    0.00    0.20     1  rcu_sched
09:53:58 PM     0      2815    0.20    0.00    0.00    0.20     0  kworker/0:1H
09:53:58 PM     0      2888    0.20    0.60    0.00    0.79     1  systemd-journal
09:53:58 PM     0      5708    0.20    0.00    0.00    0.20     0  vmtoolsd
09:53:58 PM     0      6096    0.20    0.79    0.00    0.99     0  kube-proxy
09:53:58 PM     0      6100    0.00    0.20    0.00    0.20     0  rsyslogd
09:53:58 PM     0     16846    0.00    0.60    0.00    0.60     0  kworker/0:2
09:53:58 PM     0     17119    0.00    0.79    0.00    0.79     1  kworker/1:0
09:53:58 PM     0     17145    0.00    0.20    0.00    0.20     1  flanneld
09:53:58 PM     0     17168    0.00    0.79    0.00    0.79     1  pidstat

[root@k8s-node01 sdd_test]# mpstat -P ALL 5
Linux 3.10.0-957.el7.x86_64 (k8s-node01) 	08/06/2019 	_x86_64_	(2 CPU)

09:54:49 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:54 PM  all    0.10    0.00    0.41    0.00    0.00    0.00    0.00    0.00    0.00   99.49
09:54:54 PM    0    0.20    0.00    0.40    0.00    0.00    0.20    0.00    0.00    0.00   99.19
09:54:54 PM    1    0.20    0.00    0.61    0.00    0.00    0.00    0.00    0.00    0.00   99.19

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐