简单的Linux系统监控

Linux简单程序管理

监测程序

root@hecs-272453:~# ps
	PID TTY          TIME CMD
   7631 pts/0    00:01:14 supervisord
   7690 pts/0    00:00:00 mysqld_safe
   7691 pts/0    00:00:15 apache2
   8727 pts/0    00:00:00 sh
   8751 pts/0    00:00:00 su
 610935 pts/0    00:00:00 bash
 610996 pts/0    00:00:00 ps

ps命令默认只显示运行在当前终端中属于当前用户的那些进程。在这个例子中,只有bash shell在运行(记住,shell只是运行在系统中的另一个程序而已),当然ps命令本身也在运行。ps命令的基本输出显示了程序的进程ID(process ID,PID)、进程运行在哪个终端(TTY)及其占用的CPU时间。

注意 ps命令令人头疼的地方(也正是它如此复杂的原因)在于它曾经有两个版本。每个版本都有自己的一套命令行选项,控制着显示哪些信息以及如何显示。最近,Linux开发人员已经将这两种ps命令格式合并到单个ps命令中(当然,同时也加入了他们自己的风格)。Linux系统中使用的GNU ps命令支持以下3种类型的命令行选项:
·Unix风格选项,选项前加单连字符;
·BSD 风格选项,选项前不加连字符;
·GNU 长选项,选项前加双连字符。下面将进一步解析这3种选项类型,并举例演示其用法。

1.Unix风格选项

Unix风格选项源自贝尔实验室开发的AT&T Unix系统中的ps命令。这些选项如表4-1所示。
image

如果需要查看系统中运行的所有进程,可以使用-ef选项组合

root@hecs-272453:~# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 Sep01 ?        00:00:08 /sbin/init noibrs
root           2       0  0 Sep01 ?        00:00:00 [kthreadd]
root           3       2  0 Sep01 ?        00:00:00 [rcu_gp]
root           4       2  0 Sep01 ?        00:00:00 [rcu_par_gp]
root           5       2  0 Sep01 ?        00:00:00 [slub_flushwq]
root           6       2  0 Sep01 ?        00:00:00 [netns]
root           8       2  0 Sep01 ?        00:00:00 [kworker/0:0H-events_highpri]
root          10       2  0 Sep01 ?        00:00:00 [mm_percpu_wq]

这个例子用了两个选项:

-e选项指定显示系统中运行的所有进程
-f选项则扩充输出内容以显示一些有用的信息列

·UID:启动该进程的用户
·PID:进程ID
·PPID:父进程的PID(如果该进程是由另一个进程启动的)
·C:进程生命期中的CPU利用率
·STIME:进程启动时的系统时间
·TTY:进程是从哪个终端设备启动的
·TIME:运行进程的累计CPU时间
·CMD:启动的程序名称

-l选项

root@hecs-272453:~# ps -l
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0    7631    7609  0  80   0 - 14646 do_pol pts/0    00:01:15 supervisord
4 S     0    7690    7631  0  80   0 -  1158 do_wai pts/0    00:00:00 mysqld_safe
4 S     0    7691    7631  0  80   0 - 133301 do_sel pts/0   00:00:15 apache2
4 S     0    8727    8704  0  80   0 -  1158 do_wai pts/0    00:00:00 sh
4 S     0    8751    8727  0  80   0 - 12319 do_wai pts/0    00:00:00 su
4 S     0  610935  610841  0  80   0 -  2164 do_wai pts/0    00:00:00 bash
4 R     0  613335  610935  0  80   0 -  2517 -      pts/0    00:00:00 ps

注意使用了-l选项之后多出的那几列。

·F:内核分配给进程的系统标志。
·S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,已终止但找不到其父进程;T代表停止)
·PRI:进程的优先级(数字越大,优先级越低)
·NI:谦让度(nice),用于决定优先级
·ADDR:进程的内存地址
·SZ:进程被换出时所需交换空间的大致大小
·WCHAN:进程休眠的内核函数地址

2.BSD风格选项

伯克利软件发行版(Berkeley Software Distribution,BSD)是加州大学伯克利分校开发的一个Unix版本

image

$ ps l
F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY   TIME COMMAND
4  1000    1491    1415  20   0 163992  6580 poll_s Ssl+ tty2  0:00 /usr/li
4  1000    1496    1491  20   0 225176 58712 ep_pol Sl+  tty2  0:05 /usr/li
0  1000    1538    1491  20   0 192844 15768 poll_s Sl+  tty2  0:00 /usr/li
0  1000    2221    2209  20   0  10608  4740 do_wai Ss   pts/0      0:00 bash
0  1000    2410    2221  20   0  11396  1156 -      R+   pts/0      0:00 ps l


VSZ:进程占用的虚拟内存大小(以KB为单位)
·RSS:进程在未被交换出时占用的物理内存大小
·STAT:代表当前进程状态的多字符状态码。

很多系统管理员喜欢BSD风格的l选项,因为能输出更详细的进程状态码(STAT列)。多字符状态码能比Unix风格输出的单字符状态码更清楚地表明进程的当前状态。
第一个字符采用了与Unix风格的S输出列相同的值,表明进程是在休眠、运行还是等待。
第二个字符进一步说明了进程的状态。·<:该进程以高优先级运行。·N:该进程以低优先级运行。·L:该进程有锁定在内存中的页面。·s:该进程是控制进程。·l:该进程拥有多线程。·+:该进程在前台运行。从先前展示的简单例子中可以看出,bash命令处于休眠状态,但同时它也是一个控制进程(会话中的主进程),而ps命令则运行在系统前台

3.GNU长选项

GNU开发人员在经过改进的新ps命令中加入了另外一些选项,其中一些GNU长选项复制了现有的Unix或BSD风格选项的效果,而另外一些则提供了新功能

image

--forest选项着实讨人喜欢。该选项能够使用ASCII字符来绘制可爱的图表以显示进程的层级信息:选段

root@hecs-272453:~# ps -ef --forest
root        1089       1  0 Sep01 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startup
root      610841    1089  0 12:53 ?        00:00:00  \_ sshd: root@pts/0
root      610935  610841  0 12:53 pts/0    00:00:00      \_ -bash
root      613573  610935  0 13:32 pts/0    00:00:00      |   \_ ps -ef --forest
root      610950  610841  0 12:53 ?        00:00:00      \_ /usr/lib/openssh/sftp-server
root        1592       1  0 Sep01 ?        00:04:22 ./telescope

这种格式可以轻而易举地跟踪子进程和父进程。

实时监测进程

与ps命令相似,top命令也可以显示进程信息,但采用的是实时方式。

top - 21:10:24 up 10 days, 6:40, 1 user, load average: 0.07, 0.03, 0.00
Tasks: 169 total, 1 running, 168 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.7 us, 0.2 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3719.7 total, 201.9 free, 1160.1 used, 2357.6 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2226.5 avail Mem

	PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                           
   8766 lxd       20   0  352172 106016  14464 S   1.7   2.8 225:30.61 opsrv                             
	732 root      20   0 1357412  25580  12056 S   0.3   0.7  11:03.73 containerd                        
   7554 huazi     20   0 3642944 410132  24472 S   0.3  10.8  15:09.12 java                              
   7609 root      20   0  720520   6684   4896 S   0.3   0.2   0:29.88 containerd-shim                   
 937455 lxd       20   0  213008  13220  10836 S   0.3   0.3   0:00.59 postgres                          
	  1 root      20   0  167724  12884   7980 S   0.0   0.3   0:09.86 systemd                           
	  2 root      20   0       0      0      0 S   0.0   0.0   0:00.03 kthreadd                          
	  3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                            
	  4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                        

输出的第一部分显示的是系统概况:
第一行显示了 当前时间、系统的运行时长、登录的用户数以及系统的平均负载。(平均负载有3个值,分别是最近1分钟、最近5分钟和最近15分钟的平均负载。值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见。但如果近15分钟内的平均负载都很高,就说明系统可能有问题了。)
第二行显示了进程(top称其为task)概况:多少进程处于运行、休眠、停止以及僵化状态(僵化状态指进程已结束,但其父进程没有响应)
第三行显示了CPU概况。top会根据进程的属主(用户或是系统)和进程的状态(运行、空闲或等待)将CPU利用率分成几类输出
第四行显示了系统的物理内存状态:总共有多少内存、当前用了多少,以及还有多少空闲。
第五行显示了系统交换空间(如果分配了的话)的状态。

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

·PID:进程的PID。
·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允许你修改轮询间隔(polling interval),键入q可以退出top。用户对top命令输出有很大的控制权。利用该工具,你经常能找出占用系统大量资源的罪魁祸首。

结束进程

进程之间通过信号来通信。进程的信号是预定义好的一个消息,进程能识别该消息并决定忽略还是做出反应。进程如何处理信号是由开发人员通过编程来决定的。大多数编写完善的应用程序能接收和处理标准Unix进程信号

image

在Linux中有两个命令可以向运行中的进程发出进程信号:kill和pkill。
要发送进程信号,必须是进程的属主或root用户:

TERM信号会告诉进程终止运行。但不服管教的进程通常会忽略这个请求。如果要强制终止,则-s选项支持指定其他信号(用信号名或信号值)

kill -s hub 7554

该命令将“杀死”所有名称以http起始的进程,比如Apahce Web Server的httpd服务

pkill http*
posted @   向qian看!  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
  1. 1 赵雷 我记得
赵雷 - 我记得
00:00 / 00:00
An audio error has occurred.

作词 : 赵雷

作曲 : 赵雷

编曲 : 赵雷

制作人 : 赵雷

我带着比身体重的行李 游入尼罗河底 经过几道闪电 看到一堆光圈 不确定是不是这里

我看到几个人站在一起 他们拿着剪刀摘走我的行李 擦拭我的脑袋 没有机会返回去

直到我听见一个声音 我确定是你

直到我听见一个声音 我确定是你

可你怎记得我

我带来了另界的消息 可我怎么告知你

注定失忆着相遇

我记得这里是片树林 后面有个山坡 山坡上的枣树每当秋天到来 我们把枣装满口袋

我记得这里是片树林 后面有个山坡 山坡上的枣树每当秋天到来 我们把枣装满口袋

我记得除了朋友我还 做过你的叔父 你总喜欢跟在我的屁股后面 只是为了那几个铜钱

我记得我们曾是恋人 后来战争爆发 你上战场后就再也没有回来 直到收不到你的信

我们总这样重复分离 却要重新开始 相互送别对方 说着来世再见 再次失忆着相聚

呜 呜 呜 呜…

呜 呜 呜 呜…

快来抱抱 快来抱抱我

呜 呜 呜 呜…

快来抱抱 快来抱抱我

在路上我遇到了一位故去多年的人 她是如此年轻 扎着过肩马尾 露出和你一样的笑

在路上我遇到了一位故去多年的人 她是如此年轻 扎着过肩马尾 露出和你一样的笑

她和我讲了很多关于你成长的故事 在星空另一端 思念从未停止 如同墓碑上的名字

不要哭我最亲爱的人 我最好的玩伴 时空是个圆圈 直行或是转弯 我们最终都会相见

不要哭我最亲爱的人 我最好的玩伴 时空是个圆圈 直行或是转弯 我们最终都会相见

在城池的某个拐角处 在夕阳西下时 在万家灯火的某一扇窗纱里 人们失忆着相聚

呜 快来抱抱 快来抱抱我

呜 快来抱抱 快来抱抱我

呜 快来抱抱 快来抱抱我 我终于找到你

呜 快来抱抱 快来抱抱我 我终于找到你

电吉他 : 刘磊/谢星

电吉他 : 刘磊/谢星

电吉他 : 刘磊/谢星

贝斯 : Damien Banzigou

鼓 : Chris Trzcinski

钢琴 : 姜伯虎

打击乐 : 刘恒/Chris Trzcinski

管风琴 : 赵雷

口琴 : 赵雷

和声 : 朱莉/旭东

录音师 : 张俊

混音师 : 时俊峰

录音室 : 摩登天空/55TEC

录音助理 : 陈彬彬/朱莉

母带工作室 : Sterling Sound

母带工程师 : Randy Merrill

封面设计 : 韩东/小强/阿穆隆

点击右上角即可分享
微信分享提示