1.进程的概念:
程序运行起来就是进程,系统会给进程分配cpu,内存,所属用户和权限....

2.进程的分类
#pstree命令查看进程数,第一列是主进程(systemd)只有一个,第二列是父进程,第三列是子进程,第四列是子子进程,一般进程也就到
第四列
[root@node-10 ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─Walnuts-Main───22*[{Walnuts-Main}]
        ├─abrt-dbus───3*[{abrt-dbus}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─at-spi-bus-laun─┬─dbus-daemon
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───2*[{at-spi2-registr}]
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─boltd───2*[{boltd}]
        ├─colord───2*[{colord}]
        ├─comm_srv───15*[{comm_srv}]
        ├─containerd───15*[{containerd}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon]
        ├─dbus-launch
        ├─dconf-service───2*[{dconf-service}]
        ├─dnsmasq───dnsmasq
        ├─dockerd───12*[{dockerd}]
        ├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
        │                 └─4*[{evolution-addre}]
        ├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
        │                 └─4*[{evolution-calen}]
        ├─evolution-sourc───3*[{evolution-sourc}]
        ├─fwupd───4*[{fwupd}]
        ├─geoclue───2*[{geoclue}]
        ├─gnome-keyring-d───3*[{gnome-keyring-d}]
        ├─gnome-shell-cal───5*[{gnome-shell-cal}]
        ├─goa-daemon───4*[{goa-daemon}]
        ├─goa-identity-se───3*[{goa-identity-se}]
        ├─gsd-printer───2*[{gsd-printer}]
        ├─gssproxy───5*[{gssproxy}]
        ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
        ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
        ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
        ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
        ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
        ├─gvfsd─┬─gvfsd-trash───2*[{gvfsd-trash}]
        │       └─2*[{gvfsd}]
        ├─gvfsd-fuse───5*[{gvfsd-fuse}]
        ├─gvfsd-metadata───2*[{gvfsd-metadata}]
        ├─ibus-portal───2*[{ibus-portal}]
        ├─ibus-x11───2*[{ibus-x11}]
        ├─icsfilesec───icsfilesec───16*[{icsfilesec}]
        ├─irqbalance
        ├─java───112*[{java}]
        ├─2*[java───60*[{java}]]
        ├─ksmtuned───sleep
        ├─libvirtd───16*[{libvirtd}]
        ├─lsmd
        ├─lvmetad
        ├─mission-control───3*[{mission-control}]
        ├─nginx───4*[nginx]
        ├─packagekitd───2*[{packagekitd}]
        ├─pulseaudio───{pulseaudio}
        ├─rngd
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd─┬─sshd───bash───pstree
        │      └─sshd───bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tracker-store───7*[{tracker-store}]
        ├─tuned───4*[{tuned}]
        ├─udisksd───4*[{udisksd}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        ├─vmtoolsd───2*[{vmtoolsd}]
        ├─wpa_supplicant
        └─xdg-permission-───2*[{xdg-permission-}]

2.1 主进程
centos7中linux第一个进程是systemd,所有的父进程都归systemd管。

2.2 父进程
运行一个程序就会出现一个进程,这个进程就是父进程,所有的父进程归主进程(systemd)管,父进程不处理具体的业务

2.3 子进程
父进程会产生一个或多个子进程来处理请求和业务,待子进程处理完成任务后,关闭子进程,回收分配给子进程的系统资源(cpu,内存....)

2.4 僵尸进程
僵尸进程是一个不好的进程,也不处理业务,也不告知父进程回收系统资源。僵尸进程可以通过关闭父进程来间接的关闭僵尸进程。

2.5 孤儿进程
也是一个不好的进程,父进程故障了,子进程无父进程管理,由systemd主进程直接接管。

2.6 守护进程
持续运行的进程,一般是系统必须运行的服务,例如:network和sshd服务....

3.管理和监控进程:
3.1 监控进程
监控通过2个命令,ps和top,更推荐使用top查看,ps只能查看你查询的那个节点的进程的状态,而top会默认每隔3s更新一次进程的状态。

3.2 平均负载
平均负载主要是由cpu的使用率和磁盘IO的使用率来决定。也是我们日常排障的时候重点关注的参数。

网站一般分2种机型:cpu密集型(网站应用需要占用大量的cpu进行计算,比如nginx,DB);I/0密集型:(需要大量的磁盘读写,比如备份机器)以视频网站为例,4K高清无码视频,1帧相当于一张照片,一般人识别的动态的画面是30-60帧,1帧是22M,1s有30帧,22*30*60*60*2=4752000/1024=4640.625(G),一个2个小时的4K高清视频是4个多T。视频网站上传视频后,会进行转码(压缩),压缩会用耗用cpu。将视频存储到硬盘就需要耗用I/O。

通过平均负载的中使用到的命令逐渐理解top,和ps命令里的一些参数。

查询cpu的核心数:

#lscpu查看机器有多少个cpu,每个cpu有多少个核心
[root@node-10 ~]# lscpu
.....
CPU(s):                384              #384个核心   
.....
Core(s) per socket:    24        #每个cpu,有24个核心
Socket(s):             8            #8个cpu
.....

#此外还有其他命令来查询cpu的核心数:
    cat /proc/cpuinfo 
    lscpu
    top 按1

平均负载主要有cpu的使用率和磁盘IO的使用率决定,当系统的平均负载接近系统cpu总核心数的70%,系统就比较繁忙了。

#使用w命令查看进程的状态:load average(平均负载): 0.04, 0.06, 0.09 分别表示1分钟,5分钟,15分钟的平均负载
[root@yw08xcjs001 ~]# w
 00:29:52 up 54 days,  6:36,  1 user,  load average: 0.04, 0.06, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.2.111     00:10    0.00s  0.16s  0.01s w

分析系统的平均负载

#举例:
如果平均负载为2,机器有4,2,1个核心
4核心,平均负载为2,核心占用%50
2个核心,平均负载为2,核心占用%100
1个核心,平均负载为2,1个进程没有核心来出处理。

如果1,5,15分钟内的平均负载基本相同,说明系统运行很平稳。
如果1分钟远小于15分钟的值,过去15分钟的负载高,负载逐渐减下来了。
如果1分钟远大于15分钟的值,负载突然持续上升,过去15分钟负载正常。
一旦平均负载超过cpu核心总数,表明系统负载很高,需要进行优化。

3.2 cpu导致平均负载高
使用压力来提高cpu的使用率,致使平均负载高

#stress 命令详解
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
    --cpu 生成多少个进程供几个核心使用。
    --io  同时进行磁盘io的进程数
    --vm  几个进程
    --vm-bytes 每个进程占用多少内存空间
    --timeout  持续多久

#压力测试-产生3个进程占用3个核心,运行时间是999999(对cpu施压,提高cpu利用率,来提高平均负载)
[root@ceshi ~]# stress --cpu 3 --timeout 999999


#查看平均负载,watch每2s更新一次并高亮变化的值。(观察平均负载已经很高了)
[root@ceshi ~]# watch -dc w      
 19:15:56 up 7 min,  2 users,  load average: 3.04, 1.53, 0.64
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         19:08    2:52   2:50   0.00s stress --cpu 3 --timeout 999999
root     pts/1    10.0.0.1         19:13    4.00s  0.08s  0.00s w


#通过top命令查看什么进程导致的负载高,top命令默认是以cpu的使用率进行排序的。%CPU 表示cpu的使用率。
#COMMAND 进程的名字,stress进程cpu使用率特别高。
[root@ceshi ~]# top    
top - 19:16:26 up 8 min,  2 users,  load average: 3.02, 1.67, 0.71
Tasks: 112 total,   5 running, 107 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2859800 total,  2321484 free,   145060 used,   393256 buff/cache
KiB Swap:  3145724 total,  3145724 free,        0 used.  2494048 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                     
  1943 root      20   0    7312    100      0 R 33.2  0.0   1:06.88 stress                                                                      
  1944 root      20   0    7312    100      0 R 33.2  0.0   1:06.88 stress                                                                      
  1942 root      20   0    7312    100      0 R 32.9  0.0   1:06.88 stress 
  
#ps auxf显示出父进程与子进程的关系并用grep,筛选出stress进程。
[root@ceshi ~]#  ps auxf | grep stress
root       1941  0.0  0.0   7312   428 pts/0    S+   19:13   0:00  |       \_ stress --cpu 3 --timeout 999999
root       1942 33.0  0.0   7312   100 pts/0    R+   19:13   2:01  |           \_ stress --cpu 3 --timeout 999999
root       1943 33.0  0.0   7312   100 pts/0    R+   19:13   2:01  |           \_ stress --cpu 3 --timeout 999999
root       1944 33.0  0.0   7312   100 pts/0    R+   19:13   2:01  |           \_ stress --cpu 3 --timeout 999999
root       1991  0.0  0.0 112808   964 pts/1    S+   19:19   0:00          \_ grep --color=auto stress


#对应占用cpu利用率高的进程通过pkill + 进程名字 命令,将进程杀掉
[root@ceshi ~]# pkill stress

#杀掉进程后验证平均负载是否恢复正常。
 


3.3 IO导致平均负载高
用压力测试stress来提高磁盘的IO

#此段可忽略,仅作为扩展
#stress的io参数, 不显示磁盘进程占用情况,显示的是系统进程占用情况,--io调用的是系统的syn函数,函数与系
统内核进行沟通,所以显示的是系统进程负载高,需要使用-hdd参数
stress  --io 2    --vm 2 --vm-bytes 128M --timeout 100s


#可以看到97.4 sy,sy表示系统负载高,
[root@ceshi ~]# top
top - 19:38:03 up 29 min,  2 users,  load average: 0.72, 0.23, 0.45
Tasks: 113 total,   6 running, 107 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.6 us, 97.4 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2859800 total,  2221284 free,   244732 used,   393784 buff/cache
KiB Swap:  3145724 total,  3145724 free,        0 used.  2394196 avail Mem
 


#使用--hdd 命令,会压测磁盘io负载
[root@ceshi ~]# stress --hdd 8 --hdd-bytes 1g 8个进程,每个进程写1个g

#top命令查看, 61.0 wa(第三行),61.0 wa:cpu等待IO完成的时间,磁盘读写速度太慢,cpu需要等待磁盘
#IO完成之后,cpu才能处理数据,也会导致平均负载过高。
[root@ceshi ~]# top
top - 19:41:31 up 33 min,  2 users,  load average: 3.88, 1.75, 1.00
Tasks: 118 total,   7 running, 111 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us, 30.1 sy,  0.0 ni,  0.0 id, 61.0 wa,  0.0 hi,  8.2 si,  0.0 st
KiB Mem :  2859800 total,    99568 free,   149432 used,  2610800 buff/cache
KiB Swap:  3145724 total,  3145724 free,        0 used.  2457296 avail Mem 

#看到IO负载高后,查看哪个进程导致IO负载高。iotop -o 查看哪些进程正在使用IO。
[root@ceshi ~]# iotop -o

Total DISK READ : 0.00 B/s | Total DISK WRITE :     243.13 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE:     222.79 M/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                
  2123 be/4 root        0.00 B/s   31.17 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2124 be/4 root        0.00 B/s   31.17 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2125 be/4 root        0.00 B/s   30.28 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2121 be/4 root        0.00 B/s   30.28 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2127 be/4 root        0.00 B/s   30.28 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2063 be/4 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % [kworker/u256:1]
  2126 be/4 root        0.00 B/s   30.28 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2122 be/4 root        0.00 B/s   30.28 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2120 be/4 root        0.00 B/s   29.39 M/s  0.00 % 99.99 % stress --hdd 8 --hdd-bytes 1g
  2111 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.89 % [kworker/0:1]

#过滤出读写的进程将进程pkill掉。
[root@ceshi ~]# pkill stress


#杀掉进程后验证平均负载是否恢复正常。

3.4 故障排查的思路
系统平均负载高

监控和业务反馈负载高,网站访问缓慢。

top查看cpu负载高(%CPU)还是io负载高(0.0 wa)。

cpu负载高,top命令就能看出来。

io负载高,通过iotop -o命令查看哪些进程导致的io负载高

分析进程:

找出对应的进程,是否可以pkill掉进程(牧马或者肉鸡进程,挖矿进程...)

如果进程不能pkill通过查看日志,来判断什么原因导致的。

高阶:通过strace(显示命令执行过程)或者ltrace(显示命令执行过程和调用依赖)命令跟踪进程和命令执行过程。 (开发协助一起看)

top验证是否平均负载是否恢复。

3.5 ps命令详解
ps命令:只会显示你查询的时候的状态,(类似于给进程的状态拍了个照片)

auxf 在进程列(COMMAND)显示父进程子进程的关系。

#你显示标题信息,并以第五列进行排序

ps aux --no-header | sort -rnk5    #--no-header 不显示头部,只显示第五列

pstree  #查看进程树状结构

#ps aux 每一列命令详解
USER:进程属于的用户  
PID:进程的id  
%CPU %MEM:进程占用的cpu和内存百分比   
VSZ   RSS:占用虚拟内存和物理内存的大小    
TTY:进程属于哪个终端  
STAT:进程的状态,远程连接占用一个窗口,就是一个终端。?代表后台运行进程,带pts就是前台进程。带tty的表示服务器直接登录。   
START:进程开启的时间   
TIME:进程已经占用cpu的时间,cpu的核心在每个任务中间切换的足够快,每个任务占用cpu多长时间。(一个核心同时只能处理
一个进程) 
COMMAND:进程名称或叫命令


[root@ceshi ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 125752  4272 ?        Ss   12:59   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
polkitd    1070  0.0  0.4 612248 13272 ?        Ssl  12:59   0:00 /usr/lib/polkit-1/polkitd --no-debug
root     103164  0.0  0.0 184584  2572 ?        S    18:08   0:00 /usr/sbin/CROND -n
root     103217  0.0  0.0 157552  1920 pts/0    R+   18:08   0:00 ps -aux
root     103218  0.0  0.0 112816   952 pts/0    S+   18:08   0:00 grep --color=auto R
polkitd  119118  8.7  0.0 619928 14408 ?        Rsl  Feb09 11944:49 /usr/lib/polkit-1/polkitd --no-debug
root       1072  0.0  0.2  99688  6084 ?        Ss   12:59   0:00 /usr/bin/VGAuthService -s
root       1604  0.0  0.0  89704  2228 ?        Ss   12:59   0:00 /usr/libexec/postfix/master -w
postfix    1623  0.0  0.1  89876  4088 ?        S    12:59   0:00 qmgr -l -t unix -u
root       1880  0.0  0.2 157324  5916 ?        Ss   12:59   0:00 sshd: root@pts/0
root       1882  0.0  0.1 116580  3212 pts/0    Ss   12:59   0:00 -bash
root       2719  0.2  0.1 116464  2924 tty1     Ss   17:43   0:00 -bash
root       2741  0.0  0.0 108052   352 tty1     S+   17:43   0:00 sleep 9999
root       3220  0.0  0.0      0     0 ?        S<    2021   0:00 [scsi_tmf_24]
postfix    2567  0.0  0.1  89808  4072 ?        S    16:19   0:00 pickup -l -t unix -u
nginx      2665  0.0  0.0  39692  1820 ?        S    17:00   0:00 nginx: worker process
root       9800  0.0  0.0  55528  1032 ?        S<sl  2021   1:17 /sbin/auditd
root       9802  0.0  0.0  84556   908 ?        S<sl  2021   1:14 /sbin/audispd
root       9804  0.0  0.0  55636  1344 ?        S<    2021   0:48 /usr/sbin/sedispatch
rpc        9829  0.0  0.0  69272  1436 ?        Ss    2021   0:22 /sbin/rpcbind -w
avahi      9833  0.0  0.0  62284  2280 ?        Ss    2021  20:06 avahi-daemon: running [node-20.local]
root       9834  0.0  0.0 225828  4752 ?        Ss    2021   3:25 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recurs
dbus       9835  3.5  0.0  62764  4232 ?        Ss    2021 9042:06 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --system
avahi      9839  0.0  0.0  62152   392 ?        S     2021   0:00 avahi-daemon: chroot helper
rtkit      9843  0.0  0.0 198800  1748 ?        SNsl  2021   1:38 /usr/libexec/rtkit-daemon
root       9844  0.0  0.0  26760  2212 ?        Ss    2021   6:56 /usr/lib/systemd/systemd-logind
root       9845  0.0  0.0 356876  5212 ?        Ssl   2021   1:17 /usr/sbin/ModemManager
root       9849  0.0  0.0  21692  1336 ?        Ss    2021  27:13 /usr/sbin/irqbalance --foreground


VSZ:进程占用的虚拟内存大小,就是是物理内存+交换分区空间(swap空间),swap空间使用磁盘空间配置,当系统内存不足,swap空
间可以临时补充。
RSS:进程占用的物理内存大小。linux如果内存不足,主进程不知道哪个进程导致内存不足,会随机挑选进程kill。如果知道是那
个进程导致内存不足,会kill掉这个进程。
#查看机器的所有内存
[root@node-10 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        4.8G        204M        738M         10G        9.5G
Swap:           15G        756M         15G


进程的STAT:

基础进程

描述

组合进程(可以和基础进程组合)

描述

R(Runing)

正在运行的

s(session leader)

表示控制进程,Ss可以随时中断的父进程

S(sleep)

可以随时中断的进程

<

优先级,S<优先级较高的进程,优先保障的进程

T(stopped)

进程被暂停(挂起)ctrl+z就会暂停进程

N

低优先级进程,一般不常见。

D(don‘t sleep)

不可中断的进程(IO 读写的时候,中断数据会丢失)

+

当前进程运行在前台,R+正在前台运行的进程

Z(zombie)

僵尸进程

l(小写L)

由程序的开发代码定义进程是否多线程的,

Sl:进程是以线程方式运行,

超线程技术:允许一个核心同一时间处理2个进程(任务)。

linux比较常见的进程状态:

#R+: 表示前台运行的进程
[root@ceshi ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000000

[root@ceshi ~]# ps -aux | grep -w dd
root       2829 85.8  0.0 109132  1404 pts/0    R+   18:54   0:08 dd if=/dev/zero of=/tmp/big bs=1M count=1000000
root       2832  0.0  0.0 112808  1000 pts/1    S+   18:54   0:00 grep --color=auto -w dd


#R 仅运行中
#dd 命令加& (命令后加&就放到后台运行了)测试完成通过kill 关闭进程
[root@ceshi ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000000 &
[1] 2896
[root@ceshi ~]# ps -aux | grep -w dd
root       2896 46.8  0.0 109132  1408 pts/0    R    19:01   0:03 dd if=/dev/zero of=/tmp/big bs=1M count=1000000
root       2918  0.0  0.0 112808  1000 pts/1    R+   19:02   0:00 grep --color=auto -w dd
[root@ceshi ~]# ps -aux | grep -w dd
root       2896 43.0  0.0 109132  1408 pts/0    D    19:01   0:03 dd if=/dev/zero of=/tmp/big bs=1M count=1000000
root       2920  0.0  0.0 112808  1000 pts/1    R+   19:02   0:00 grep --color=auto -w dd
[root@ceshi ~]# kill 2896

#S 可以中断的进程
nginx      2660  0.0  0.0  39692  1820 ?        S    17:00   0:00 nginx: worker process
nginx      2661  0.0  0.0  39692  1820 ?        S    17:00   0:00 nginx: worker process
nginx      2662  0.0  0.0  39692  1820 ?        S    17:00   0:00 nginx: worker process
nginx      2663  0.0  0.0  39692  1820 ?        S    17:00   0:00 nginx: worker process


#T 进程被挂起(暂停)
#ctrl+z 挂起进程
[root@ceshi ~]# vim /etc/fstab     #vim 打开文件后,ctrl+z 挂起进程
[1]+  Stopped                 vim /etc/fstab
[root@ceshi ~]# 
#回到前台运行,bg继续后台运行。
[root@ceshi ~]# fg
vim /etc/
...
[root@ceshi ~]# ps -aux | grep -w vim
root       2855  1.1  0.1 149976  5676 pts/0    T    18:58   0:00 vim /etc/fstab
root       2857  0.0  0.0 112808   996 pts/1    S+   18:58   0:00 grep --color=auto -w vim


\

#D 不可中断进程,一般于IO有关
[root@ceshi ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000000 &
[1] 2896
[root@ceshi ~]# kill 2896
[root@ceshi ~]# 
[root@ceshi ~]# ps -aux | grep -w dd
root       2896 46.8  0.0 109132  1408 pts/0    R    19:01   0:03 dd if=/dev/zero of=/tmp/big bs=1M count=1000000
root       2918  0.0  0.0 112808  1000 pts/1    R+   19:02   0:00 grep --color=auto -w dd
[root@ceshi ~]# ps -aux | grep -w dd
root       2896 43.0  0.0 109132  1408 pts/0    D    19:01   0:03 dd if=/dev/zero of=/tmp/big bs=1M count=1000000
root       2920  0.0  0.0 112808  1000 pts/1    R+   19:02   0:00 grep --color=auto -w dd

#Ss 可以中断的管理进程,父进程
[root@ceshi ~]# ps -aux | grep Ss
root          1  0.0  0.1 125752  4272 ?        Ss   12:59   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root        482  0.0  0.1  39080  3124 ?        Ss   12:59   0:00 /usr/lib/systemd/systemd-journald
root        509  0.0  0.0  45736  2676 ?        Ss   12:59   0:00 /usr/lib/systemd/systemd-udevd
root        512  0.0  0.0 198572  1356 ?        Ss   12:59   0:00 /usr/sbin/lvmetad -f
root       1053  0.0  0.1 228184  5648 ?        Ss   12:59   0:00 /usr/sbin/abrtd -d -s


#Ssl 父进程and多线程
[root@ceshi ~]# ps -aux | grep Ssl
root       1067  0.0  0.3 474368  8780 ?        Ssl  12:59   0:00 /usr/sbin/NetworkManager --no-daemon
polkitd    1070  0.0  0.4 612248 13272 ?        Ssl  12:59   0:00 /usr/lib/polkit-1/polkitd --no-debug
root       1073  0.1  0.2 305280  6404 ?        Ssl  12:59   0:22 /usr/bin/vmtoolsd
root       1381  0.0  0.6 574300 17312 ?        Ssl  12:59   0:03 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root       1383  0.0  0.1 222764  4436 ?        Ssl  12:59   0:01 /usr/sbin/rsyslogd -n
root       2928  0.0  0.0 112808   968 pts/1    R+   19:06   0:00 grep --color=auto Ssl


3.6 top命令详解
top:实时的显示进程的状态。默认每3s更新一次。

#TOP是一个交互命令:
    空格:刷新
    按照内存进行排序:M
    按照CPU排序:P
    1:显示cpu有多少核心,lscpu可以查看cpu的详细信息。
    z:显示颜色,x,当前排序的列显示其他颜色。<和>更当前排序列。

#top命令命令行选项,使用三剑客让top显示的一部分内容
    -b  批处理模式,方便输出内容交给其他命令二次加工处理。
    -n  刷新的次数,一般和-b一起用,-bn1 只刷新一次。
    -d  指定刷新时间 -d 1 1秒刷新一次。
    -p  指定进程信息进行查看。
    -H  查看线程信息,一般Hp一起用。
   

#top命令详细解析
机器已经运行的时间,目前登录用户数,1 5 15分钟的系统平均负载
top - 04:27:29 up 51 days, 10:21,  1 user,  load average: 0.05, 0.05, 0.08
进程总数,1个正在运行,361个在睡觉,0个挂起进程,0个僵尸进程。                
Tasks: 362 total,   1 running, 361 sleeping,   0 stopped,   0 zombie

cpu:用户进程占用用的CPU,系统进程占用,高优先级进程占用,空闲进程占用,IO wait(进程进行IO
读写,IO wait高,说明有进程大量的读写硬盘)硬中断,软中断,steal(如果机器部署虚拟机,查看
虚拟机占用了多少cpu)
%Cpu(s):  0.4 us,  0.2 sy,  0.0 ni, 99.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

总计内存,空闲内存,使用内存,缓存占用内存
KiB Mem : 65423612 total,  4450732 free,  1763820 used, 59209060 buff/cache

swap总计,多少空闲,多少在使用,当前的可用内存(一般是缓存+空闲内存)
KiB Swap:        0 total,        0 free,        0 used. 62124648 avail Mem 

PR+NI 优先级,VSZ,RSS,SHR(共享内存),S(进程状态),CPU MEM使用率,占用cpu时间,进程

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                        
     6 root      20   0       0      0      0 S  0.3  0.0   0:00.10 ksoftirqd/0                                    
   930 root      20   0  305280   6404   5028 S  0.3  0.2   0:01.33 vmtoolsd                                       
  1933 root      20   0  162096   2200   1548 R  0.3  0.1   0:00.27 top                                            
     1 root      20   0  125756   4308   2576 S  0.0  0.2   0:02.59 systemd                                        
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                       
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                   
     5 root      20   0       0      0      0 S  0.0  0.0   0:00.05 kworker/u256:0                                 
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.01 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.46 rcu_sched                                      
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain  


#top第三列:
%Cpu(s):  0.4 us,  0.2 sy,  0.0 ni, 99.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    0.4 us:用户cpu使用率(用户执行的服务,软件,命令,加密,转码...)
    0.2 sy:系统cpu使用率(内核进程,硬件,磁盘和网络..)
    0.0 ni:高优先级进程(一般系统内核进程)占用cpu的使用率
    0.0 wa:磁盘读写速度,满足不了系统进程的要求。cpu等待IO完成的时间。
    0.0 hi:硬中断,cpu速度极快,硬盘速度慢,cpu等待磁盘完成任务,cpu再进行处理,
    cpu在多个任务之间切换,其中就有任务属于停止中断的状态。硬中断就是硬件层面的中断,
    软中断就是系统软件层面的中断。
    0.0 si:软中断
    0.0 st:steal(机器在linux中部署虚拟机,查看虚拟机占用了多少cpu)
 
 #SHR共享内存:进程之间如果运行相似的东西,优化内存,创建共享内存来运行进程之间相似的部分。

#显示进程的线程信息。
    进程:运行的程序软件就是进程。
    线程:线程需要程序打开,一个进程下面包含多个线程, 线程负责处理任务,进程负责管理和提供资源(CPU,内存...)给线程。
    
#查看进程为2290的线程, mysql是一个使用线程的进程
[root@ceshi ~]# top -Hp 2290
top - 11:58:27 up 7 min,  1 user,  load average: 0.01, 0.11, 0.07
Threads:  19 total,   0 running,  19 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 :  2859804 total,  2166396 free,   226008 used,   467400 buff/cache
KiB Swap:  3145724 total,  3145724 free,        0 used.  2411384 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  2290 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.18 mysqld
  2294 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2295 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2296 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2297 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2298 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.02 mysqld
  2299 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2300 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2301 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2302 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2303 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2304 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2305 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.02 mysqld
  2306 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2307 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2308 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.01 mysqld
  2309 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2317 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld
  2318 mysql     20   0  968916  85716   7208 S  0.0  3.0   0:00.00 mysqld

#top命令包括了其他命令显示的信息

 w 查看用户和平均负载   
[root@yw08xcjs002 ~]# w
 05:09:34 up 51 days, 11:03,  1 user,  load average: 0.08, 0.06, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.2.111     04:25    6.00s  0.26s  0.25s -bash    

[root@yw08xcjs002 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        1.7G        4.2G        782M         56G         59G
Swap:            0B          0B          0B
buff/cache:linux会把一部分内存放在buff/cache,中,将打开过的文件等内容,放到缓存,
加速下次打开。


3.7 关闭进程
 推荐使用killall来关闭进程。

#kill 
    kill + 进程号:kill+pid是使用默认的kill信号。(SIGTERM)。
    kill -信号 进程号
kill相关信号
    SIGHUB(1):进程重新读取配置文件,实现的是reload功能。
    SIGKILL(9):强制结束,慎用(尤其带数据的进程,比如数据库)。
    SIGTERM(15):停止,kull,默认的信号。
    
#pkill
    pkill+进程名字,生产环境慎用,会把包含这个进程名字的其他进程也杀掉。会误杀。(比如要pkill sh 会把sshd,bash..只要进程名字
    包括sh的进程都杀掉)

#killall
    killall+进程名字:kill掉的就是精确匹配的进程名字,不会误删。

关闭顽固进程

命令卡住了。
    1.开启新窗口,kill 杀掉进程。
    2.ctrl+z 让任务挂起,bg后台运行。再用kill +数字结束任务。

3.8 后台运行进程
#查看进入后台的任务:
        jobs 查看进入后台的任务。

#进入后台进程的方法:
方法1:
    ctrl + z:进入后台后会挂起不运行,输入bg开始在后台运行任务。
    fg:放到前台运行。
    
    
方法2:
    &:在脚本的后面直接 输入&,任务就会进入后台运行。


方法3:最推荐的方法
    需要yum安装screen。
    screen:命令会打开一个screen空间,-S 指定screen空间名称。
        screen -S guo 进入guo的screen空间
        输入要执行的命令    
        如果命令执行完会自动退出screen窗口。
        如果不想等命令执行完按住ctrl +a 按完之后按d,会退出screen空间,但是命令还在screen空间执行。
        
    通过screen -ls查看,所执行的后台命令。
    通过screen -r 加进程号 进入之前退出的screen空间。查看命令执行情况。
    结束执行的进程后,ctrl +d 就会完全退出screen空间。                           

#关闭后台任务:
    kill %n:结束后台n号进程。
    kill %%:结束最后一个后台进程。
 

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐