此篇文章对进程管理以及性能监控工具做下小结:


    1.首先将介绍跟进程相关的一些概念:

    父进程 子进程 fork() COW(copy-on-write ) 僵尸进程 孤儿进程 静默状态 线性地址空间 虚拟内存 物理内存 MMU swap交换空间

      系统启动后内核会创建第一个进程init--init进程会负责后续用户空间子进程,所以进程都是父子关系:

      父进程通过系统调用fork()函数创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。此时父子进程占用同一段内存空间

      传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下, copy-on-write只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。这种技术使地址空间上的页的拷贝被推迟到实际发生写入的时候,这种优化可以避免拷贝大量根本就不会被使用的数据(地址空间里常常包含数十兆的数据)

     其实不是把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对象的位置,在子进程执行任务期间,父进程处于等待状态,我们称此状态为静默状态

       当子进程工作结束,子进程会变成僵尸进程等待父进程回收,如果出现异常情况,父进程没有回收,子进程将作为僵尸进程长期停留在系统中,而孤儿进程指的是,父进程先退出,其下的子进程我们称为孤儿进程.

       每个进程都会认为自己独占了一段连续的内存空间,如图的第一行,我们称为线性地址空间,即虚拟内存空间,而实际上每一段虚拟内存地址都对应一段物理内存地址,物理内存地址是不连续的 如图2,虚拟内存地址与物理内存地址的映射记录在CPU上一个物理设备MMU(memory management unit)

wKioL1Z-OjnxK64xAAAoh_HxSH0283.png

      如果主机内存不足情况下,linux 内核会将不常用的内存数据放置到磁盘的swap区域中,此时主机性能会下降,swap区域装操作系统中我们可以指定大小,后续我们也可以添加swap容量

        

 基于以上介绍,接下来将介绍PS常用命令组合

    1.常用组合之一:aux

    

[root@training ~]# ps aux | more

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

root         1  0.0  0.1  19356  1540 ?        Ss   21:36   0:01 /sbin/init

root         2  0.0  0.0      0     0 ?        S    21:36   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    21:36   0:00 [migration/0]

root         4  0.0  0.0      0     0 ?        S    21:36   0:00 [ksoftirqd/0]

root         5  0.0  0.0      0     0 ?        S    21:36   0:00 [stopper/0]


USER 进程的属主

PID    进程号

%CPU   占用的CPU使用率

%MEM   占用的内存使用率

VSZ    virtual memory size of the process(KB),此值是线性内存空间,进程认为自己占用的内存空间,并不等于物理内存空间,因为多个虚拟内存空间同时指向同一段物理内存空间,称为共享库.

RSS   "resident set size, the non-swapped physical memory that a task has used" 一些关键性数据是不可以放在swap交换空间,这些数据称为该进程所占用的固定内存量

TTY    进程运行所在的终端 显示? 就是与终端无关的进程或线程

STAT   进程此时的状态

                R:running

                S:interruptable sleeping

                D:uninterruptable sleeping

                T:stopped

                Z: zombie

        

                +:前台进程运行在终端之上的

                l:多线程进程

                N: 低优先级进程

                <: 高优先级进程

                s: session leader

                    

 

常用组合之二:-ef  Unix风格

 

选项

-e:显示所有进程

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

 

 

[root@training ~]# ps -ef

UID        PID  PPID   C    STIME   TTY          TIME  CMD

root         1     0        0   Dec25     ?                   00:00:01 /sbin/init

 

C:cpu utilizationcpu占用的百分比

STIME:启动时间

PPID:      父进程,ppid=0 此进程是过度进程,一般是swap进程

STIME:进程启动的时间

TIME:进程占用CPU的时间



常用组合之三:-eFH

 

选项  -F:显示完整格式的进程信息;与-f 意义基本相同

C cpu utilization

PSR:运行于哪颗CPU之上

-H:以层级结构显示进程的相关信息;

 

[root@training ~]# ps -eFH

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD

root         2     0  0     0     0   0 Dec25 ?        00:00:00 [kthreadd]

root         3     2  0     0     0   0 Dec25 ?        00:00:00   [migration/0]

 

SZ:    size in physical pages of the core p_w_picpath of the process. This includes text, data, and stack space.使用掉的物理内存

PSR:  processor that process is currently assigned to 运行在哪个CPU


常用组合之四:-eo, axo

 

选项        o  field1, field2,...:自定义要显示的字段列表,以逗号分隔,o一定要放在后面;

常用的fieldpid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

ninice值;

prioritypriority,优先级;

rtprioreal time priority,实时优先级;

 

[root@centos7training home]# ps axo pid,command,stat,ni | more

   PID COMMAND                     STAT  NI

     1 /usr/lib/systemd/systemd -- Ss     0

     2 [kthreadd]                  S      0

     3 [ksoftirqd/0]               S      0

     5 [kworker/0:0H]              S<   -20


    

pgrep, pkill命令

            筛选进程信息.筛选出进程信息并杀掉

- look up or signal processes based on name and other attributes

 

pgrep [options] pattern

-u uideffective user

-U uidreal user

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

-l:显示进程名;

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

-P pid:显示此进程的子进程;

 

[root@centos7training home]# pgrep -a -U postfix

1584 pickup -l -t unix -u

1586 qmgr -l -t unix -u

              pkill 参数与pgrep一致,grep后kill掉


Htop命令:


    1.Htop命令是top命令的增强版,基本命令和显示出的字段基本相同

           2. 与 top 相比,htop 包含的优点有:
               1.可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
               2.在启动上,比 top 更快。
               3.杀进程时不需要输入进程号。
               4.htop 支持鼠标操作

 图1:Htop界面鼠标浅蓝色条幅可以自由移动:

wKioL1Z_m7jjuPU2AACQL216AEo969.png

图2:鼠标点击F1进入Help界面

wKiom1Z_m6Di0Ne2AABb_bAZYk4178.png

        Status两个选项:

Virtualiz:虚拟机所占用cpu百分比

Status D disk sleep 指的是 D = uninterruptible sleep,等待磁盘IO完成的睡眠

    当进入htop界面我们可以输入子命令相关相关操作,以下仅列出常用子命令:


l:显示选定的进程打开的文件列表;

s:跟踪选定的进程的系统调用;

t:以层级关系显示各进程状态;

a:将选定的进程绑定至某指定的CPU核心;

F6:指定字段进行排序


l:显示出进程打开的文件列表:

wKiom1Z_nE-Q3WoWAAAzNNAW8oc755.png


a:将进程514 绑定到哪个cpu上:

wKioL1Z_nGfCDA00AAAyNtQ52Dk975.png



  Glances工具

    - A cross-platform curses-based monitoring tool

    与其他工具相比,glances会显示每块网卡和diskIO 

        wKiom1Z_9fTgeqe0AABwJA102e8761.png

        

        

常用选项:

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

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

-m:关闭mount模块;

-n:关闭network模块;

-t #:刷新时间间隔;

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

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

-f  /PATH/TO/SOMEDIR:设定输出文件的路径(不包含文件名);

[root@222 ~]# glances -f /tmp/ -o HTML

   firefox /tmp/glances.html 使用Firefox工具打开html文件


 

C/S模式下运行glances命令:

服务模式:

glances  -s  -B  IPADDR

 

IPADDR:本机的某地址,用于监听;

 

 

客户端模式:

glances  -c  IPADDR

 

IPADDR:是远程服务器的地址;此时客户端可以浏览glances 服务器上的性能监控数据


 

Dstat工具


 Dstat是一款非常强大的性能工具,这里仅列出平日工作中常遇到的参数:

- versatile tool for generating system resource statistics

dstat [-afv] [options..] [delay [count]]

 

wKiom1Z__w-DAy8zAAA1gq-Zp8E036.png

常用选项:

-c --cpu:显示cpu相关信息;

-C #,#,...,total

-d, --disk:显示磁盘的相关信息

-D sda,sdb,...,tobal

-g:显示page相关的速率数据;

-mMemory的相关统计数据

-nInterface的相关统计数据;

 -N eth1,eth2,total

              include eth1 eth2 and total

-p:显示process的相关统计数据;

-r:显示io请求的相关的统计数据;

-s:显示swapped的相关统计数据;

 

--tcp

--udp

--raw

--socket

 

--ipc

 

--top-cpu:显示最占用CPU的进程;

--top-io:最占用io的进程;

--top-mem:最占用内存的进程;

--top-lantency:延迟最大的进程;

    wKiom1Z__ymibFAXAACFNu3zYRQ032.png