一文搞懂linux进程
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 %%:结束最后一个后台进程。
更多推荐
所有评论(0)