进程管理二

Posted 晴笙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程管理二相关的知识,希望对你有一定的参考价值。

进程的优先级

什么是优先级

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

优先级的定义和配置

在启动进程时,为不同的进程使用不同的调度策略。
nice值越高:表示优先级越低,例如19,该进程容易将CPU使用量让给其他进程。
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU

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

# 重置,已经在运行的程序,优先级
# 查看sshd服务的优先级
[root@localhost <sub>]# ps axo pid,user,nice,command|grep ssh
6676 root 0 /usr/sbin/sshd -D
# 重新设置sshd服务的优先级为-20
[root@localhost </sub>]# renice -n -20 6676
6676 (process ID) old priority 0, new priority -20
# 再次查看
[root@localhost ~]# ps axo pid,user,nice,command|grep ssh
6676 root -20 /usr/sbin/sshd -D

后台进程管理

# 在执行的命令后面加 & 会直接将该命令放在后台执行
&
[root@localhost <sub>]# ping baidu.com &
# 先把进程放在后台暂停 配合 bg将暂停的进程,在后台恢复运行
Ctrl + z
jobs bg fg
[root@localhost </sub>]# 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=32.2 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=31.5 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128 time=32.2 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=128 time=33.6 ms
^Z
[1]+ Stopped ping baidu.com
[root@localhost <sub>]# jobs
[1]+ Stopped ping baidu.com
[root@localhost </sub>]# bg 1
[1]+ ping baidu.com &
# 将执行的命令放入后台执行,并且将输出结果保存到 nohup.out文件中
nohup
[root@localhost <sub>]# nohup ping baidu.com &
[1] 27067
[root@localhost </sub>]# nohup: ignoring input and appending output to ‘nohup.out’
# 将进程放入后台(开启一个子shell)
screen
[root@localhost ~]# yum install -y screen
-ls:查看所有screen的后台进程
-r:指定后台进程号,进入该后台进程
-S:指定后台进程的名字
Ctrl + a + d:放在后台执行

平均负载

  • 平均负载是指,单位时间内,系统处于可运行状态(R)和不可中断状态(D)的平均进程数,也就是平均活跃进程数
  • 平均负载与CPU使用率并没有直接关系

合理的平均负载

# 如何查看cpu的个数
/proc/cpuinfo
top1
lscpu
假设我们在有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密集型:数据库相关服务

企业级负载分析实战

领导:某一台服务器,很卡,怎么办?
卡的原因:服务器,负载太高

如何定位,什么程序,导致负载高?
如何定位,负载高,是哪个硬件引起的?

# 完全是因为目前没有用户量
stress是Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
[root@localhost <sub>]# yum install -y stress
# 分析负载
mpstat是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。
pidstat是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标。
# 启动了4个cpu密集型的进程,4个占用CPU的进程
[root@localhost </sub>]# stress --cpu 4 --timeout 600
# 查看所有的CPU,5s显示一次数据
[root@localhost <sub>]# mpstat -P ALL 5
下面可以看出,是用户态的进程导致CPU过高
Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 05/06/2022 _x86_64_ (4 CPU)
07:56:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice
%idle
07:56:19 PM all 99.95 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00
0.00
07:56:19 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00
07:56:19 PM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00
07:56:19 PM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00
07:56:19 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00
## -u指定5s输出一次数据 2 , 总共输出2组数据
[root@localhost </sub>]# pidstat -u 5 2
[root@localhost <sub>]# stress --io 100 --timeout 600
[root@localhost </sub>]# stress -c 100 --timeout 600
IO:磁盘IO导致负载升高
[root@localhost <sub>]# stress --io 100 --timeout 600
CPU:CPU会用率会导致负载升高
[root@localhost </sub>]# stress --cpu 100 --timeout 600
启动大量进程:导致负载升高
[root@localhost ~]# stress -c 100 --timeout 600
## 总结分析流程:
1.使用uptime或者top命令查看,系统负载
2.看1分钟,5分钟,15分钟的负载趋势
3.是什么情况导致负载上升
mpstat -P ALL 5 是用户态,还是内核态,导致负载上升
用户态:cpu使用率,大量进程
内核态:磁盘IO,压缩文件,网络存储挂载,下载文件,数据库查询语句
4.查看到底是哪个程序,引起用户态或者内核态的负载上升?
pidstat -u 5 2
5.查到了是某个进程后
- 运维
执行了某条命令?
启动了某个服务?
- 开发
查看开发写好的程序日志,导出日志,交给开发


以上是关于进程管理二的主要内容,如果未能解决你的问题,请参考以下文章

工作管理

编写多进程编程

linux中用管道实现兄弟进程通信

Xcode创建Workspace,并管理多个子工程

linux c之通过管道实现兄弟间进程通信:

I/O复用模型详解