Linux基础22 进程的优先级nice, 后台进程管理, 系统平均负载, 系统启动流程, 运行级别, 救援模式, 单用户模式(有root权限),并行运行

进程的优先级:

nice值越高:表示优先级越低,例如19,该进程容易将CPU使用量让给其他进程。
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。

# 以设定的优先级启动
nice -n -10 tail -f /var/log/messages

#重新设置一个进程的优先级(调整sshd的优先级)
[root@oldboyedu ~]# renice -n -20 6684    (改完主进程变为-20,退出再登录sshd子进程也都变为-20)
6684 (process ID) old priority 0, new priority -20

6684 -20 /usr/sbin/sshd -D
9038 -20 sshd: root@pts/0
9067 -20 sshd: root@pts/1
注:java可能写了个进程,不断fork进程,占用文件描述符过多,导致oom,系统杀死线程后,进程fork出新的进程,达到死循环。
此时sshd很难连接上去,很多服务页面打不开,但是都是通的 可以通过把sshd优先级调到最高,保证sshd正常连接

#查看优先级
[root@ubuntu ~]# ps axo pid,cmd,nice
  PID CMD                         NI
   1 /sbin/init                    0
   2 [kthreadd]                    0
  ...
  16 [idle_inject/0]               - #这里表示是内核进程,因为nice值最小是-20, 所以此处无法显示
[root@ubuntu ~]# top

centos优先级

系统优先级:0-139, 数字越小,优先级越高,各有140个运行队列和过期队列
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139
  •  优先级越高,并不代表程序执行会更快,而是说在cpu调度时,给予更高的权重,最先执行
  •  优先级决定的是执行顺序靠前,而不决定其程序本身要执行多久

 

sshd连接不上的几种原因

1.网络
    ping 10.0.0.100
    
2.端口
    telnet 10.0.0.150 22
    tcping 10.0.0.150 22    # 新买的阿里云会禁ping和telnet,可以用tcping测试
                yum install -y tcping
3.用户
    root
4.密码
    1

 

nice:设置优先级
-n:指定优先级

nice -n -20  command
renice -n -5 pid

 

作业管理

  • 前台作业:通过终端启动,且启动后一直占据终端
  • 后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
#让作业运行于后台
运行中的作业: Ctrl+z     #使占据终端的进程暂停(变为stop状态T),让出终端
#后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。

尚未启动的作业: COMMAND &
退出后台,进程依然执行

退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系
nohup COMMAND &>/dev/null & 
screen;COMMAND
tmux;COMMAND

后台进程管理:

jobs:查看后台进程        # 会显示当前后台所有进程
bg:永久放到后台执行(默认最后一个)   #bg n 把jobs第n个任务放在后台永久执行,会话窗口会一直显示后台任务
fg:调出后台任务(默认最后一个)  # fg n 会调出jobs中第n个任务
kill n          #终止指定的作业
screen:    (常用)# 后台进程管理, 可用于查看后台进程进度
    -S:起名
    -ls:查看后台进程的列表
    -r:指定pid或者名字,进入后台进程
    kill + pid 杀掉进程
    
   在screen内,ctrl +d结束该screen进程 退出终端:ctrl
+a +d(一直按住ctrl键,然后先按a,放开a,再按d) [root@oldboyedu ~]# yum install -y screen
操作举例(整套流程)    
[root@localhost ~]# screen    # 创建终端
[root@localhost ~]# ping www.baidu.com
ctrl +a +d    # 退出终端,ping在后台运行(连按两次,会退出外层的终端(sshd))
[root@localhost ~]# screen -ls    # 查看终端里任务pid
There is a screen on:
        113269.pts-0.localhost  (Detached)
1 Socket in /var/run/screen/S-root.
[root@localhost ~]# screen -r 113269    # 进入终端

    

[root@oldboyedu ~]# screen -ls    # 查看终端
There is a screen on:
    9461.pts-1.oldboyedu    (Detached)
1 Socket in /var/run/screen/S-root.

[root@oldboyedu ~]# screen -r 9461    # 进入该终端
[root@oldboyedu ~]# screen -S ping_baidu    # 开一个终端,起个名
[detached from 9539.ping_baidu]
[root@oldboyedu ~]# screen -ls
There are screens on:
    9539.ping_baidu    (Detached)
    9518.pts-1.oldboyedu    (Detached)
    9461.pts-1.oldboyedu    (Detached)
3 Sockets in /var/run/screen/S-root.

[root@oldboyedu ~]# screen -r ping_baidu    # 进入终端
[detached from 9539.ping_baidu]
[root@oldboyedu ~]# screen -r 9539
[detached from 9539.ping_baidu]
#注意:可以用pstree查看后台中进行的任务
#比如screen会话中执行了ping,并关闭会话窗口

#在另一个窗口连接查看任务,ping还在执行
root@ubuntu:~# pstree -p
systemd(1)─┬─ModemManager(881)─┬─{ModemManager}(917)
           │                   └─{ModemManager}(922)
          ...
           ├─screen(2381)───bash(2382)───ping(2389)

#有个特殊操作,两个人同时进入同一个screen会话,那么无论谁做什么,另一个人都看得到

 

系统平均负载

cpu   top上的load average
4        2    # 50%cpu没有合理利用到
2        2    # 100%cpu被用到
1        2    # 超负荷(一半的进程占用不到cpu)

企业中,一般当平均负载高于70%的时候,就需要排查负载高的问题了。

stress:是Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
[root@oldboyedu ~]# yum install -y stress

mpstat:是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。
[root@oldboyedu ~]# yum install -y sysstat

pidstat:是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标。
[root@oldboyedu ~]# yum install -y sysstat
测试操作
stress --cpu 4 --timeout 600    # cpu压测
查看系统平均负债
watch -d uptime    # watch 动态查看 -d高亮标出变化的内容
查看cpu使用情况(判断是否是cpu引起的问题)
mpstat -P ALL 5
查看哪个进程导致cpu持续上升
pidstat -u 5 1

stress --io 1000 --timeout 600    # io压测
查看系统使用情况
mpstat -P ALL 5    #CPU不高,但是io升高会导致%sys系统内核态升高
查看哪个进程导致内核态持续上升
pidstat -u 5 1
注: io的升高并不会导致系统很卡

stress -c 4 --timeout 600    # 大量进程
查看系统使用情况
mpstat -P ALL 5    #CPU上升
iostat -d 10    # 查io

总结:

1.平均负载高有可能是CPU密集型进程导致的
2.平均负载高并不一定代表CPU的使用率就一定高,还有可能是I/O繁忙
3.当发现负载高时,可以使用mpstat、pidstat等工具,快速定位到,负载高的原因,从而做出处理

 

系统启动流程

开机启动流程CentOS6:
1.加电自检(BIOS)检查硬件
2.内核引导MBR
3.grub菜单   --->选择系统
4.加载内核
5.加载init    # 运行级别(默认为3, 5为图形化界面)
6.初始化系统
7.启动开机自启动的服务(串行) 8.进入终端 开机启动流程CentOS7: 1.加电自检(BIOS)检查硬件 2.内核引导MBR 3.grub菜单 --->选择系统 4.加载内核 5.加载Systemd # 不再使用init, 改成systemd
6.读取运行级别
7.初始化系统
8.启动开机自启动的服务(并行) 9.进入终端

 运行级别

0-6
0    关机
1    单用户
2    多用户
3    多用户
4    多用户(centos-6中没有使用)
5    图形化
6    重启

级别设置和获取
centos7中
设置
systemctl set-default  级别
查看
systemctl get-default

centos6中
设置
init
查看
runlevel

 

单用户模式(有root权限)

1. 启动界面下,按e进入单用户模式

 2.输入rd.break, 然后ctrl+x

3.挂载 mount -o rw,remount /sysroot/    (挂载这个目录才能获得root权限)

4.输入  chroot /sysroot/

 5. exit

6.reboot

 

救援模式

Linux系统无法启动,且单用户模式也无法启动,需要进入救援模式。

1.开启虚拟机,鼠标点击控制台启动页面,同时迅速按下ESC键,一定要快,然后选择选项3,CD-ROM Drive启动

 另一种vmware点打开电源进入固件,在虚拟机BIOS界面,将CD-ROM虚拟机调整为第一启动项,然后重新启动。

 2.进入Troubleshooting

 3.选择Rescue a CentOS system, 进入救援模式

 4.输入1

 5. 输入 chroot /mnt/sysimage获取root权限

 6. 磁盘修复

grub2-install /dev/sda

 7.exit

8.reboot

 

CentOS6:进入单用户

1.开机grub菜单,e,选择内核,再按e
2.quit 写1 或者single
3.回车,按 b
4.修改密码
5.修改运行级别

 

并行运行

利用后台执行,实现并行功能,即同时运行多个进程,提高效率

#方法1
[root@ubuntu ~]# cat all.sh
f1.sh&
f2.sh&
f3.sh&
wait

#方法2
f1.sh&f2.sh&f3.sh&
wait

#最后加上wait,否则会一直卡着,不会退出

#多组命令实现并行
{ ping -c3 127.1; ping 127.2; }& { ping -c3 127.3 ;ping -c3 127.4; }&

#网段检测
#并发执行
#!/bin/bash
net=172.16.1
for i in {1..254};do
       {
        ping -c1 -W1 $net.$i &> /dev/null && echo $net.$i is up || echo $net.$i
is down
       }& 
done
wait

 

posted @ 2023-05-19 17:56  战斗小人  阅读(210)  评论(0编辑  收藏  举报