设为首页 收藏本站
查看: 575|回复: 0

[经验分享] Centos进程作业管理与计划任务(一)

[复制链接]

尚未签到

发表于 2018-4-20 08:41:35 | 显示全部楼层 |阅读模式
  Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。
  

  一、进程概述
  程序是保存在存储介质中的可执行机器代码(或指令)和数据的集合,而进程是在计算机处理器执行中的计算机程序。他们的关系如下:
  程序是保存在外部存储介质中的可执行代码和数据,是静态保存的代码。
  进程是程序代码在处理器中的运行,是运行中的程序的一个副本,是被载入内存的一个指令集合。
  进程ID(Process ID,PID)号码被用来标记各个进程
  进程又可以有属性,比如UID、 GID、和SELinux语境决定对文件系统的存取和访问权限,这些属性通常从执行进程的用户来继承
  进行程存在生命周期,从启动,执行再到结束,都可以各种时长的生命周期。
  在进程的生存期内将使用许多系统资源,它将使用CPU来运行指令,使用物理内存来保存执行代码和数据,它将打开和使用文件子系统中的文件,并直接或间接地使用系统中的物理设备。
  Task struct:Linux内核存储进程信息的数据结构格式
  Task list:多个任务的的task struct组成的链表
  第一个进程:
  Centos 6系统 init
DSC0000.jpg DSC0001.jpg

  Centos 7系统 systemd
DSC0002.jpg DSC0003.jpg

  像父子关系,也像树状一般
  进程:都由其父进程创建
  

  

  进程的5种基本状态与转换
DSC0004.jpg DSC0005.jpg

   创建状态:进程在创建时需要申请一个空白PCB(processcontrol block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
   就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行
   执行状态:进程处于就绪状态被调度后,进程进入执行状态
   阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
   终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
  

   时间片
  时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU立即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。
  我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有4个电话亭(就好比我们的机器有4核),有10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。
  

  状态之间转换六种情况
   运行——>就绪:
  1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;
  2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该
  进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。
   就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
   运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
   阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
  以下两种状态是不可能发生的:
   阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
   就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态
  

  进程优先级:
  系统优先级:0-99(CentOS6)
  实时(realtime)优先级: 99-0
  nice优先级:-20到19
DSC0006.jpg DSC0007.jpg

  进程内存:
  Page Frame: 页框,用存储页面数据,存储Page 4k
  LRU:Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间
  MMU:Memory Management Unit负责转换线性和物理地址
  TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
  在计算机网络体系中,主机与主机之间的通讯,实质上是 主机进程与主机进程之间的通讯,也就是进程间的通讯(IPC: Inter Process Communication)。
  当两个进程在同一主机时,就可以依靠 signal(信号指令)、shm(shared memory共享内存空间)、semaphore(信号量,一种计数器)来完成。
  当两个进程不在同一主机时,进程间通讯可以依靠socket(套接字 IP和端口号)、RPC: remote procedure call、MQ:消息队列来完成。
  

  进程状态:
  Linux内核:抢占式多任务
  

   进程类型:
  守护进程daemon
  在系统引导过程中启动的进程,和终端无关进程
  前台进程
  跟终端相关,通过终端启动的进程
  注意:两者可相互转化
   进程状态:
  运行态
  running

  就绪态
  ready

  睡眠态
  可中断:interruptable
  不可中断:uninterruptable

  停止态
  stopped
  暂停于内存,但不会被调度,除非手动启动
  僵死态
  zombie
  结束进程,父进程结束前,子进程不关闭
  

   进程的分类:
  CPU-Bound:CPU密集型,对CPU占用率高的进程。非交互
  IO-Bound:IO密集型,等待I/O时间长的进程,交互。
  

  进程管理:
  如果Linux系统整个系统资源快要被耗尽时,我们是否能够找出最耗费资源的那个进程,然后结束该进程,让系统恢复正常呢?或者某个程序存在BUG,导致产生一系列的问题,又如何查找到它并结束进程呢?又譬如同时有多个应用程序在运行,但其中某个非常重要,该如何让这个最重要的进程先运行呢?
  碰到这些情况,都应该先查询下系统当前所运行的进程,此时就可以通过一些进程管理工具来获得。
  Linux系统各进程的相关信息均保存在 /proc/PID 目录下的各文件中。
  如当前进程:#pstree -p|grep `echo $$`
  |-sshd(1185)---sshd(1288)---bash(1292)-+-grep(4421)
  一个进程可以有多个线程,一个线程对应一个进程。
DSC0008.jpg DSC0009.jpg

  进程优先级调整:
  静态优先级:100-139
  进程默认启动时的nice值为0,优先级为120,只有根用户才能降低nice值(提高优先性)
   nice命令: 用于程序执行前指定具体优先级
  nice [-n] [OPTION] [COMMAND [ARG]...]
  #nice -n -5 ping -f 127.0.0.1
  #ps -C ping o pid,cmd,ni,%cpu,psr
  PID CMD                          NI %CPU PSR
  3545 ping -f 127.0.0.1            -5  116   1
   renice命令:用于程序执行后指定具体优先级
  renice [-n] 优先级数值 进程号
  #renice -n -20 3380
  3380 (process ID) old priority 0, new priority -20
  常用进程管理工具
  指令
  描述
  ps
  显示当前时间点进程的运行情况
  pstree
  以树状图的方式展现进程之间的派生关系
  pidof
  查找一个运行的程序的PID
  pgrep
  以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
  top
  性能分析工具,能够实时显示系统中各个进程的资源占用状况
  htop
  跟top类似,但是比top更强大,可支持鼠标操作。需要EPEL源。
  glance
  查看 CPU、负载、内存、磁盘 I/O、网络流量、文件系统、系统温度等信息.EPEL源
  pmap
  显示一个或多个进程的内存状态
  vmstat
  可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,
  内存使用,虚拟内存交换情况,IO读写情况等
  dstat
  动态显示系统资源统计,代替vmstat,iostat
  iotop
  监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,
  其中包括PID、用户、I/O、进程等相关信息。
  kill
  用来删除执行中的程序或工作。kill可将指定的信息送至程序
  pkill
  按照进程名杀死进程
  job
  显示Linux中的任务列表及任务状态,包括后台运行的任务。
  该命令可以显示任务号及其对应的进程号
  bg
  用于将作业放到后台运行,该命令的运行效果与在指令后面添加符号&的效果是相同的
  nohup
  将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端
  

  pstree
  功能描述:
  display a tree of processes
  格式:

  默认:

  版本
  选项
  说明
  示例

  -p
  显示出进程号和线程


  -s
  显示指定进程父子关系,centos 6不支持


  -H PID
  高亮显示指定进程

  #pstree -p
  大括号代表是线程
DSC00010.jpg DSC00011.jpg

  显示其他用户的进程
  #pstree -p hunk
  bash(10665)───vim(10692)
  显示指定进程
  #pstree -ps 755
  systemd(1)───NetworkManager(755)─┬─dhclient(910)
  ├─dhclient(914)
  ├─dhclient(5180)
  ├─{NetworkManager}(765)
  └─{NetworkManager}(773)
  

  ps
  功能描述:
  report a snapshot of the current processes
  格式:
  ps [options]
  默认:
  默认显示当前终端中的进程
  版本
  选项
  说明
  示例

  a
  所有终端中的进程


  x
  显示不链接终端的进程


  u
  显示进程所有者的信息


  f
  选项显示进程树


  k 属性
  对属性排序,属性前加- 表示倒序


  L
  显示支持的属性列表


  o
  显示指定的信息,使用L查出值


  -C
  显示指定指令进程,多个命令用,分隔
  ps -C vim

  -f
  显示完整格式程序信息


  -F
  显示更完整格式的进程信息


  -H
  以进程层级格式显示进程相关信息


  -u userlist
  指定有效的用户ID或名称


  -U userlist
  指定真正的用户ID或名称


  -g gid或
  groupname
  
  指定有效的gid或组名称


  -G gid或
  groupname
  指定真正的gid或组名称


  -p
  pid 显示指pid的进程


  --ppid pid
  显示属于pid的子进程


  -M
  显示SELinux信息,相当于Z


  -x
  显示当前有效用户的进程

  显示较全的信息
DSC00012.jpg DSC00013.jpg

DSC00014.jpg

DSC00015.jpg

  显示属性列表
  #ps L
  %cpu         %CPU
  %mem         %MEM
  atime        TIME
  显示指定的信息栏
DSC00016.jpg DSC00017.jpg

  按指定属性进行排序,+是顺序排,-是倒序排,Centos 6排序有些小问题。某些属性不支持。
DSC00018.jpg DSC00019.jpg

  支持混合格式选项
  #ps -C bash -o %mem,%cpu,pid,uname
  %MEM %CPU    PID USER
  1.2  0.0   3698 root
  1.0  0.0  10665 hunk
  常见的进程栏位说明
  PID
  当前进程号
  PPID
  父进程号
  LWP
  线程号
  USER / UID
  进程发起者名称
  %CPU / C
  进程使用的CPU百分比
  %MEM
  进程占用的物理内存大小百分比
  VSZ
  进程占用的虚拟内存大小,单位kb
  RSS
  进程占用的物理内存大小,单位kb
  TTY
  进程所在终端。远程显示pts,本地显示tty,?表示系统进程
  STAT
  进程状态
  TIME
  进程实际使用CPU的时间
  COMMAND / CMD
  触发此进程的命令
  STIME/START
  进程启动时间
  常见的进程属性字段
  psr
  当前进程运行CPU编号
  pri
  进程优先级,值越大,优先级越高
  ni
  进程nice优先级
  rtprio
  进程realtime实时优先级
  #ps axo pid,cmd,psr,ni,pri,rtprio
DSC00020.jpg

  STAT:进程状态
  R
  running 运行状态
  s
  session leader会话(子进程)发起者
  S
  interruptable sleeping 可中断的休眠
  D
  uninterruptable sleeping 不可中断的休眠
  T
  stopped 休眠状态
  Z
  zombie 僵死状态
  +
  前台进程
  l
  多线程进程
  L
  内存分页并带锁
  N
  低优先级进程
  <
  高优先级进程
  

  top
  top:有许多内置命令:
  排序:
  P:以占据的CPU百分比,%CPU
  M:占据内存百分比,%MEM
  T:累积占据CPU时长,TIME+
  程序内子命令
  首部信息显示:
  uptime信息:l命令
  tasks及cpu信息:t命令
  cpu分别显示:1 (数字)
  memory信息:m命令
  退出命令:q
  修改刷新时间间隔:s
  终止指定进程:k
  保存文件:W
  颜色切换:小z, 大Z,颜色选择


  栏位信息简介
  us:用户空间
  sy:内核空间
  ni:调整nice时间
  id:空闲
  wa:等待IO时间
  hi:硬中断
  si:软中断(模式切换)
  st:虚拟机偷走的时间
  htop
  选项:
  -d #: 指定延迟时间;
  -u UserName: 仅显示指定用户的进程
  -s COLUME: 以指定字段进行排序
  子命令:
  s: 跟踪选定进程的系统调用
  l: 显示选定进程打开的文件列表
  a:将选定的进程绑定至某指定CPU核心
  t: 显示进程树

  vmstat

  vmstat命令:虚拟内存信息
  vmstat [options] [delay [count]]
   procs:
  r:可运行(正运行或等待运行)进程的个数,和核心数有关
  b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
   memory:
  swpd: 交换内存的使用总量
  free:空闲物理内存总量
  buffer:用于buffer的内存总量
  cache:用于cache的内存总量
   swap:
  si:从磁盘交换进内存的数据速率(kb/s)
  so:从内存交换至磁盘的数据速率(kb/s)
  io:
  bi:从块设备读入数据到系统的速率(kb/s)
  bo: 保存数据至块设备的速率
   system:
  in: interrupts 中断速率,包括时钟
  cs: context switch 进程切换速率
   cpu:
  us:Time spent running non-kernel code
  sy: Time spent running kernel code
  id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
  wa: Time spent waiting for IO. 2.5.41前,包括in idle.
  st: Time stolen from a virtual machine. 2.6.11前, unknown.
   选项:
  -s: 显示内存的统计数据
  iostat
  Centos 7 上最小安装没有包含

  pidof
  #pidof vim
  5296
  glances

  glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-Ppassword] [--password]
[-t refresh] [-f file] [-o output]

   内建命令:
  a Sort processes automatically l Show/hide logs
  c Sort processes by CPU% b Bytes or bits for network I/O
  mSort processes by MEM% w Delete warning logs
  p Sort processes by name x Delete warning and critical logs
  i Sort processes by I/O rate 1 Global CPU or per-CPU stats
  d Show/hide disk I/O stats h Show/hide this help screen
  f Show/hide file system stats t View network I/O as combination
  n Show/hide network stats u View cumulative network I/O
  s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
  y Show/hide hddtemp stats
  常用选项:
  -b: 以Byte为单位显示网卡数据速率
  -d: 关闭磁盘I/O模块
  -f /path/to/somefile: 设定输入文件位置
  -o {HTML|CSV}:输出格式
  -m: 禁用mount模块
  -n: 禁用网络模块
  -t #: 延迟时间间隔
  -1:每个CPU的相关数据单独显示
  glances可以在一台主机上面开启服务并监听某个IP地址,再通过另外一台主机上进行数据查看
  服务器端:
  #glances -s -B 192.168.4.101
  Glances server is running on 192.168.4.101:61209
  -s 充当服务器
  -B 绑定监听IP,不绑定的话,就全部IP
  客户端:
  #glances -c 192.168.4.101
  -c 以客户端身份
  注意,版本不同的话,可能无法监听或不兼容
  glances-2.5.1-1.el7.noarch
  dstat

  dstat [-afv] [options..] [delay [count]]
  -c: 显示cpu相关信息
  -C #,#,...,total
  -d: 显示disk相关信息
  -D total,sda,sdb,...
  -g:显示page相关统计数据
  -m: 显示memory相关统计数据
  -n: 显示network相关统计数据
  -p: 显示process相关统计数据
  -r: 显示io请求相关的统计数据
  -s: 显示swapped相关的统计数据
  以下带参数运行
  如: #dstat --top-io
   --tcp
   --udp
   --unix
   --raw
   --socket
   --ipc
   --top-cpu:显示最占用CPU的进程
   --top-io: 显示最占用io的进程
   --top-mem: 显示最占用内存的进程
   --top-latency: 显示延迟最大的进程

  iotop

  第一行:Read和Write速率总计
  第二行:实际的Read和Write速率
  第三行:参数如下:
  线程ID(按p切换为进程ID)
  优先级
  用户
  磁盘读速率
  磁盘写速率
  swap交换百分比
  IO等待所占的百分比
  线程/进程命令36
  iotop常用参数
   -o, --only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
   -b, --batch非交互模式,一般用来记录日志。
   -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用。
   -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1。
   -p PID, --pid=PID指定监测的进程/线程。
   -u USER, --user=USER指定监测某个用户产生的I/O。
   -P, --processes仅显示进程,默认iotop显示所有线程。
   -a, --accumulated显示累积的I/O,而不是带宽。
   -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用
  iotop常用参数和快捷键
   -t, --time 加上时间戳,非交互非模式
   -q, --quiet 禁止头几行,非交互模式,有三种指定方式
   -q 只在第一次监测时显示列名
   -qq 永远不显示列名
   -qqq 永远不显示I/O汇总
  交互按键
  left和right方向键:改变排序
  r:反向排序
  o:切换至选项--only
  p:切换至--processes选项
  a:切换至--accumulated选项
  q:退出。
  i:改变线程的优先级
  kill
  kill命令:
  向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
  显示当前系统可用信号: kill –l
  常用信号:man 7 signal
  信号数标
  信号名称
  说明
  0

  检查进程是否能正常接收信号
  1
  SIGHUP
  无须关闭进程而让其重读配置文件
  2
  SIGINT
  中止正在运行的进程;相当于Ctrl+c
  3
  SIGQUIT
  相当于ctrl+\
  9
  SIGKILL
  强制杀死正在运行的进程
  15
  SIGTERM
  正常终止正在运行的进程。默认信号。不会保存文件
  18
  SIGCONT
  继续运行
  19
  SIGSTOP
  后台休眠
  指定信号的方法:
  (1) 信号的数字标识:1, 2, 9
  (2) 信号完整名称:SIGHUP
  (3) 信号的简写名称:hup HUP quit QUIT
  kill -9 1 如果杀死进程号为1的进程,会对系统造成一定损伤,不建议使用。
  在kill 1的时候,centos 6 会把进程/sbin/mingetty 杀死,直接把tty再生功能给丢失了。也就是说,当kill 1时,再Kill掉指定终端,就无法再从那么终端登录了。
  以下就是6个tty的守护进程

  killall
  按进程名称结束进程。
  killall [-SIGNAL] 进程名称
  killall -0 ping 可以检查ping命令进程是否存在
  pkill
  按模式:pkill [options] pattern.-SIGNAL        与pgrep选项基本一致
  -u uid: effective user,生效者
  -U uid: real user,真正发起运行命令者
  -t terminal: 与指定终端相关的进程
  -l: 显示进程名(pgrep可用)
  -a: 显示完整格式的进程名(pgrep可用)
  -P pid: 显示指定进程的子进程
  trap
  信号捕抓
  显示当前系统可用信号: trap -l
  可用于脚本编程时捕获特定信号后再执行其他指令

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449397-1-1.html 上篇帖子: centos 6.9安装桌面环境 下篇帖子: Centos进程作业管理与计划任务(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表