进程管理
常用命令:
ps aux
ps -ef
USER:运行该进程的用户
PID:进程ID
%CPU:CPU的占用率
%MEM:内存的占用率
VSZ:虚拟内存申请的大小
RSS:物理内存占用大小
TTY:运行该进程的终端,?表示该进程不是从终端运行的
STAT:进程的状态,S 就是sleep(休眠状态),I<(可中断的进程)
man ps
START:该进程的启动时间
TIME:持续运行的时间,处于休眠状态的进程不计时,从休眠状态恢复运行重新开始计时
COMMAND:该进程是由哪条命令提供的
可以通过ps axo 自定义显示字段。
通过CPU占用率排序(从高到低)。
当你需要终止一个进程的时候,默认是发送15 的信号,也请尽量使用15 的信号,不到万不得已不要使用9,如果服务正在使用,可能造成数据丢失。
安装一个httpd
yum -y install httpd
systemctl start httpd
ps aux |grep httpd
这种情况下,如果你想要使用kill 命令一个个结束这些进程,就有点繁琐了,使用killall 命令就更合适。
killall 命令需要安装一个包:
yum -y install psmisc.x86_64
然后:
killall httpd
这样就把httpd 名称相关的进程都结束了。
进程分为动态优先级和静态优先级
在CE 阶段,我们学习到的nice 优先级叫做动态优先级,即使我们调整到-20,其实它的优先级依然很低。
其实从整个大的优先级范围来看,是0-139,其中,静态优先级的取值范围是1-99,数字越大,优先级越高;动态优先级是范围是-20 - 19,数字越小,优先级越高。
动态优先级的数值,在静态优先级看来,都为0。
命令chrt(change realtime):
chrt
在静态优先级看来,nice 优先级都是0。
实时优先级的算法,有两种:
- FIFO:先进先出,先进来的优先处理,如果被优先级更高的进程中断,则插入到队列的头部
- RR:轮循,给进程分配时间片,高优先级的进程有更长的时间片,一旦时间片用完了,则插入到队列的后面
下面做一下实验:
这里需要调整一个内核参数,它限制了一个进程运行时的最大时间片,改成-1表示无限制,这样才能执行下面chrt 那条命令,这个操作其实非常危险,不建议在生产环境上做。
再加一个进程,机器死机了。这是因为这两个进程长时间占用cpu 资源,其他程序一直得不到时间片。
主机恢复后,这次只运行一个,通过chrt -p 可以查看到这个进程的实时优先级调度策略,和优先级值。
再运行一个,机器也死机了。为什么轮循还会死机呢?因为只是在静态优先级,也可以叫做是实时优先级的进程之间轮循,并不是与动态优先级的进程轮循。
系统中默认有一些进程就是属于静态优先级的:
这是属于系统中非常重要的进程。
持续更新中...