进程管理
进程概述
什么是程序和进程?
程序是一组代码和数据的集合,静态概念,永久存放在系统中
进程是一个正在运行的程序,动态概念,存在生命周期,无法永久存放在系统中
进程的生命周期
1 2 3 4 5 6 7
| 1.用户发起请求 2.父进程会fork出子进程,子进程会继承父进程大部分的属性,如:文件描述符等,处理任务 3.子进程在处理任务的过程中,父进程是一个wait状态,等待子进程 4.正常结束 5.非正常结束 - 僵尸进程 - 孤儿进程
|
僵尸进程:子进程处理完任务后,父进程正在繁忙,无法及时回收子进程的资源
孤儿进程:子进程处理完任务后,父进程因某些原因倍终止(父进程完成自己的任务,或者认为kill),孤儿进程会被PID
为1的进程回收
监控进程的状态
进程状态管理命令-ps
选项 |
说明 |
a |
查看所有与终端相关的进程,由终端发起的进程 |
u |
显示进程的管理用户 |
x |
查看所有与终端无关的进程 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| ps [options] [argments]
[root@localhost ~] [root@localhost ~]
[root@localhost ~] USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6140 0.0 0.0 110092 856 tty1 Ss+ 08:51 0:00 /sbin/agetty --noclear tty1 linux root 8002 0.0 0.2 115440 2020 pts/0 Ss 15:09 0:00 -bash root 8044 0.0 0.1 155360 1884 pts/0 R+ 16:01 0:00 ps -au
[root@localhost ~] USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 8393 0.0 0.0 39308 940 ? Ss 09:41 0:00 nginx: master process nginx
USER:该进程的管理用户 PID:进程号 %CPU:该进程占用CPU的百分比 %MEM:该进程占用内存的百分比 VSZ:该进程占用虚拟内存的大小 RSS:该进程占用物理内存的大小 TTY -?:由内核发起的进程 -tty:机器上的终端进程 -pts/N:远程连接工具的终端进程 STAT:进程运行的状态 -D:无法中断的休眠状态(通IO的进程)***** -R:正在运行的状态 ***** -S:处于休眠状态的进程 ***** -T:暂停或者被追踪的状态 -W:进入交换内存的进程(swap,centos7见不到) -X:死掉的进程(少见) -Z:僵尸进程 ***** -<:优先级高的进程 -N:优先级低的进程 -L:有些数据页被锁进内存的进程 -s:父进程,在它下面有子进程 -l:以线程的方式运行 -|:存在多进程的进程 -+:在前台运行 ***** START:进程开启的时间 TIME:该进程占用CPU的时间 COMMAND:进程的名字或者进程的命令 -[]:内核态进程 -没[]:用户态进程
[root@localhost ~] [1]- Stopped vim 1.txt [2]+ Stopped ping baidu.com
[root@localhost ~]
bg:让暂停的进程运行起来,后面加数字,就可以运行第几个被暂停的进程(默认是最后一个) fg:是把后台暂停的进程,调到前台运行,后面加数字,可以将第N个进程调到前台运行(默认是最后一个)
|
ps
命令用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@localhost ~] [root@localhost ~] [root@localhost ~]
o:自定义显示字段 [root@localhost ~]
f:查看子进程和父进程的关系 [root@localhost ~]
[root@localhost ~] [root@localhost ~] 9319 9453 [root@localhost ~]
-l:显示该进程的启动命令 -a:显示该进程的完整描述信息
[root@localhost ~] 9453 9319
[root@localhost ~]
|
进程动态管理命令-top
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| [root@web01 ~]
top - 10:42:55 up 6 days, 7:03, 3 users, load average: 0.01, 0.02, 0.05
top:命令 10:42:55:当前系统时间 up 6 days, 7:03,:该服务器,运行的时间 3 users,:当前登录的用户数量 load average: 0.01, 0.02, 0.05:系统的平均负载 0.01:1分钟 0.02:5分钟 0.05:15分钟
Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie 102 total:当前系统中所有的进程数量 1 running:处于R状态,正在运行状态的进程数 101 sleeping:处于S状态,sleep状态的进程数 0 stopped:处于T状态,后台挂起暂停状态的进程数 0 zombie:处于Z状态,僵尸进程的进程数量
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us:用户进程占用cpu的百分比(用户态) ***** sy:系统进程占用cpu的百分比(内核态)***** id:cpu的空闲程度 ***** ni:优先级较高的进程占用cpu的百分比 wa:等待状态的进程占用cpu的百分比 hi:硬中断占用cpu的百分比 si:软中断占用cpu的百分比 st:虚拟化技术占用cpu的百分比
KiB Mem : 995896 total, 191948 free, 98740 used, 705208 buff/cache 995896 total:总内存数 191948 free:空闲内存数 98740 used:已使用的内存数 705208 buff/cache:buffer缓冲区/缓存区
可用内存:free + buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 687216 avail Mem 1048572 total:总共的虚拟内存数 1048572 free:空闲的虚拟内存数 0 used:已使用的虚拟内存数 687216 avail Mem:可用的虚拟内存数
|
top
命令用法
选项 |
说明 |
-d |
指定更新的时间(默认是3s 更新一次) |
-p |
只查看指定PID 的进程 |
-u |
指定相关用户 |
-b |
将top内容保存到文件中 |
-n |
指定次数 |
1 2 3 4 5 6 7
| top [options] [PID]
[root@web01 ~] [root@web01 ~] [root@web01 ~]
|
top
常见指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| h 查看帮出 z 高亮显示 1 显示所有CPU的负载 s 设置刷新时间 b 高亮现实处于R状态的进程 M 按内存使用百分比排序输出 P 按CPU使用百分比排序输出 R 对排序进行反转 f 自定义显示字段 k kill掉指定PID进程 W 保存top环境设置 ~/.toprc q 退出
PID:进程ID号 USER:该进程的用户 PR NI:进程优先级 VIRT:虚拟内存占用空间 RES:物理内存占用空间 SHR:共享内存占用空间 S:进程的状态 %CPU:占用CPU的百分比 %MEM:占用内存的百分比 TIME+:运行时间 COMMAND:进程的运行命令
|
进程的信号管理-kill
当程序运行为进程后,如果希望强行停止就可以使用kill命令对进程发送关闭信号,除了kill还有pkill
、killall
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| [root@web01 ~] 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
1 HUP 挂起信号,往往可以让进程重新配置(重新加载配置文件) 2 INT 中断信号,起到结束进程的作用,和ctrl + c 的作用一样 3 QUIT 让进程退出,结果是进程退出 9 KILL 直接结束进程,不能被进程捕获 15 TERM 进程终止,这是默认信号 18 CONT 被暂停的进程将继续恢复运行(放在后台运行,bg) 19 STOP 暂停进程 20 TSTP 用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停
pkill:杀掉所有进程,不用指定pid killall:杀掉所有进程,不用指定pid
[root@web01 ~] [root@web01 ~]
[root@web01 ~] [root@web01 ~] [root@web01 ~]
|
进程的优先级
什么是优先级?
优先级高的进程,可以优先享用系统的资源
优先级的定义和配置
在启动进程时,为不同的进程使用不同的调度策略
nice值越高:表示优先级越低,例如20,该进程容易将CPU使用量让给其他进程
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@localhost ~]
[root@localhost ~] 6676 root 0 /usr/sbin/sshd -D
[root@localhost ~] 6676 (process ID) old priority 0, new priority -20
[root@localhost ~] 6676 root -20 /usr/sbin/sshd -D
|
企业案例,Linux假死是怎么回事
什么是假死?
所谓假死,就是能ping
通,但是ssh
不上去;任何其他操作也都没反应,包括上面部署的nginx
也打不开页面
系统假死为何能ping同无法连接?
此时机器可以ping
通,但是无法ssh
上去。这是由于ping
是在系统底层处理的,没有参与进程调度;sshd
要参与进程调度,但是优先级没oom killer
高,总得不到调度
出现假死怎么办?
建议使用nice
将sshd
的进程优先级调高。这样当系统内存吃紧,还能勉强登陆sshd
,进入调试。然后分析故障。
后台进程管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| [root@localhost ~] [1] 7784 PING baidu.com (220.181.38.251) 56(84) bytes of data. 64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=1 ttl=128 time=30.3 ms [1]+ Terminated ping baidu.com
[root@localhost ~] 快捷键:ctrl + z
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~] [1] 8089 [root@localhost ~] [1]+ Terminated nohup ping baidu.com
[root@localhost ~] -ls:查看所有screen的后台进程 -r:指定后台进程号,进入该后台进程 -S:指定后台进程的名字 Ctrl + a + d:放在后台执行 [root@localhost ~] [root@localhost ~] [detached from 8174.ping_baidu] [root@localhost ~] There is a screen on: 8174.ping_baidu (Detached) 1 Socket in /var/run/screen/S-root. [root@localhost ~] --- baidu.com ping statistics --- 34 packets transmitted, 34 received, 0% packet loss, time 33306ms rtt min/avg/max/mdev = 29.373/30.025/30.571/0.300 ms
使用场景:ping节点,检测丢包率
|
面试加分项
中断
Q:什么是中断?
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求
Q:为什么要有中断?
举个栗子: 比如你定了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是配送人员送外卖是不等人的,到了你这,没人接取的话,直接走人了。所以你只能苦苦的等着,时不时的去门口看看外卖送到没有,而不能做其他的事情
不过如果在订外卖的时候,你就跟配送员约定好了,让他送到给你打电话,那你就不用苦苦等着了,可以去忙别的事情了,直到电话一响,接到电话,就可以取外卖了。此时打电话就是一个中断的操作
没接到电话之前,你可以做其他事情,当你接到电话之后(就发生了中断),你才要进行另一个动作取外卖
注意:中断是一个异步的事件处理机制,可以提高操作系统处理并发的能力
Q:那么中断会带来什么问题?
由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中弄断处理程序就需要尽可能快的运行,如果中弄断本身要做的事情不多,那么处理起来也不会有太大的问题,但是如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间
特别是,中断处理程序在影响中断时,还会临时关闭中断,这就会导致上一次中断处理完成之前,其他中断都能不能响应,也就是说中断有可能会丢失
还是以外卖为例:加入你定了2份外卖
一份主食和一份饮料,由2个不同的配送员来配送。这次你不用时时等待着,两份外卖都约定了电话取外卖的方式。那么问题又来了
当第一份外卖送到时,配送员给你打了个很长的电话,商量发票处理的方式,与此同时,第二个配送员也到了,也想给你打电话,但是会占线,因为电话占线(也就关闭了中断的响应),第二个配送给你打电话打不通,所以,那么很有可能在尝试几次还占线,就走了(丢失了一次中断)
系统的软中断
刚才说了丢失一次中断,如果对于系统来说,每次都只能处理一次中断,那就很刺激了,天天都在丢失中断,用户的请求发过来,没响应,还做个P的运维,回家种地吧…
事实上,为了解决中断处理程序执行过长的和丢失中断的问题,Linux将中断处理过程分成了两个阶段:
第一阶段:用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行
你猜的没错,还是外卖的那个例子:
第一阶段:当你接到第一个配送员电话时,你可以跟他说,你已经知道了,其他事见面再细说,然后就可以挂断电话了
第二阶段:才是取外卖,然后见面聊发票的处理动作
如此一来,第一个配送员不会在电话里占用你很长时间,第二个配送员来的时候,照样可以打通电话
Linux软中断与硬中断小结:
系统平均负载
什么是平均负载?
平均负载是指,单位时间内,系统处于可运行状态(R)和不可中断状态(D)的平均进程数,也就是平均活跃进程数
注意:平均负载与CPU使用率并没有直接关系
可运行状态和不可中断状态是什么?
平均负载多少合理?
最理想的状态是每个CPU上都刚还运行着一个进程,这样每个CPU都得到了充分利用
企业中平均负载多高需要重点关注呢?
当平均负载高于CPU数量70%的时候,你就应该分析排查负载高的问题了,一旦负载过高,就可能导致进程相应变慢,进而影响服务的正常功能
但70%这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势,当发现负载有明显升高的趋势时,比如说负载翻倍了,你再去做分析和调查
1 2 3 4 5 6 7 8
| top命令获取:top 1 grep 'model name' /proc/cpuinfo lscpu
-CPU密集型:计算相关 -IO密集型:数据库相关服务
|
企业级负载实战
1 2 3 4
| 领导:某一台服务器,很卡,怎么办? 卡的原因:服务器,负载太高 如何定位,什么程序,导致负载高? 如何定位,负载高,是哪个硬件引起的?
|
前期准备
stress
是Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
mpstat
是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。
pidstat
是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| [root@localhost ~]
[root@localhost ~] root 20 0 7308 100 0 R 50.0 0.0 0:26.21 stress root 20 0 7308 100 0 R 50.0 0.0 0:26.22 stress root 20 0 7308 100 0 R 50.0 0.0 0:26.22 stress root 20 0 7308 100 0 R 50.0 0.0 0:26.32 stress root 20 0 7308 100 0 R 50.0 0.0 0:26.22 stress root 20 0 7308 100 0 R 50.0 0.0 0:26.31 stress root 20 0 7308 100 0 R 49.7 0.0 0:26.38 stress root 20 0 7308 100 0 R 49.7 0.0 0:26.30 stress
[root@localhost ~] [root@localhost ~] Linux 3.10.0-957.el7.x86_64 (node2) 05/06/2022 _x86_64_ (4 CPU) 06:57:09 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 06:57:14 PM all 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:57:14 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:57:14 PM 1 99.80 0.00 0.00 0.00 0.00 0.20 0.00 0.00 0.00 0.00 06:57:14 PM 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:57:14 PM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[root@localhost ~] Linux 3.10.0-957.el7.x86_64 (node2) 05/06/2022 _x86_64_ (4 CPU) 06:58:50 PM UID PID %usr %system %guest %CPU CPU Command 06:58:55 PM 0 6258 0.00 0.20 0.00 0.20 1 vmtoolsd 06:58:55 PM 0 7274 0.00 0.20 0.00 0.20 2 top 06:58:55 PM 0 7475 50.00 0.00 0.00 50.00 3 stress 06:58:55 PM 0 7476 49.40 0.00 0.00 49.40 1 stress 06:58:55 PM 0 7477 49.80 0.00 0.00 49.80 3 stress 06:58:55 PM 0 7478 49.80 0.00 0.00 49.80 2 stress 06:58:55 PM 0 7479 49.20 0.00 0.00 49.20 0 stress 06:58:55 PM 0 7480 49.40 0.00 0.00 49.40 1 stress 06:58:55 PM 0 7481 51.59 0.00 0.00 51.59 0 stress 06:58:55 PM 0 7482 50.00 0.00 0.00 50.00 2 stress
06:58:55 PM UID PID %usr %system %guest %CPU CPU Command 06:59:00 PM 0 7203 0.00 0.20 0.00 0.20 1 sshd 06:59:00 PM 0 7475 50.00 0.00 0.00 50.00 3 stress 06:59:00 PM 0 7476 50.00 0.00 0.00 50.00 1 stress 06:59:00 PM 0 7477 50.00 0.00 0.00 50.00 3 stress 06:59:00 PM 0 7478 50.00 0.00 0.00 50.00 2 stress 06:59:00 PM 0 7479 50.20 0.00 0.00 50.20 0 stress 06:59:00 PM 0 7480 49.80 0.00 0.00 49.80 1 stress 06:59:00 PM 0 7481 49.80 0.00 0.00 49.80 0 stress 06:59:00 PM 0 7482 49.80 0.00 0.00 49.80 2 stress 06:59:00 PM 0 7499 0.00 0.20 0.00 0.20 0 pidstat
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| [root@localhost ~]
[root@localhost ~] Linux 3.10.0-957.el7.x86_64 (node2) 05/06/2022 _x86_64_ (4 CPU) 07:04:04 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 07:04:09 PM all 0.91 0.00 55.06 0.00 0.00 0.00 0.00 0.00 0.00 44.03 07:04:09 PM 0 0.82 0.00 69.53 0.00 0.00 0.00 0.00 0.00 0.00 29.65 07:04:09 PM 1 0.99 0.00 49.14 0.00 0.00 0.00 0.00 0.00 0.00 49.88 07:04:09 PM 2 0.80 0.00 46.40 0.00 0.00 0.00 0.00 0.00 0.00 52.80 07:04:09 PM 3 1.05 0.00 51.05 0.00 0.00 0.00 0.00 0.00 0.00 47.89
[root@localhost ~] Linux 3.10.0-957.el7.x86_64 (node2) 05/06/2022 _x86_64_ (4 CPU) 07:04:29 PM UID PID %usr %system %guest %CPU CPU Command 07:04:34 PM 0 57 0.00 17.17 0.00 17.17 2 kworker/u256:1 07:04:34 PM 0 7547 0.80 24.15 0.00 24.95 1 stress 07:04:34 PM 0 7548 0.60 24.95 0.00 25.55 1 stress 07:04:34 PM 0 7549 0.80 23.35 0.00 24.15 2 stress 07:04:34 PM 0 7550 0.80 23.95 0.00 24.75 0 stress 07:04:34 PM 0 7551 0.60 27.54 0.00 28.14 0 stress 07:04:34 PM 0 7552 0.60 24.75 0.00 25.35 0 stress 07:04:34 PM 0 7553 0.60 25.95 0.00 26.55 2 stress 07:04:34 PM 0 7554 1.00 28.34 0.00 29.34 0 stress 07:04:34 PM 0 7555 0.00 19.56 0.00 19.56 2 kworker/u256:0 07:04:34 PM 0 7556 0.00 16.37 0.00 16.37 3 kworker/u256:3
07:04:34 PM UID PID %usr %system %guest %CPU CPU Command 07:04:39 PM 0 57 0.00 18.60 0.00 18.60 2 kworker/u256:1 07:04:39 PM 0 6258 0.20 0.00 0.00 0.20 0 vmtoolsd 07:04:39 PM 0 7547 0.40 25.60 0.00 26.00 1 stress 07:04:39 PM 0 7548 0.60 26.20 0.00 26.80 0 stress 07:04:39 PM 0 7549 0.80 30.60 0.00 31.40 0 stress 07:04:39 PM 0 7550 0.80 25.20 0.00 26.00 1 stress 07:04:39 PM 0 7551 0.60 29.40 0.00 30.00 2 stress 07:04:39 PM 0 7552 0.60 24.60 0.00 25.20 1 stress 07:04:39 PM 0 7553 0.60 27.80 0.00 28.40 0 stress 07:04:39 PM 0 7554 0.20 25.40 0.00 25.60 0 stress 07:04:39 PM 0 7555 0.00 20.40 0.00 20.40 2 kworker/u256:0 07:04:39 PM 0 7556 0.00 18.00 0.00 18.00 2 kworker/u256:3 07:04:39 PM 0 7571 0.00 0.20 0.00 0.20 3 pidstat
|
1 2 3
| [root@localhost ~] [root@localhost ~] [root@localhost ~]
|
总结分析流程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 1.使用uptime或者top命令查看,系统负载 2.看1分钟,5分钟,15分钟的负载趋势 3.是什么情况导致负载上升 mpstat -P ALL 5 是用户态,还是内核态,导致负载上升 用户态:cpu使用率,大量进程 内核态:磁盘IO,压缩文件,网络存储挂载,下载文件,数据库查询语句 4.查看到底是哪个程序,引起用户态或者内核态的负载上升? pidstat -u 5 2 5.查到了是某个进程后 - 运维 执行了某条命令? 启动了某个服务? - 开发 查看开发写好的程序日志,导出日志,交给开发
|