Linux 进程及作业管理

Linux 进程及作业管理



概述:

     我们在实际的运维工作中经常要对服务器做各种监控,以了解其相关状态,比如,CPU利用率,磁盘空间利用率,等等,这就需要我们了解相关的数据并学会使用各种工具来分析数据。本章就将总结Linux系统中进程管理和作业管理的相关命令、参数和工具,包括:进程的相关定义、分类、状态以及进程查看和管理工具,如:pstree、ps、pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill ,以及作业管理的相关内容:job, bg, fg, nice,renice


第一篇:进程管理



一、进程的相关概念:

1.相关定义:

  • 内核的功用:
       进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等;     

  • 通俗的来说进程是运行起来的程序。唯一标识进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的 ;

  • 进程 Process: 
       运行中的程序的一个副本,是被载入内存的一个指令集合;
         ˙进程ID(Process ID,PID)号码被用来标记各个进程;
         ˙UID、GID、和SELinux语境决定对文件系统的存取和访问权限;
         ˙通常从执行进程的用户来继承;
         ˙存在生命周期;   

  • task struct:Linux内核存储进程信息的数据结构格式;

  • task list:多个任务的的task struct组成的链表;

2.进程创建  

  • init:第一个进程
            父子关系        

  • 进程:都由其父进程创建,COW(写实复制)
            fork(), clone()        

  • 创建过程:

       1.系统首先以fock的方式复制(cow)一个与父进程相同的进程,这个进程与父进程唯一的差别就是PID不同,但是这个进程还会多一个PPID的参数,PPID就是父进程的程序识别码PID;   

       2.然后新产生的进程开始加载实际要运行的程序进行执行。


3.进程优先级

  • 进程的优先级是用数字0-139来表示的,分为两类:
         99-1:实时优先级,由内核维护(数字越大,优先级越高)

        100-139:静态优先级,使用nice值来调整(数字越小,优先级越高);

  • Nice值
        -20,19对应静态优先级100-139

  • Big O
        时间复杂度,用时和规模的关系
          O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
            

4.进程内存:  

  • Page Frame: 页框,用存储页面数据,存储Page 4k;

  • LRU:Least Recently Used 近期最少使用算法,释放内存;

        注:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,                      操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

  • 物理地址空间和线性地址空间;

  • MMU(内存管理单元):负责转换线性和物理地址

        注:MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)                中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址以                  及 提供硬件机制的内存访问授权,多用户多进程操作系统。


5.IPC: 进程间通信 Inter Process Communication 

  • 在计算机网络体系中,主机与主机之间的通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信;

  • 同一主机上
          signal:信号指令;
          shm: shared memory 共享内存空间
          semophore:信号量,一种计数器

  • 不同主机上:
          rpc: remote procedure call
          socket: 套接字,IP和端口号


6.Linux内核抢占式多任务


7.进程类型:     

   根据进程与终端的关系可以分为:

  • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关的进程;

  •  前台进程:跟终端相关,通过终端启动的进程;
     注意:两者可相互转化


8.进程状态:

   进程被内核调度的过程中的状态可以分为:

  • 运行态:running

  • 就绪态:ready

  • 睡眠态:

       可中断:interruptable
       不可中断:uninterruptable,
           
通常是指被IO阻塞的过程,等待IO满足之前无法继续运行。

  • 停止态:stopped,暂停于内存中,但不会被调度,除非手动启动;

  • 僵死态:zombie,结束进程,父进程结束前,子进程不关闭

9.进程的分类:

  • CPU-Bound:CPU密集型,非交互;

  • IO-Bound:IO密集型,交互;

  • 根据在linux不同模式下运行分为:

       核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。
       用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。          

  • 如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。


10.进程与线程的关系:

  • 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位

  • 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

  • 进程——资源分配的最小单位,线程——程序执行的最小单位

  • 从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作


参考资料:《Linux内核设计与实现》《深入理解Linux内核》




二、进程的系统管理工具

  • Linux系统状态的查看及管理工具
     pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill          pkill, job, bg, fg, nohup    

  •  CentOS 5:SysV init

     CentOS 6:upstart

     CentOS 7:systemd
   

1.pstree命令

   pstree-display a tree of processes(显示查看进程树)

   以下为CentOS 6 和 CentOS 7 的区别

[root@CentOS6 ~]# pstree
init─┬─abrtd           #可以看到都是有init生成的
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─bonobo-activati───{bonobo-activat}
     ├─clock-applet
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─2*[dbus-launch]
     ├─devkit-power-da
     ├─dhclient
     ├─gconf-im-settin
     ├─gconfd-2
[root@centos7 ~]# pstree
systemd─┬─NetworkManager─┬─2*[dhclient]
        │                └─2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─alsactl
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─chronyd
        ├─crond
        ├─cupsd
        ├─dbus-daemon
        ├─gssproxy───5*[{gssproxy}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]


2./proc:内核中的状态信息

  Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中   

  • Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

  • 内核参数:
        可设置其值从而调整内核运行特性的参数,在/proc/sys/下;
        状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;

  • 参数:模拟成文件系统;

  • 进程:
         /proc/#:
              #:PID
      

wKioL1fSaF-jS6pgAACz_p36FR8002.png


2.启动进程的方式:

   系统启动过程中自动启动:与终端无关的进程;

      用户通过终端启动:与终端相关的进程




三、显示系统当前进程的运行情况

psprocess state 

      ps-report a snapshot of the current processes  


1.使用ps来查看进程信息

  • 语法:ps[OPTION]…

  • 支持三种选项:
       UNIX选项 如 -a
       BSD选项  如 a
       GUN选项  如 –help

  • 选项和参数

      默认显示当前终端中的进程;
      a 所有与终端相关的进程
      x 所有与终端无关的进程
      
    u 显示进程所有者的信息;

      f 显示进程的父进程;
      o 属性… 选项显示定制的信息

示例如下:

[root@CentOS6 1]# ps a
   PID TTY      STAT   TIME COMMAND
  2024 tty2     Ss+    0:00 /sbin/mingetty /dev/tty2
  2026 tty3     Ss+    0:00 /sbin/mingetty /dev/tty3
  2028 tty4     Ss+    0:00 /sbin/mingetty /dev/tty4
  2030 tty5     Ss+    0:00 /sbin/mingetty /dev/tty5
  2032 tty6     Ss+    0:00 /sbin/mingetty /dev/tty6
  2105 tty1     Ss+    0:00 -bash
  3922 pts/1    Ss+    0:00 /bin/bash
  4864 pts/2    Ss     0:00 -bash
  5142 pts/2    R+     0:00 ps a
[root@CentOS6 1]# ps
   PID TTY          TIME CMD
  4864 pts/2    00:00:00 bash
  5144 pts/2    00:00:00 ps

2.常用组合之一:aux

[root@CentOS6 1]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19344  1632 ?        Ss   08:27   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    08:27   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:27   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    08:27   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    08:27   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    08:27   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    08:27   0:18 [events/0]
root          8  0.0  0.0      0     0 ?        S    08:27   0:00 [events/0]
root          9  0.0  0.0      0     0 ?        S    08:27   0:00 [events_long/0]
root         10  0.0  0.0      0     0 ?        S    08:27   0:00 [events_power_ef]
root         11  0.0  0.0      0     0 ?        S    08:27   0:00 [cgroup]
root         12  0.0  0.0      0     0 ?        S    08:27   0:00 [khelper]

首行代表的含义如下:

USER:进程的发起者;
PID: 进程号;
%CPU:进程使用掉的cpu资源百分比;
%MEM:进程所占的物理内存百分比;
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSidentSize, 常驻内存集
STAT:进程状态
    R:running
    S: interruptable sleeping 可中断睡眠
    D: uninterruptable sleeping 不可中断睡眠
    T: stopped 停止状态
    Z: zombie  僵死态
    +: 前台进程
    l: 多线程进程
    N:低优先级进程
    <: 高优先级进程
    s: session leader,会话(子进程)发起者;
 START:进程被触发的时间;
 TIME: 进程实际使用cpu的时间;
 COMMAND:触发此进程的命令


3.常用组合之二:-ef

     -e: 显示所有进程

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

[root@CentOS6 1]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 08:27 ?        00:00:01 /sbin/init
root          2      0  0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0 08:27 ?        00:00:00 [migration/0]
root          4      2  0 08:27 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 08:27 ?        00:00:00 [stopper/0]
root          6      2  0 08:27 ?        00:00:00 [watchdog/0]
root          7      2  0 08:27 ?        00:00:20 [events/0]
root          8      2  0 08:27 ?        00:00:00 [events/0]
root          9      2  0 08:27 ?        00:00:00 [events_long/0]
root         10      2  0 08:27 ?        00:00:00 [events_power_ef]
root         11      2  0 08:27 ?        00:00:00 [cgroup]
root         12      2  0 08:27 ?        00:00:00 [khelper]
root         13      2  0 08:27 ?        00:00:00 [netns]
root         14      2  0 08:27 ?        00:00:00 [async/mgr]

首行代表的含义:

UID/PID/PPID: 代表该进程的发起者/进程号/父进程号;
C:            代表cpu的使用率,单位为百分比;
STIME:        表示进程的启动时间,就是指从什么时候启动的进程;
TTY: 登陆者的终端位置,远程登录则显示pts/n,本地登录的显示ttyn,?表示系统进程
TIME:表示实际花费cpu运行时间,不是系统时间;
CMD: command的缩写,触发此命令的进程


4.常用组合之三:-eFH

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

            C:cpu utillization(cpu使用率)

            PSR:运行于哪颗cpu之上

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

[root@CentOS6 1]# ps -eFH
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 08:27 ?        00:00:00   [migration/0]
root          1      0  0  4836  1632   0 08:27 ?        00:00:01 /sbin/init
root        581      1  0  2709   952   0 08:27 ?        00:00:00   /sbin/udevd -d
root       2033    581  0  2708   940   0 08:27 ?        00:00:00     /sbin/udevd -d
root       2034    581  0  2708   920   0 08:27 ?        00:00:00     /sbin/udevd -d
root       1525      1  0  6899   868   0 08:27 ?        00:00:00   auditd
root       1559      1  0 62288  1696   0 08:27 ?        00:00:00   /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
rpc        1610      1  0  4745   892   0 08:27 ?        00:00:00   rpcbind
dbus       1630      1  0  5559  1700   0 08:27 ?        00:00:00   dbus-daemon --system
rpcuser    1652      1  0  5838  1380   0 08:27 ?        00:00:00   rpc.statd
root       1687      1  0 47243  3360   0 08:27 ?        00:00:00   cupsd -C /etc/cups/cupsd.conf

常用组合之四 :-eo axo

  • o field1,field2…:自定义要显示的字段,以逗号分隔

  • 常用的字段:pid,ni,pri,pcpu,stat,comm,tty,ppid

        ni:  nice值
        priority:优先级
        psr: processor, CPU编号
        rtprio: 实时优先级

示例如下

[root@CentOS6 1]# ps -eo pid,tty,ni,comm
   PID TT        NI COMMAND
     1 ?          0 init
     2 ?          0 kthreadd
     3 ?          - migration/0
     4 ?          0 ksoftirqd/0
     5 ?          - stopper/0
     6 ?          - watchdog/0
     7 ?          0 events/0
     8 ?          0 events/0
     9 ?          0 events_long/0
    10 ?          0 events_power_ef
    11 ?          0 cgroup



四、搜索进程


1.最灵活:ps选项| 其它命令

   如下所示:

[root@CentOS6 ~]# ps aux |grep postfix
root       1945  0.0  0.3  80896  3436 ?        Ss   08:27   0:00 /usr/libexec/postfix/master
postfix    1952  0.0  0.3  81144  3440 ?        S    08:27   0:00 qmgr -l -t fifo -u
postfix    5960  0.0  0.3  80976  3400 ?        S    21:48   0:00 pickup -l -t fifo -u
root       5971  0.0  0.0 103320   944 pts/2    S+   21:50   0:00 grep --color=auto postfix

2.pgrep,pkill 

   按预定义的模式检索,显示指定的进程信息

  语法pgrep[options] patter

 选项:

      -u uid: effective user,生效者

      -U user: real user,显示以指定用户身份运行的进程;

[root@CentOS6 ~]# pgrep -U postfix
1952
5960

      -t terminal: 与指定终端相关的进程

      -l: 显示pid和进程名

      -a: 显示完整格式的进程名

[root@centos7 ~]# pgrep -U postfix -l
1180 qmgr
2896 pickup
[root@centos7 ~]# pgrep -U postfix -a
1180 qmgr -l -t unix -u
2896 pickup -l -t unix -u

      -P pid: 显示父进程为此处指定的进程的进程列表

[root@centos7 ~]# ps -eFH |grep sshd
root       2236   1088  0 36394  5572   0 14:34 ?        00:00:02     sshd: root@pts/1
[root@centos7 ~]# pgrep -P 1088
2236

    直接按模式搜索:

[root@centos7 ~]# pgrep ssh  #按ssh 开头的的进程搜索
1088
2236
[root@centos7 ~]# pgrep ss
821
1088
2236
[root@centos7 ~]# pgrep http

3.pidof 命令

  根据进程名取其pid

  语法:pidof PROGRAM(给定命令行程序)

[root@centos7 ~]# pidof sshd
2236 1088



五、进程管理工具

1.uptime 命令

  • 显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1);

  • 系统平均负载:指在特定时间间隔内运行队列中的平均进程数;

  • 如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题;

  • 如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

示例如下:

[root@centos7 ~]# uptime
 22:22:11 up 13:54,  2 users,  load average: 0.00, 0.01, 0.05


2.top命令

   – display Linux processes

     相对于ps而言,ps显示的是某个时间点的进程状态信息,然而在实际的运用当中,我们可能需要动态持续监控进程的运行状态,top命令就可以实现这一功能。

top - 22:29:39 up 14:02,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 359 total,   2 running, 357 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1001332 total,   660132 free,   157192 used,   184008 buff/cache
KiB Swap:  2098172 total,  2098172 free,        0 used.   678584 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                           
  2982 root      20   0  146276   2268   1424 R  0.3  0.2   0:00.09 top                                                                                               
     1 root      20   0   41340   3812   2396 S  0.0  0.4   0:03.32 systemd                                                                                           
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd                                                                                          
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.51 ksoftirqd/0                                                                                       
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.32 kworker/u256:0                                                                                    
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                                                       
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                                            
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0                                                                                           
    10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/1                                                                                           
    11 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/2                                                                                           
    12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/3                                                                                           
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/4                                                                                           
    14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/5                                                                                           
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/6                                                                                           
    16 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/7                                                                                           
    17 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/8

1)排序:
     P:以占据cpu百分比排序;
     M:以占据内存百分比排序;
     T:累计占用cpu时间排序
2)首部信息:
     uptime信息:l 命令 是否显示;
     tasks及cpu:t 命令 是否显示;
     内存信息:  m 命令 是否显示;
3)退出命令:    q
  刷新时间间隔:s
  终止指定进程:k
4)选项:
      -d #:指明延迟时长,单位为妙;
      -n #:显示的批次数量;
      -b :batch,批次显示;

每一行代表的含义如下:

第一行:uptime信息
   1.系统当前的时间,即:22:29:39
   2.系统启动到现在所经过的时间,即:up 14:02
   3.当前已登录系统的用户数,即:2 users
   4.系统在1,5,15分钟的平均负载,值越小表示系统越空闲,如果高于1,就需要注意当前系统负载过高。
   
第二行:
   显示的是目前进程的总量与个别程序在什么状态(running,sleeping,stopped,zombie),需要注意的是最后的zmobie值,如果不是0就要查看下哪个进程处于僵死状态;
 
第三行:
   显示的是cpu的整体负载,如果说是多核心的cpu,可以按下数字1来切换成不同cpu的负载率;
   us:user space用户运行程序占用CPU的百分比;
   sy:system (kernel space)用于运行内核占用CPU百分比;
   ni:nice用户进程空间所改变优先级的进程占用CPU的百分比;
   id:idle空闲CPU百分比;
   wa:wait io 等待I/O花费时间;
   hi:hardware interrupt 硬件中断占用CPU百分比;
   si:software interrupt 软件中断占用CPU百分比;
   st:stolen,被虚拟机“偷走”的百分比
   
第四行:
  表示物理内存的使用情况;
第五行:
  表示交换分区的使用情况;
第六行:
  这里默认是空白显示,当在top程序当中输入命令时,显示状态的地方,这里可以输入的命令有:
   P:以占据CPU百分比大小排序;
   M:以占据Memory空间大小排序;
   T:CPU累计占用时间排序;
   l:是否显示系统负载行;
   t:是否显示进程摘要信息及CPU负载状态;
   1:这里是数字1,平均或单独显示CPU的负载状态;
   m:是否显示内存相关的状态信息;
   q:退出命令;
   s:修改延迟时长;
   k:终止指定进程
   
top命令行代表含义
   PID: 每个进程ID;
   USER:进程所属的使用者;
   PR:  Priority的简写,进程的优先级,越小优先级越高;
   NI:  Nice的简写,与Priority有关,也是越小越早被运行;
   VIRT:进程需要的虚拟内存大小,而非使用的虚拟内存大小;
   RES: 进程当前使用的内存大小,不包括swap;
   SHR: 进程与其他进程共享的内存大小,可通过RES-SHR来计算进程所占用的物理内存
   S:   进程状态;
   %CPU:CPU的使用率;
   %MEM:物理内存是使用率;
   TIME+:CPU使用时间的累加
   


3.htop命令

   除了top命令外,还有一个top的增强版命令htop,系统默认情况下没有安装,需要epel源来进行安装;(在工作中epel源,直接指定阿里云,网易或者搜狐的镜像网站即可)

[epel]
name=Fedora-epel/7/x86_64
baseurl=http://10.1.0.1/fedora-epel/$releasever/$basearch/                       # 使用的是变量 6和7都适用
gpgcheck=0

  安装好之后,直接通过 # yum install htop 命令进行安装,安装后执行htop命令即可,

  如下:

wKiom1fTfs-xCEpEAAEhHLXQP_k680.png

帮助如下:

wKiom1fThXfAcxccAACKdfToWiU616.png

选项:
  -d #: 指定延迟时间;
  -u UserName: 仅显示指定用户的进程;
  -s COLUME: 以指定字段进行排序;
htop界面所支持的一些交互式命令:
   s: 跟踪选定进程的系统调用;
   l: 显示选定进程打开的文件列表;
   a:将选定的进程绑定至某指定CPU核心;
   t: 显示进程树

详细使用方法参考

   http://www.cnphp6.com/archives/65078

   https://linux.cn/article-3141-1.html


六、内存工具

 动态显示系统资源的使用情况,这些资源包括:内存、磁盘、网络、cpu等资源

1.vmstat命令:虚拟内存信息

   vmstat[options] [delay [count]]

示例:  

[root@centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 458712   1372 295840    0    0     4     0   29   24  0  0 99  0  0
[root@centos7 ~]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 458664   1372 295840    0    0     4     0   29   24  0  0 99  0  0
 0  0      0 458664   1372 295840    0    0     0     0   21   21  0  0 100  0  0
 0  0      0 458664   1372 295840    0    0     0     0   21   13  0  0 100  0  0

  每一行所代表的含义:

  • procs:
      r:等待运行的进程的个数,CPU上等待运行的任务的队列长度;
      b:处于不可中断睡眠态的进程个数;被阻塞的队列的长度;

  • memory:
      swpd: 交换内存的使用总量;
      free:空闲物理内存总量;
      buffer:用于buffer的内存总量;
      cache: 用于cache的内存总量;  

  • swap:
      si:数据进入swap中的数据速率(kb/s);
      so:数据离开swap的速率(kb/s);

  • io:
      bi:从块设备读入数据到系统的速度(kb/s);

      bo:保存数据至块设备的速率(kb/s);

  • system:
      in:中断速率,每秒被终端的次数;
      cs:上下文(进程)切换的速率;  

  • cpu:

      us:user space 用户运行程序占用CPU的百分比;
      sy:system(kernel space)用于运行内核占用CPU的百分比;

      id:idle 空闲CPU百分比;
      wa:wait io 等到I/O花费的时间;  

      st:stolen,被虚拟化技术偷走的百分比;

选项:

     -s:显示内存统计数据

[root@centos7 ~]# vmstat -s
      1001332 K total memory
       245032 K used memory
       188496 K active memory
       178356 K inactive memory
       458940 K free memory
         1372 K buffer memory
       295988 K swap cache
      2098172 K total swap
            0 K used swap
      2098172 K free swap
         8111 non-nice user cpu ticks
           36 nice user cpu ticks
        24887 system cpu ticks
      7004201 idle cpu ticks
         3772 IO-wait cpu ticks
            0 IRQ cpu ticks
          279 softirq cpu ticks
            0 stolen cpu ticks
       245987 pages paged in
        39707 pages paged out
            0 pages swapped in
            0 pages swapped out
      1998930 interrupts
      1654583 CPU context switches
   1473380853 boot time
         4787 forks



2.pmap命令 报告进程的内存映射

 report memory map of a process

 pmap[options] pid[…]

       -x: 显示详细格式的信息;

 如下:

[root@centos7 ~]# pmap 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
00007ff0a5d59000     16K r-x-- libuuid.so.1.3.0
00007ff0a5d5d000   2044K ----- libuuid.so.1.3.0
00007ff0a5f5c000      4K r---- libuuid.so.1.3.0
00007ff0a5f5d000      4K rw--- libuuid.so.1.3.0
00007ff0a5f5e000    224K r-x-- libblkid.so.1.1.0
00007ff0a5f96000   2048K ----- libblkid.so.1.1.0
00007ff0a6196000     12K r---- libblkid.so.1.1.0
00007ff0a6199000      4K rw--- libblkid.so.1.1.0

 另外一种实现:

       # cat /proc/PID/maps

 如下:

[root@centos7 ~]# cat /proc/1/maps
7ff0a5d59000-7ff0a5d5d000 r-xp 00000000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5d5d000-7ff0a5f5c000 ---p 00004000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5c000-7ff0a5f5d000 r--p 00003000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5d000-7ff0a5f5e000 rw-p 00004000 08:03 33782768        /usr/lib64/libuuid.so.1.3.0
7ff0a5f5e000-7ff0a5f96000 r-xp 00000000 08:03 34593175        /usr/li



七、系统监控工具:


1.glances

 glances是一款用于Linux、BSD的开源命令行系统监控工具。能够监视CPU、负载、内存、磁盘I/O、网络流量、文件系统、系统温度等信息。

如下:

wKiom1fTuYSDYq6xAADlAuYhLYc183.png帮助信息如下:

wKioL1fTue2zcpnOAACDJaeZzus929.png常用选项:

    -b: 以Byte为单位显示网卡数据速率

    -d: 关闭磁盘I/O模块

    -f:/path/to/somefile: 设定输入文件位置

    -o:{HTML|CSV}:输出格式

    -m: 禁用mount模块

    -n: 禁用网络模块

    -t #: 延迟时间间隔

    -1:每个CPU的相关数据单独显示

 

C/S模式下运行glances命令

  •  服务模式:

         glances -s -B IPADDR

         IPADDR: 指明监听的本机哪个地址

  • 客户端模式:

         glances -c IPADDR

         IPADDR:要连入的服务器端地址


2.dsate命令:系统监控工具(很重要)

   dstat是一个可以取代vmstat、iostat、netstat和ifstat这些命令的多功能产品。dastat可以很方便的监控系统运行状况并用于基准测试和排除故障。

   如下图所示:

wKioL1fTw_yAwcMGAACmLLSr1QE482.png

 语法: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相关的统计数据;
   --tcp
   --udp
   --unix
   --raw
   --socket
   --ipc
   --top-cpu:显示最占用CPU的进程;
   --top-io: 显示最占用io的进程;
   --top-mem: 显示最占用内存的进程;
   --top-latency: 显示延迟最大的进程

使用参考:

https://linux.cn/article-3215-1.html




八、进程管理工具

   以上都是一些进程的查看、进程资源的获取等命令,接下来是进程的管理,所谓进程的管理就是向进程发送一些控制信号,来完成对进程的管理控制。


  Kill命令

 显示当前系统的信号,以及向进程发送信号指令,以实现对进程的管理。

 1.kill -l [signal]

  显示当前系统可用信号(或者使用man 7 signal)  

   如下:

[root@CentOS6 ~]# 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	
[root@CentOS6 ~]# kill -l 1
HUP

2.每个信号的表示方法有三种:

      1)信号的数字标识;如 1

      2)信号的完整名称;如 SIGHUB

      3)信号的简写名称;如 HUB

3.向进程发送信号:

      kill [-s signal|-SINGAL]pid…

[root@CentOS6 ~]# ps aux |grep httpd  
root       7654  0.0  0.3 186052  3920 ?        Ss   06:02   0:00 /usr/sbin/httpd
apache     7658  0.0  0.2 186052  2516 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7659  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7660  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7661  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7662  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7663  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7664  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
root       7697  0.0  0.0 103316   844 pts/0    S+   06:06   0:00 grep --color=auto httpd
[root@CentOS6 ~]# kill -s 15 7660
[root@CentOS6 ~]# ps aux |grep httpd
root       7654  0.0  0.3 186052  3920 ?        Ss   06:02   0:00 /usr/sbin/httpd
apache     7658  0.0  0.2 186052  2516 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7659  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7661  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7662  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7663  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
apache     7664  0.0  0.2 186052  2500 ?        S    06:02   0:00 /usr/sbin/httpd
root       7700  0.0  0.0 103316   848 pts/0    S+   06:06   0:00 grep --color=auto httpd

4.常用的信号:

  • SIGHUP,1: 无须重新启动进程而让其重读配置文件,并生效;

  • SIGINT,2: 打断正在运行的进程;相当于Ctrl+c;

  • SIGKILL,9: 强行终止(杀死)正在运行的进程;

  • SIGTERM,15:安全终止正在运行的进程;

  • SIGCONT,18:继续运行指定的进程;

  • SIGSTOP,19:暂停进程;


killall命令

  杀死所有的进程

  killall [-SIGNAL] program

[root@CentOS6 ~]# killall httpd
[root@CentOS6 ~]# ps aux |grep httpd
root       7759  0.0  0.0 103316   848 pts/0    S+   06:30   0:00 grep --color=auto httpd



第二篇:作业管理(job control)


Linux的作业控制


1.job:

    前台作业(foreground):通过终端启动,且启动后一直占据终端

    后台作业(background):可通过终端启动,但启动后即转入后台运行(释放终端)


2.如何让作业运行于后台?

   (1) 运行中的作业:

          Ctrl+z

         注意:送往后台后,作业会转为停止态;

   (2) 尚未启动的作业:

         # COMMAND &

  注意:

     ◎此类作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。      ◎如果希望送往后台后,剥离与终端的关系:

         # nohup COMMAND &


3.查看所有作业

    # jobs

[root@centos7 ~]# jobs
[1]-  Stopped                 ping 10.1.252.153
[2]+  Stopped                 vim /tmp/abc.txt

4.作业控制:

# fg[[%]JOB_NUM]:把指定的后台作业调回前台;

# bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;

# kill [%JOB_NUM]:终止指定的作业;(百分号和作业号是不可以省略的)

  示例:

[root@CentOS6 ~]# jobs
[1]-  Stopped                 ping 10.1.252.161
[2]+  Stopped                 htop
[root@CentOS6 ~]# kill %1

[1]-  Stopped                 ping 10.1.252.161
[root@CentOS6 ~]# jobs
[1]-  Terminated              ping 10.1.252.161
[2]+  Stopped                 htop
[root@CentOS6 ~]# jobs
[2]+  Stopped                 htop

5.进程优先级

  • 可通过nice值调整的优先级范围:100-139;

  •  nice值分别对应于:-20,19;

  • 进程启动时默认的nice值为0,优先级为120;

  • 只有根用户才能降低nice值(提高优先性);

调整进程的nice值的方法

   1)对于尚未启动的进程

      # nice -n N COMMAND :N表示nice值,范围 -20~19;

       仅管理员可调低nice值

   2)对于已经启动并处于运行中进程的nice值

      # renice [-n] N PID

   3)查看nice值和优先级

      # ps axo pid,comm,ni,priority

示例:

[root@CentOS6 ~]# nice -n -5 htop
[root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop
  8275 htop             -5  15
[root@CentOS6 ~]# renice -n -3 8275
8275: old priority -5, new priority -3
[root@CentOS6 ~]# ps axo pid,comm,ni,priority |grep htop
  8275 htop             -3  17

 

原创文章,作者:zhumengxiaotao,如若转载,请注明出处:http://www.178linux.com/45616