第7章:进程及相关命令

 进程的基本概念

 

复制代码
进程的基本概念;进程内存;
-----------------------------------------------------------------------------
进程的基本概念
内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
process:运行中的程序的一个副本,是被载入内存的一个指令集合
    进程ID(process ID,PID)号码用来标记各个进程
    UID,GID,SELinux语境决定对文件系统的存取和访问权限
    通常从执行进程的用户来继承
    存在生命周期
task strut:linux内核存储进程信息的数据结构格式
task list:多个任务的task struct组成的链表
进程创建:
    init:第一个进程
            父子关系
    进程:都是由其父进程创建,CoW 写时复制
            fork(),clone()

linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
程序是磁盘上的静态文件;进程是动态的, 进程结束时,在内存中也就消失了;进程和程序是多对一的形式

写时复制(cow:copy on write):父进程生成子进程时,子进程和父进程是占用同一个内存空间的;当子进程发生数据修改时,才会为子进程重新开辟一个内存空间
-----------------------------------------------------------------------------
进程内存:
    Page Frame:页框,用于存储页面数据,存储page 4k(磁盘上存放文件的单位是block,内存中存放文件的单位是page)
    LRU算法:Least Recently Used近期最少使用算法,释放内存(LRU是缓存的基本算法)
        内存有很大的一部分空间用于缓存,缓存能有效提升工作效率;缓存不可能占用全部的内存空间,当缓存的空间被挤爆时,还要缓存新内容时,这时就要使用LRU机制释放内存,缓存新内容
    物理地址空间和线性地址空间
    MMU:Memory Managerment Unit负责转换线性和物理地址
    TLB:Translation Lookaside Buffer翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
IPC:Inter Process Communication
    同一主机:
        signal:信号
        shm:shared memory
        semaphore:信号量,一种计数器
    不同主机:
        socket:IP和端口号
        RPC:remot procedure call
        MQ:消息队列,Kafka,ActiveMQ
进程的基本概念;进程内存;
复制代码

 

复制代码
进程优先级;进程的基本状态与切换;进程的创建与终结(孤儿进程、僵尸进程)
---------------------------------------------------------------
每个进程都会有相应的优先级,优先级决定程序何时运行。优先级值越低,优先级就越高,就越快被调度程序选中。
在linux系统中,进程优先级的取值范围是0-139,值越小,优先级越高;这个值又是由另外两个值组成的:
    一个是代表实时进程(realtime)优先级范围是[0,99],
    另外一个是代表非实时进程,取值范围是[100,139]。
动态优先级:实时进程优先级[0,99],该区间被称为动态优先级,优先级随着进程执行情况的变化而改变,以便获得更好的调度性能。
静态优先级:代表非实时进程优先级[100,139],被称为静态优先级,该值不会随着时间而进行改变,但系统可以通过nice命令来进行修改。

进程默认启动时,nice优先级为0,优先级为120;只有root用户才能降低nice值(提高优先性)

ps命令中,PRI的取值范围为[-40,99],也就是说,ps中PRI值为80等价于nice值为0,等价于静态优先级的120。NI的取值范围为[-20,19],对应到PRI的[60,99](猜测:当PRI小于60时,NI无法显示,即显示'-')
注意:ps命令中PRI的取值范围为[-40,99];但是ps在指定显示属性时,PRI的取值范围为[139,0]。即命令ps -lf中某进程PRI值为80,该进程使用命令ps -o pri,cmd查看时,PRI值为19

在top中,实时优先级的[0,99]没有具体的表示。PR取值为[0,39],对应静态优先级[100,139]。NI取值范围[-20,19]对应静态优先级[100,139]。
---------------------------------------------------------------
进程的基本状态
创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
执行状态:进程处于就绪状态被调度后,进程进入执行状态
阻塞状态:正在执行的进程由于某些事件(I/O事件,申请缓存区失败)而暂时无法运行,进程收到阻塞。在满足请求时进入就绪状态等系统调用
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

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

---------------------------------------------------------------
进程的创建与终结(孤儿进程、僵尸进程)
创建一个进程:
    当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux内核并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。

子进程的终结(termination)【孤儿进程、僵尸进程】:
    当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在内核里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核中取出子进程的退出信息,并清空该信息在内核中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

    一个糟糕的程序也完全可能造成子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。
进程优先级;进程的基本状态与切换;进程的创建与终结(孤儿进程、僵尸进程)
复制代码

 

复制代码
linux进程的前后台运行管理;linux命令行开启后台多进程并行运行
------------------------------------------------------------------------------------
linux进程的前后台运行管理
前台进程:通过终端启动,且启动后一直占据终端
后台进程:可通过终端启动,但启动后即转入后台运行(释放终端)

让进程运行于后台的方式(不剥离与终端的联系):
    1.运行中的进程:ctrl+z
    2.启动进程时添加&,即command &
    注意:通过这两种方式将进程转到后台运行,但其依然与终端相关;退出终端后,这些后台进程将被关闭。
让进程运行于后台的方式(剥离与终端的联系):
    1.bohup command &>/dev/null &
        现象:1.使用终端开启该后端进程时,该进程是该终端下的子进程;当终端关闭后,该进程已变成进程1的子进程了。
    2.screen;command;screen -r(恢复到screen进程中)

进程前后台管理命令:
    0.查看当前终端所有进程
        jobs        #job ID,不同于进程ID
    1.以后台运行的方式开启进程:
        command &
    2.将正在运行的进程转入到后台运行(前台-->后台休眠)
        ctrl+z;kill -19      
    3.让送往后台的进程在后台继续运行(后台休眠-->后台运行)
        bg;kill-18
    4.把指定的后台进程调回前台(后台-->前台)
        fg(frontgroud)      
    5.发送信号到指定的进程;默认杀死进程
        kill(kill默认使用进程ID的方式,也支持jobID的方式,例如kill  %jobID)                  

------------------------------------------------------------------------------------
linux命令行开启后台多进程并行运行:
    1.将命令or脚本写入脚本
        cat test.sh
        f1.sh&
        f2.sh&
        f3.sh&
    2.命令行运行:(f1.sh&);(f2.sh&);(f3.sh&)
    3.命令行运行:{f1.sh& f2.sh& f3.sh&}
    错误用法:ping 127.0.0.1;ping 127.0.0.2;ping 127.0.0.3;(这种方式其实是逐个运行)
linux进程的前后台运行管理;linux命令行开启后台多进程并行运行
复制代码

 

相关命令

复制代码
我的性能分析工具分类
进程性能分析工具:
    ps命令
    pmap命令
    top命令
    htop命令:界面内容均类似top
    glances命令:界面内容均类似top,支持远程查看其它设备的进程情况
    iotop命令:界面类似top,但展示内容重点不同,用来显示实时的磁盘活动。

系统性能分析工具:
    uptime命令
    free命令
    vmstat命令:属于sysstat包。可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
    iostat命令:属于sysstat软件包。iostat工具将对系统的磁盘操作活动进行监视。
    dstat 命令:是一个用来替换 vmstat、iostat、netstat、nfsstat 和 ifstat 这些命令的工具
我的性能分析工具分类
复制代码

 pstree命令(遗漏命令)

复制代码
ps命令;ps命令常用示例;ps命令详解(BSD风格);ps命令详解(unix风格)
================================================
ps(process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
    默认显示当前终端中的进程
ps命令支持3种选项:unix选项、BSD选项、GNU选项
注意:不同风格的命令对应的参数和显示参数的意义可能是不同的!


ps命令用法我的总结
ps命令查询可以使用unix风格或BSD风格,但两者不能混合使用!
1.显示指定信息,ps+参数即可(此处参数既可以unix风格,也可以BSD风格)
2.显示自定义信息,ps+参数(携带参数o或者-o)+指定属性
    ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm,cmd 
    属性名即ps显示的属性(小写即可,大写不识别。。。)
3.显示的信息根据指定属性进行排序 k或者--sort
    ps -ef --sort -time|head
    ps aux k -time |head 
    ps aux --sort -time |head

================================================
ps命令常用示例:
    ps aux
    ps -ef
    ps -eFH
    ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm,cmd 

    ps -x                   #查询当前用户拥有的所有进程
    ps -fU apache           #显示指定用户名(RUID)或用户ID的进程
    ps -fU 48               #显示指定用户名(RUID)或用户ID的进程
    ps -fu wang             #显示指定用户名(EUID)或用户ID的进程
    ps -fu 1000             #显示指定用户名(EUID)或用户ID的进程
    ps -U root -u root      #查看以root用户权限(实际和有效ID)运行的每个进程
    ps -fG nigix            #列出某个组拥有的所有进程(实际组ID:RGID或名称)
    ps -fg mysql            #列出有效组名称(或会话)所拥有的所有进程
    ps -fG 27               #列出有效组名称(或会话)所拥有的所有进程
    ps -fp 1234             #通过进程ID来显示所属的进程
    ps -f --ppid 1234       #以父进程ID来显示其下的所有进程
    ps -fp 1204,1239,1263   #显示指定PID的多个进程
    ps -ft pst/0            #按tty显示所属进程(按终端来显示所属进程)

    ps -C CMD1,CMD2...      #根据CMD来查找进程,但是这个CMD是有坑的。例如某具有执行权限的脚本,
                                test.sh    ----对应CMD--->test.sh
                                ./test.sh  ----对应CMD--->test.sh
                                bash ./test.sh  ----对应CMD--->bash
                                test.sh(无shebang)----对应CMD--->bash

    ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime       #显示指定线程的指定属性
    ps -p 1244 -o comm=                                 #根据进程ID查找进程名称
    ps -C sshd,bash                                     #根据进程名称显示指定进程及子进程
    ps -C httpd,sshd -o pid=                            #根据进程名称查找进程,输出pid
    ps -eo comm,etime,user |grep nginx                  #检查一个进程的执行时间

    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem |head    #查看进程的指定属性,按内存开销倒序排序
    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu |head    #查看进程的指定属性,按cpu开销倒序排序
    watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem |head' #每秒执行一次ps命令

    ps -eM                      #显示安全信息
    ps --context                #显示安全信息
    ps -eo euser,ruser,fuser,f,comm,label  #以指定格式显示进程的安全信息

================================================
linux ps命令详解(BSD风格)ps [ajluvx] [p pid] [U userid]  
linux ps命令详解(BSD风格)源文档 <http://www.51gjie.com/linux/1008.html> 
参数
    a 与任何用户标识和终端相关的进程
    e 所有进程(包括守护进程)
    p pid 与指定PID相关的进程
    U userid 与指定用户标识userid相关的进程
    ax 显示所有的进程
    aux 显示所有进程,完整输出
    ----------
    a   选项包括所有终端中的进程
    x   选项包括不连接终端的进程
    u   选项显示进程所有者的信息
    f   现象显示进程树,相当于 --forest
    k|--sort     根据属性进行排序;属性前有'-',表示倒序
    o   选项显示定制的信息。pid、cmd、%cpu、%mem
    L   显示支持的属性列表

显示参数
    %CPU CPU(处理器)使用百分比
    %TIME 真实内存使用百分比
    CMD 正被执行的命令的名称
    COMMAND 正被执行的命令的完整名称
    CPU 短期CPU使用(调度)
    JOBC 作业控制统计
    LIM 内存使用限额
    NI nice值,用于设置优先级
    PAGEIN 总的缺页错误(内存管理)
    PGID 进程组号
    PID 进程ID
    PPID 父进程的进程ID
    PRI 调度优先级
    RTPRIO   realtime优先级
    RE 内存驻留时间(单位为秒)
    RSS 内存驻留空间大小(内存管理)
    SESS 会话指针
    SL 睡眠时间(单位为秒)
    STARTED 定时启动
    STAT 状态代码(O,R,S,T,Z)
    TIME 积累CPU时间(进程占用CPU运行时间的总和)
    TSIZ 文本大小(单位为KB)
    TT 控制终端的缩写名称
    TTY 控制终端的完整名称(?表示没有控制终端,该进程为守护进程)
    UID 用户标识
    USER 用户名(猜测应该是EUSER)
    EUSER 用户的临时角色(例如普通用户在使用命令passwd修改密码时,EUSER为root)
    RUSER 真正的用户(例如普通用户在使用命令passwd修改密码时,RUSER为普通用户)
    VSZ 虚拟大小(单位为KB)
    WCHAN 等待通道
    
PS状态码
    D 不可中断睡眠:等待事件结束(通常是I/O)
    R 正在运行或可运行(可运行=正在运行队列中等待)
    S 可中断睡眠:等待事件结束
    T 挂起:由作业控制信号挂起或因为追踪而被挂起
    Z 僵尸进程:终止后,没有父进程可被唤起
    + 前台进程
    l 多线程进程
    L 内存分页并带锁
    N 低优先级进程
    < 高优先级进程
    s session leader,会话(子进程)发起者

=============================================================
linux ps命令详解(unix风格)    ps [-aefFly] [-p pid] [-u userid]
linux ps命令详解(unix风格)源文档 <http://www.51gjie.com/linux/1007.html> 
    -a 与任何用户标识和终端相关的进程
    -e 所有进程(包括守护进程)
    -p pid 与指定PID相关的进程
    -u userid 与指定用户标识userid相关的进程
    -ef 显示所有用户进程,完整输出
    -a 显示所有非守护进程
    -t 仅显示所有守护进程
    -----------
    -C  cmdlist指定命令,多个命令用','分隔
    -L  显示线程
    -e  显示所有进程,相当于-A
    -f  显示完整格式的进程信息
    -F  显示更完整格式的进程信息
    -H  以进程层级格式显示进程相关信息
    -u  userlist 指定有效的用户ID或名称
    -U  userlist 指定真正的用户ID或名称
    -g  gid或groupname 指定有效的gid或组名称
    -G  gid或groupname 指定真正的igd或组名称
    -p  pid 显示指pid的进程
    --ppid pid 显示数据pid的子进程
    -M 显示SELinux信息,相当于Z

显示参数的意义:
    ADDR 进程表中的虚拟地址
    C 处理器利用率(废弃率)
    CMD 正被执行的命令的名称
    F 与进程相关的标志
    NI nice值,用于设置优先级
    PID 进程ID
    PPID 父进程的进程ID
    PRI 优先级(较大的数字=较低的优先级)
    RSS 内存驻留空间大小(内存管理)
    S 状态代码(D,R,S,T,Z)
    STIME 累积系统时间
    SZ 物理页的大小(内存管理)
    TIME 累积CPU时间
    TTY 控制终端的完整名称
    UID 用户标识
    WCHAN 等待通道

用法:
1. 显示所有当前进程
    $ ps -ax     //-a 代表 all,同时加上x参数会显示没有控制终端的进程。
    $ ps -ax | less  //less便于查看
2. 根据用户过滤进程
    $ ps -u webadmin     //要查看用户'webadmin'的进程
3. 通过cpu和内存使用来过滤进程
    $ $ ps -aux | less
    $ ps -aux --sort -pcpu | less    //--sort命令根据CPU使用来升序排序
    $ ps -aux --sort -pmem | less    //--sort命令根据内存使用来升序排序
    $ ps -aux --sort -pcpu,+pmem | head -n 10       //同时根据CPU和内存排序,并显示前10个结果
4. 通过进程名和PID过滤
    $ ps -C java        //显示名为java的进程的信息
    $ ps -f -C Java     //显示进程更多的信息
5. 显示安全信息
    $ ps -eo pid,user,args          //参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User和Args参数显示PID,运行应用的用户和该应用
6. 实时监控进程状态
    $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’        //每秒刷新一次当前的进程状态
    $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’    //限制前20条
ps命令;ps命令常用示例;ps命令详解(BSD风格);ps命令详解(unix风格)
复制代码
复制代码
ps L可以看到所有的参数

查看全部进程的指定信息 #--forest,树形结构展示线程关系
ps -eo user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd --forest

查看指定用户、指定输出 #需要把-e参数去掉
ps -o user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd -u username1,username2
查看指定进程、指定输出 
ps -o user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd -p 36456 
    #-q是快速查询模式,功能和-p非常相似。
    ps -o user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd -q 36456 
查看指定进程的子进程、指定输出 
ps -o user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd --ppid 1758 
按照command进行过滤 #效果不理想,很多python进程都没有过滤出来呀。。。。
ps -o user,tty,pid,ppid,pri,ni,stat,vsz,rss,%cpu,%mem,thcount,cputime,etime,maj_flt,min_flt,cmd -C python

user:运行进程的用户的名称。
tty:与该进程关联的终端设备。如果没有,显示 ?。
pid:进程的ID。
ppid:父进程的ID(创建此进程的进程)。
pri:进程的内核调度优先级。
ni:nice值,从19(最不优先)到-20(最优先),影响进程调度。
stat:进程的状态。包括:
    R:运行中或可运行的(在运行队列中)。
    S:处于休眠状态。
    D:不可中断的休眠状态(通常是I/O)。
    Z:僵尸过程(已终止,但其父进程尚未读取其退出状态)。
    T:停止或被追踪。
    t:在此时间间隔内开始的任务(线程)。
vsz:虚拟内存大小(以KB为单位)。
rss:常驻集大小,即进程使用的实际物理内存的大小(以KB为单位)。
%cpu:自上次更新以来进程使用的CPU时间的百分比。
%mem:进程使用的可用物理内存的百分比。
thcount:当前进程中的线程数量。
cputime:进程已使用的总CPU时间(格式通常为 [小时:]分钟:秒)。
etime:自进程启动后已过去的时间(格式通常为 [[dd-]hh:]mm:ss)。
maj_flt:主要故障次数,即需从磁盘中恢复才能解决的页面错误。
min_flt:次要故障次数,即不需从磁盘中恢复就能解决的页面错误。
cmd:启动进程的命令行。
对于 thcount,你可以更多地找到这个字段写作 nlwp(number of lightweight processes),这是线程数量的别名。在使用 ps 查看进程相关信息时,使用这些字段可以帮助你更详细地了解各个进程在系统资源使用上的情况。这些数据对于系统管理员和开发人员都是很有用的,可以用于排查性能问题和监控系统负载。


top -b -n 1 -p 114819

----------------------------------------------------
当再次遇到Failed to fork: Resource temporarily时,需要保留线程信息,供分析
ps -eL|awk '{print $1}'|sort -rn|uniq -c|sort -rn >>/tmp/ps.log
ps -eLf >>/tmp/ps.log
ps -ef --forest >>/tmp/ps.log
docker ps >>/tmp/ps.log
我的自定义ps实例240418
复制代码

 

复制代码
top命令;htop命令;glances命令;iotop命令;pmap命令
----------------------------------------------------------------------
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
参数:
    -d 指定刷新时间间隔,默认为3秒;
    -b 显示所有的进程
    -n 刷新多少次后退出
进入top视图后的命令:
    排序
        P   根据 %CPU排序
        M   根据%MEM排序
        T   根据TIME+排序
    首部信息的显示:
        l       是否展示uptime信息
        t       调整显示tasks及cpu信息
        1(数字)cpu信息是否分开展示
        m       调整显示内存信息的样式
    修改刷新时间间隔:s
    终止指定进程:k
    保存文件:W
    退出命令:q
top界面说明:
    us用户空间;sy内核空间;ni调整nice时间;id空闲;wa等待IO时间;hi硬中断;si软终端(模式切换);st虚拟机偷走的时间

----------------------------------------------------------------------
htop命令(top的进阶版本,显示更花俏)(安装htop前需要安装epel源)
参数:
    -d 指定延迟时间;
    -u 仅显示指定用户的进程;
    -s COLUME 以指定字段进行排序
子命令:
    s 跟踪选定进程的系统调用
    l 显示选定进程打开的文件列表
    a 将选定的进程绑定至指定CPU核心
    t 显示进程树

----------------------------------------------------------------------
glances是一个基于python语言开发,可以为linux或者UNIX性能提供监视和分析性能数据的功能。
glances可以理解为更花哨的top
glances支持C/S模式运行,即可以远程查看监控设备
glances需要python的支持,安装glances可以基于epel源,也可以python pip安装
    glances 是一个命令行工具包括如下命令选项:
    -b:显示网络连接速度 Byte/-B @IP|host :绑定服务器端 IP 地址或者主机名称
    -c @IP|host:连接 glances 服务器端
    -C file:设置配置文件默认是 /etc/glances/glances.conf 
    -d:关闭磁盘 I/O 模块
    -e:显示传感器温度
    -f file:设置输出文件(格式是 HTML 或者 CSV)
    -m:关闭挂载的磁盘模块
    -n:关闭网络模块
    -p PORT:设置运行端口默认是 61209 
    -P password:设置客户端 / 服务器密码
    -s:设置 glances 运行模式为服务器
    -t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为 2 秒,数值许可范围:1~32767 
    -h : 显示帮助信息
    -v : 显示版本信息

glances -s -B 192.168.1.1   #开启glances server端
glances -c 192.168.1.1      #开启glances client端,查看192.168.1.1的设备运行情况

----------------------------------------------------------------------
iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。
iotop 监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。
参数:
    -o:只显示有io操作的进程
    -b:批量显示,无交互,主要用作记录到文件。
    -n NUM:显示NUM次,主要用于非交互式模式。
    -d SEC:间隔SEC秒显示一次。
    -p PID:监控的进程pid。
    -u USER:监控的进程用户。

iotop常用快捷键:
    左右箭头:改变排序方式,默认是按IO排序。
    r:改变排序顺序。
    o:只显示有IO输出的进程。
    p:进程/线程的显示方式的切换。
    a:显示累积使用量。
    q:退出。

------------------------------------------------------------------------------------
pmap - report memory map of a process(查看进程的内存映像信息)pmap命令用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。
用法:pmap 进程ID(cat /proc/进程ID/maps;pmaps本质上就是对这个文件进行了整理后显示)
        可以用该命令查看指定进程下的哪个模块占用内存高,异常等等。
    pmap -x 进程ID #显示更多详细信息
                dirty脏数据:在数据库中比较常见,是正处于修改状态的数据,还没修改结束的数据
top命令;htop命令;glances命令;iotop命令;pmap命令
复制代码

 

复制代码
uptime命令;free命令;vmstat命令;iostat命令;dstat命令
------------------------------------------------------------------------------------
uptime命令,显示当前时间,系统已启动时间,当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不超过1)

uptime看到的数值 / 系统CPU个数 == 1 :表示比较良好的运行状态;
uptime看到的数值 / 系统CPU个数 < 1 : 表示系统资源没有被充分的利用,也就是说系统压力不大; 
uptime看到的数值 / 系统CPU个数 > 1 :表示系统的资源已经不够用了,进程在排队,处于过载状态。 即活跃进程数太高,CPU会不够用,就会出现过载情况

------------------------------------------------------------------------------------
free命令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
    -b  以Byte为单位显示内存使用情况。
    -k  以KB为单位显示内存使用情况。
    -m  以MB为单位显示内存使用情况。
    -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。即以人类可读的形式换算数值

    -o  不显示缓冲区调节列。(centos7已不单独buff/cache,所以无-o参数)
    -s<间隔秒数>  持续观察内存使用状况。
    -t  显示内存总和列。
    -V  显示版本信息。

清理缓存:/proc/sys/vm/drop_caches默认是0
# echo 1 > /proc/sys/vm/drop_caches; free pagecache, use
# echo 2 > /proc/sys/vm/drop_caches; free dentries and inodes
# echo 3 > /proc/sys/vm/drop_caches; free pagecache, dentries and inodes

------------------------------------------------------------------------------------
vmstat命令是最常见的Linux/Unix监控工具,属于sysstat包。可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
vmstat命令参考:https://blog.csdn.net/m0_38110132/article/details/84190319

显示参数说明:
    procs(进程):
        r: 可运行(正在运行or等待运行)进程的个数,和核心数有关
        b:处于不可终端睡眠态的进程个数(被阻塞的队列的长度)
    Memory(内存):
        swpd:正在使用虚拟的内存大小,单位k
        free:空闲物理内存大小
        buff:已用的buff大小,对块设备的读写进行缓冲
        cache:已用的cache大小,文件系统的cache
    Swap:
        si:每秒从交换区写入内存的大小(单位:kb/s)
        so:每秒从内存写到交换区的大小
    IO:
        bi:每秒读取的块数(读磁盘),块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes
        bo:每秒写入的块数(写磁盘),块设备每秒发送的块数量,单位是block
        注意:采集数据的表项io中的bi、bo与平常的IO正好相反(详见man vmstat)
    system
        in:每秒中断数,包括时钟中断
        cs:每秒上下文切换数

    CPU(以百分比表示)
        us:用户进程执行消耗cpu时间(user time),us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
        sy:系统进程消耗cpu时间(system time),sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足
        Id:空闲时间(包括IO等待时间),一般来说 us+sy+id=100
        wa:等待IO时间,wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

vmstat命令用法:
    vmstat      #默认采集一次数据
    vmstat 2    #指定每2秒采集一次数据
    vmstat 2 5  #指定每2秒采集一次数据,采集5次后退出

------------------------------------------------------------------------------------
iostat命令属于sysstat软件包。iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析
iostat命令与vmstat命令同属于sysstat软件包,用法也类似:
    iostat          #默认采集一次数据
    iostat 2        #指定每2秒采集一次数据
    iostat 2 5      #指定每2秒采集一次数据,采集5次后退出

----------------------------------------------------------------------
dstat 命令是一个用来替换 vmstat、iostat、netstat、nfsstat 和 ifstat 这些命令的工具,是一个全能系统信息统计工具。
    -c:显示 CPU 系统占用,用户占用,空闲,等待,中断,软件中断等信息。 
    -C:当有多个 CPU 时候,此参数可按需分别显示 cpu 状态,例:-C 0,1 是显示 cpu0 和 cpu1 的信息。 
    -d:显示磁盘读写数据大小。
    -D hda,total:include hda and total。
    -n:显示网络状态。 
    -N eth1,total:有多块网卡时,指定要显示的网卡。 
    -l:显示系统负载情况。 
    -m:显示内存使用情况。 
    -g:显示页面使用情况。 
    -p:显示进程状态。 
    -s:显示交换分区使用情况。 
    -S:类似 D/N。 
    -r:I/O 请求情况。 
    -y:系统状态。 
    --ipc:显示 ipc 消息队列,信号等信息。 
    --socket:用来显示 tcp udp 端口状态。 
    -a:此为默认选项,等同于 - cdngy。 
    -v:等同于 -pmgdsc -D total。 
    --output 文件:此选项也比较有用,可以把状态信息以 csv 的格式重定向到指定的文件中,以便日后查看。
    --tcp
    --udp
    --nunix
    --raw
    --socket
    --ipc
    --top-cpu:显示最占用CPU的进程
    --top-io:显示最占用io的进程
    --top-mem:显示最占用内存的进程
    --top-latency:显示延迟最大的进程
uptime命令;free命令;vmstat命令;iostat命令;dstat命令
复制代码

 

复制代码
查找进程:pgrep命令;pidof命令
----------------------------------------------------------------------
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
-u:effective user,生效者(例如普通用户在使用命令passwd修改密码时,EUSER为root)
-U:real user,真正发起运行命令者(例如普通用户在使用命令passwd修改密码时,RUSER为普通用户)
-t:指定开启进程的终端;
-l:显示进程名称;
-a:显示完整格式的进程名
-P:显示指定进程的子进程
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;


pgrep -lt pts/0     #根据终端查找进程,默认显示进程id,-l显示进程名称
pgrep -at pts/0     #根据终端查找进程,默认显示进程id,-a显示完整格式的进程名称
pgrep "pass.*"      #猜测,名称支持正则的形式

----------------------------------------------------------------------
pidof命令根据确切的程序名称查找进程,显示进程ID
pidof passwd
pidof bash
查找进程:pgrep命令;pidof命令
复制代码
复制代码
操作进程:nice命令;renice命令;kill命令;killall命令;pkill命令
----------------------------------------------------------------------
renice -n -10 2612   #调整指定进程2612的nice优先级为-10
renice -n -100 2612  #调整优先级值超出范围,则调整到最大值
nice -n -5 sleep 100 #运行sleep时,指定nice优先级-5
nice -5 sleep 200    #运行sleep时,指定nice优先级5
nice --5 sleep 200   #运行sleep时,指定nice优先级-5

------------------------------------------------------------------------------------
kill 发送指定的信号到相应进程。默认发送SIGTERM(15)终止指定进程。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制结束进程。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
命令参数:
    -l  信号,如果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
    -a  当处理当前进程时,不限制命令名和进程号的对应关系
    -p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
    -s  指定发送信号
    -u  指定用户 euser
    -U  ruser 真正发起运行命令的用户 
最常用的信号是(man 7 singal):
    信号完整名称;简写名称;信号数字标识;信号含义
    SIGHUP         HUP        1     无需关闭进程而让其重读配置文件
    SIGINT         INT        2     中断(同 Ctrl + C)
    SIGQUIT        QUIT       3     退出(同 Ctrl + \)
    SIGKILL        KILL       9     强制正常停止一个进程
    SIGTERM        TERM       15    正常停止一个进程
    SIGCONT        CONT       18    继续运行(与STOP相反, fg/bg命令)
    SIGSTOP        STOP       19    后台休眠(同 Ctrl + Z)
信号1:无需关闭进程而让其重读配置文件
    假设开启了httpd服务,那么使用ps查看httpd有关的进程,将会有1个进程以及几个子进程。
    现象:当kill -1时,httpd的进程ID无变化,但是子进程的ID均有变化,也就是说子进程都是新起的
    1.当httpd修改了一些配置,此时可以使用kill -1,达到使httpd重载配置的目的
    2.并不是所有的配置都会重载的,例如httpd由原端口80使用新端口8000,kill -1无效
信号15:默认信号为信号15,即kill默认正常杀死一个进程
信号9:强制杀死一个进程,有丢数据的风险,应该尽量避免使用信号9;同时信号9并不是可以杀死所有进程,例如respawn进程(其实本质上是被杀死,然后又重启了一个该进程);信号9看起来不能杀死进程1,实际上进行kill -1 1后,已经造成了伤害,一些respawn进程不会重启了,例如mingetty

kill用法:
    kill -SIGSTOP 1912      #支持信号完整名称
    kill -STOP 1912         #支持信号简写名称
    kill -stop 1912         #不区分大小写
    kill -19 1912           #支持信号数字标识
    kill -l;trap -l        #显示当前系统可用信号

------------------------------------------------------------------------------------
killall sleep #killall命令根据名称批量杀死进程
------------------------------------------------------------------------------------
pkill 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令。
    -o 仅向找到的最小(起始)进程号发送信号 -n 仅向找到的最大(结束)进程号发送信号
    -P 指定父进程号发送信号
    -g 指定进程组
    -t 指定开启进程的终端

pkill  python           #杀死所有python进程
pkill -t pts/0          #按终端杀进程,把终端pts/0的所有进程都杀死(但是不杀死终端)
pkill -9 -t pts/0       #连终端也一起杀死

pkill -t pts/0 python   #杀死终端pts/0下的所有python进程
操作进程:nice命令;renice命令;kill命令;killall命令;pkill命令
复制代码

 

 

复制代码
进程前后台管理命令:job命令;bg命令;fg命令;nohup命令;kill命令

job命令:查看当前终端所有进程
bg命令:让送往后台的进程在后台继续运行
fg命令:把指定的后台进程调回前台
nohup命令:启动一个进程并在后台运行
kill命令:详见本章节的kill命令整理

进程前后台管理命令详见本章节:linux进程的前后台运行管理;linux命令行开启后台多进程并行运行
进程前后台管理命令:job命令;bg命令;fg命令;nohup命令;kill命令
复制代码

 

posted @   雲淡風輕333  阅读(68)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示