Linux进程管理

1 什么是进程    1

1.1 概述    1

1.2 进程的运行环境    1

2 进程的生命周期    1

2.1 程序运行时进程的状态关系    1

3 监控和管理进程    1

3.1 概述    1

3.2 静态监控进程    1

3.2.1 ps aux命令    1

3.2.2 ps aux –sort %cpu | less    1

3.2.3 ps axo user,pid,ppid, %mem,command | grep httpd    1

3.2.4 ps auxf | httpd    1

3.3 动态监控进程    1

3.3.1 top命令    1

3.3.2 ab -c 100 -n 100 http://www.baidu.com.html    1

3.4 系统负载的计算和意义    1

  1. 什么是进程

  2. 概述

    进程是已启动的可执行程序的运行实利,进程有一下组成部分:

  1. 分配内存,已分配内存的地址空间
  2. 安全属性,进程的运行身份和权限
  3. 进程代码,运行一个或多个线程
  4. 进程状态,进程运行后的多种状态
  5. 静态程序,二进制文件,静态/usr/bin/ls,/usr/sbin/sshd
  6. 动态进程,进程运行的过程,有生命周期及运行状态
  1.     进程的运行环境

        1、局部和全局变量

        2、当前的调度上下文

        3、分配给进程使用的系统资源,例如文件描述符,网络端口等

        4、给进程分配相应的PID,UID

  1. 进程的生命周期

  1. 程序运行时进程的状态关系

    1. 父进程复制自己的地址空间创建新的子进程,子进程可以继承父进程(PPID)的环境变量
    2. 每个进程都有自己唯一的ID(PID    )
    3. 进程是由systemd这个父进程派生出来的子进程
    4. 子进程在运行自己的程序代码的时候,父进程往往会进入休眠状态。
    5. 子进程完成程序代码发出退出信号请求。
    6. 子进程已经关闭或释放了其资源环境,剩余的部分称之为僵停(僵尸Zombie
    7. 父进程在子进程退出时收到信号会被唤醒,清理剩余结构,然后继续执行其自己的程序代码
  2. 监控和管理进程

  3. 概述

    1、在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程

    2、在进程运行时,他对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境而改变。

  1. 静态监控进程

    为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的

  1. ps aux命令

    ps命令:静态查看进程的命令

    ps aux:一般使用此命令详细查看进程信息

[root@oldboy ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.8 125352 3884 ? Ss 04:17 0:09 /usr/lib/systemd/systemd --switched-root

root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]

删去部分

  1. USER:运行进程的用户
  2. PID:进程的ID
  3. %CPUCPU的占用率
  4. %MEM:内存占用率
  5. VSZ:占用虚拟内存
  6. RSS:占用实际内存,驻留内存
  7. TTY:进程运行终端
  8. STAT:进程状态

            R:进程运行

            S:可中断睡眠

            D:不可中断睡眠

            Z:僵尸进程

            X:进程已经退出

            T:进程被暂停

            Ss s:进程的领导者,父进程

            S< < :优先级较高的进程

            SN N:优先级较低的进程

            R+ + :表示是前台的进程组

            Sl:以线程方式运行

  9. START:进程的启动时间
  10. TIME:进程占用CPU的总时间
  11. COMMAND:进程文件、进程名
    1. ps aux –sort %cpu | less

--sort:排序

%cpu:按CPU排序

less:分页浏览

 

对进程的CPU进行排序展示

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.8 125352 3884 ? Ss 04:17 0:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]

root 6 0.0 0.0 0 0 ? S 04:17 0:00 [kworker/u256:0]

root 7 0.0 0.0 0 0 ? S 04:17 0:00 [migration/0]

root 8 0.0 0.0 0 0 ? S 04:17 0:00 [rcu_bh]

root 9 0.0 0.0 0 0 ? R 04:17 0:02 [rcu_sched]

root 10 0.0 0.0 0 0 ? S< 04:17 0:00 [lru-add-drain]

root 11 0.0 0.0 0 0 ? S 04:17 0:00 [watchdog/0]

root 13 0.0 0.0 0 0 ? S 04:17 0:00 [kdevtmpfs]

root 14 0.0 0.0 0 0 ? S< 04:17 0:00 [netns]

例如按进程占用内存大小展示ps aux –sort %mem | less

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 2 0.0 0.0 0 0 ? S 04:17 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 04:17 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 04:17 0:00 [kworker/0:0H]

root 6 0.0 0.0 0 0 ? S 04:17 0:00 [kworker/u256:0]

root 7 0.0 0.0 0 0 ? S 04:17 0:00 [migration/0]

root 8 0.0 0.0 0 0 ? S 04:17 0:00 [rcu_bh]

root 9 0.0 0.0 0 0 ? R 04:17 0:02 [rcu_sched]

 

  1. ps axo user,pid,ppid, %mem,command | grep httpd

自定义显示字段

[root@oldboy ~]# ps axo user,pid,ppid,%mem,command | grep httpd

root 20176 1 1.0 /usr/sbin/httpd -DFOREGROUND

apache 20177 20176 0.6 /usr/sbin/httpd -DFOREGROUND

apache 20178 20176 0.6 /usr/sbin/httpd -DFOREGROUND

apache 20179 20176 0.6 /usr/sbin/httpd -DFOREGROUND

apache 20180 20176 0.6 /usr/sbin/httpd -DFOREGROUND

apache 20181 20176 0.6 /usr/sbin/httpd -DFOREGROUND

root 29804 28286 0.2 grep --color=auto httpd

  1. ps auxf | httpd

f:表示显示父、子进程之间的关系

[root@oldboy ~]# ps auxf | grep httpd

root 30047 0.0 0.1 112704 664 pts/0 R+ 16:06 0:00 \_ grep --color=auto httpd

root 20176 0.0 1.0 230376 5164 ? Ss 12:45 0:00 /usr/sbin/httpd -DFOREGROUND

apache 20177 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND

apache 20178 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND

apache 20179 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND

apache 20180 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND

apache 20181 0.0 0.6 230376 3016 ? S 12:45 0:00 \_ /usr/sbin/httpd -DFOREGROUND

用pstree -p | grep httpd 也可以实现

[root@oldboy ~]# pstree -p | grep httpd

|-httpd(20176)-+-httpd(20177)

| |-httpd(20178)

| |-httpd(20179)

| |-httpd(20180)

| `-httpd(20181)

  1. /run/sshd.pid

    这个文件理存放着程序运行时及进程的PID

[root@oldboy ~]# cat /run/sshd.pid

983

 

  1. 动态监控进程

    1. top命令

    top命令可以动态的查看主机运行时间、登录用户数、CPU负载,内存使用、进程等信息

top - 16:18:18 up 12:00, 1 user, load average: 0.00, 0.01, 0.05

Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 481876 total, 75084 free, 95348 used, 311444 buff/cache

KiB Swap: 2097148 total, 2097148 free, 0 used. 337268 avail Mem

 

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

501 root 20 0 298928 6288 4940 S 0.3 1.3 0:56.35 vmtoolsd

1 root 20 0 125352 3884 2604 S 0.0 0.8 0:10.09 systemd

第一行:时间及系统负载

            top;表示系统当前时间        up:表示系统运行时长        

            load average:0.25 0.00 0.00 :分别表示系统5、10、15分钟系统的平均负载

第二行:进程数

        total:表示当前系统总进程数        running:正在运行的进程数        sleeping:睡眠中的进程数

        stoped:已经结束的进程数        zombie:僵尸进程数

第三行:CPU使用率

        us:用户空间占用的CPU百分比    sy:内核空间占用的CPU百分比    

        ni:用户空间内改变过优先级的进程占用的CPU百分比

        id:空闲的CPU百分比    (等于1减去别的进程占用率)    wa:等待输入输出的CPU时间百        比

第四行:内存信息(kb)

        Mem:物理内存总量    free:空闲内存总量        buffers:用作内核缓存的内存量

第五行:交换分区信息(swap)

top [选项]

    h:查看帮助

    z:以彩色信息展示

    l:显示所用CPU的负载

    s:设置刷新时间

    b:高亮显示处于R状态的进程

    M:安内存使用百分比排序输出

    P:按CPU使用百分比排序输出

    R:堆排序进行反转

    f:自定义显示字段

    k:kill掉指定PID进程

    W:保存top环境设置 ~/.toprc

    q:退出top

top:查看实时动态系统运行情况

        -b:批处理模式操作

        -d:屏幕刷新间隔时间

        -p:指定进程

        -n:循环显示的次数

    top交互命令

        h:显示帮助画面,给出一些简短的命令总结说明

        k:终止一个进程

        q:退出程序

        r:重新安排一个进程的优先级别

        s:改变两次刷新之间的延迟时间(单位为s),输入0值为不断刷新,默认是5s

        m:切换显示内存信息

        t:切换显示进程和CPU状态信息;

        c:切换显示命令名称和完整命令行;

        M:根据驻留内存大小进行排序;

        P:根据CPU使用百分比大小进行排序;

        T:根据时间/累计时间进行排序;

        w:将当前设置写入~/.toprc文件中

 

案例:web压力测试

  1. ab -c 100 -n 100 http://www.baidu.com.html

c 100:表示并发数为100个用户

-n 100:表示请求总数为100

http://www.baidu.comindex.html表示请求的目标URL

请求100次,100个并发

  1. dev/zero

    无穷大的文件

    其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个    特定大小的空白文件。

  1. /dev/null

    文件黑洞

    在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢    弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一    个EOF。

  1. 系统负载的计算和意义

进程以及子进程和线程产生的计算指令都会让cpu执行。产生请求的这些进程组成"运行队列",等待CPU执行,这个队列就是系统负载,系统负载是所用CPU的运行队列的总和

[root@oldboy ~]# w

16:32:11 up 12:14, 1 user, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 10.0.0.1 15:31 3.00s 0.11s 0.08s w

假如当前计算机有4个cpu,当前的负载时2.92

cpu1     cpu2    cpu3    cpu4

2.92/4(4个核心)=73%的CPU资源被使用,剩下%27的CPU计算源是空闲的

假设当前的计算机有两个CPU,当前的负载时2.92

2.92/2=146% 已经验证超过了CPU的处理能力

 

原文地址:https://www.cnblogs.com/majinhai/p/9534094.html