使用PS命令在Linux中查看进程性能指标

最近服务器总是由于内存占用问题,或者CPU占用问题导致缓慢甚至崩溃。因此不得不在Linux系统中监控几个重要的服务,查看CPU或者内存的使用情况,并跟踪可能出现的问题。之前对于在Linux查看进程的CPU和内存使用情况略知一二,但是完全达不到能深入调试的地步。大概就是使用top命令或者ps命令查看一下当前系统中占用CPU或者内存最高的进程是什么,但是这个是完全不够的。

top命令的简单用法

这里就不详细说明top了,百度上能搜到很多内容。使用top命令在终端显示CPU和内存的使用情况。在开启状态下,可以直接键入P(大写的P)和M(大写的M)分别按照CPU的占用排序或者按照内存的占用排序。另外直接键入数字1可以查看多核CPU中每一个核的使用情况。如图:
top命令样例
这里需要说明内存的问题。total是内存总量,free是空闲内存,used是使用内存,buff/cache是buff(在内存中准备写入磁盘的数据)和cache(在内存中从磁盘读出待CPU使用的数据)使用的内存总数。

ps命令的简单用法

ps命令是另一个非常常用的查看进程信息的命令。通常用法是:

ps -ef #UNIX格式
ps aux #BSD格式

ps命令自定义输出

只是简单查看某个进程的信息以上命令已经够了。但是各有各的利弊。比如-ef没有显示CPU和内存是使用情况,aux没有显示父进程的PID。我们可以自定义ps命令的输出格式,例如:

ps axo user,pid,ppid,pcpu,pmem,start_time,time,command

以上命令显示了进程的用户,PID,父进程的PID,CPU使用量,内存使用量,开始日期,cpu的累计使用时长,和完整的进程命令。
ps自定义输出
我们也可以设置默认的排序字段和排序方式,例如:

ps axo user,pid,ppid,pcpu,pmem,start_time,time,command --sort=-pcpu 

以上命令会按照CPU的使用量降序排列。

使用ps命令查看进程间关系

ps可以显示一个进程的父进程。我们可以通过以下命令显示父进程的信息:

ps o user,pid,ppid,pcpu,pmem,start_time,time,command p 32654

以上是显示进程PID为32654的进程信息。

使用ps命令查看进程的子线程

一个进程可能有很多子线程,要了解一个进程的线程信息,可以使用以下命令:

ps o user,pid,ppid,pcpu,pmem,start_time,time,command p 32654 m

以上是显示进程PID为32654的进程和线程信息。

ps命令的高阶用法

ps命令除了显示进程信以外,可以使用管道做一些非常方便的日常操作。最基本的方式如下:

ps aux | more #不解释

使用ps命令批量终止进程

ps和awk合作可以批量关闭进程。比如在我的服务上跑了很多名为thomas的进程,我们可以使用以下命令批量删除:

ps aux | grep thomas| grep -v grep | awk '{print $2}'|xargs kill

使用ps命令显示CPU使用率大的进程

ps和awk合作也可以显示某些CPU使用率比较大的进程。比如显示所有CPU使用率大于5的进程,我们可以使用以下命令:

ps aux | grep thomas|  grep -v grep | awk '{ if ($3 > 5) print $1, $2, $3, $4, $NF}'

以上命令可以显示CPU使用率大于5的所有名字中包含thomas的进程,并显示第1,2,3,4和最后一列。如果要显示所有列,修改print的参数为$0,如下:

ps aux | grep thomas|  grep -v grep | awk '{ if ($3 > 5) print $0}'

使用ps命令显示多个进程总的CPU使用量

例如我们的服务器开了好几个名为thomas的进程,我们可以通过以下命令统计该进程总的CPU使用量:

ps aux | grep thomas | grep -v grep | awk '{cpu+=$3}END{print cpu}'
Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。