zl程序教程

您现在的位置是:首页 >  系统

当前栏目

linux系统下实时监控进程以及定位杀死挂起的进程详解程序员

2023-06-13 09:20:19 时间
top - 16:39:52 up 4 days, 47 min, 3 users, load average: 0.01, 0.05, 0.05 

Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie 

%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st 

KiB Mem : 997608 total, 81396 free, 559020 used, 357192 buff/cache 

KiB Swap: 0 total, 0 free, 0 used. 229256 avail Mem 

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 

 47706 root 20 0 2757980 67764 3432 S 0.3 6.8 2:45.12 java 

 50860 mongod 20 0 974392 34288 3700 S 0.3 3.4 2:06.16 mongod 

108658 root 20 0 2794276 96332 3644 S 0.3 9.7 2:24.02 java 

110060 root 20 0 2789936 53864 3964 S 0.3 5.4 1:29.78 java 

 1 root 20 0 125456 3424 2076 S 0.0 0.3 1:04.40 systemd 

 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 

 3 root 20 0 0 0 0 S 0.0 0.0 0:08.48 ksoftirqd/0 

 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+ 

 6 root 20 0 0 0 0 S 0.0 0.0 0:04.04 kworker/u2+ 

 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 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:27.72 rcu_sched 

 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-dr+ 

 11 root rt 0 0 0 0 S 0.0 0.0 0:01.90 watchdog/0 

 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 

 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 

 15 root 20 0 0 0 0 S 0.0 0.0 0:00.14 khungtaskd

输出的第一部分显示的是系统的概况:

第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。
平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。

由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。

第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

第三行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将CPU利用率分成几类输出。

第四第五两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配了的话)的状态而言的。

最后一部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似。

PID:进程的ID。 USER:进程属主的名字。 PR:进程的优先级。 NI:进程的谦让度值。 VIRT:进程占用的虚拟内存总量。 RES:进程占用的物理内存总量。 SHR:进程和其他进程共享的内存总量。 S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表 跟踪状态或停止状态,Z代表僵化状态)。 %CPU:进程使用的CPU时间比例。 %MEM:进程使用的内存占可用内存的比例。 TIME+:自进程启动到目前为止的CPU时间总量。 COMMAND:进程所对应的命令行名称,也就是启动的程序名。

默认情况下,top命令在启动时会按照%CPU值对进程排序。可以在top运行时使用多种交互命令重新排序。每个交互式命令都是单字符,在top命令运行时键入可改变top的行为。键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。用户在top命令的输出上有很大的控制权。用这个工具就能经常找出占用系统大部分资源的罪魁祸首。当然了,一旦找到,下一步就是结束这些进程。这也正是接下来的话题。

二、结束进程 Linux进程信号

linux系统下实时监控进程以及定位杀死挂起的进程详解程序员

如何干掉一个进程

kill ID(PID)

$ kill 3940 

-bash: kill: (3940) - Operation not permitted

上面的命令可能不能适应所有的进程。

强制干掉一个进程
# kill -s HUP 3940 

#

-s参数支持指定其他信号(用信号名或信号值),kill命令不会有任何输出,要检查kill命令是否有效,可再运行ps或top命令,看看问题进程是否已停止。

killall命令

killall命令非常强大,它支持通过进程名而不是PID来结束进程。killall命令也支持通配符,这在系统因负载过大而变得很慢时很有用。

# killall http* 

#

上例中的命令结束了所有以http开头的进程,比如Apache Web服务器的httpd服务。

注意:以root用户身份登录系统时,使用killall命令要特别小心,因为很容易就会误用通配符而结束了重要的系统进程。这可能会破坏文件系统。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/6511.html

服务器部署程序员系统优化网站设置运维 赞 (1)