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

一、实时监测进程

[[email protected] ~]# top
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)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论