ps 和 top 命令常用来查看Linux系统进程相关信息。

ps命令:可以查看进程的瞬间信息。

top命令:可以持续的监视进程的信息。


场景一:如何查看Linux系统中存在mysql、nginx、tomcat进程?

方法一:输入命令:ps -ef|grep 相应的进程名称

输入命令: ps -ef

效果如下:

top显示的pid怎么找到java的id_父进程

上述红色框住的参数含义如下:

UID:用户ID,实际输出的是用户名,如root

PID:当前进程的ID

PPID:当前进程的父进程ID

C:当前进程占用的CPU的百分比

STIME:当前进程启动到现在的时间

TTY:当前进程在哪个终端上运行,若与进程无关,则显示为?,若为pts/0等,则表示由网络连接主机进程。

CMD:命令的名称和参数

关于PID和PPID,我们来看个栗子,如下:


当我们执行:ps-ef 命令之后,看到如下关系图:


top显示的pid怎么找到java的id_top命令_02

可以看到ps -ef这个命令的进程PID为5004,而其父进程号PPID为4945,该4945进程号对应的进程命令为-bash,即表明ps -ef命令是运行在-bash这个shell上,而PID为4945对应的父进程号PPID为4893,该进程是4893,这个进程的命令是sshd,即我们表明我们是通过shell登录进来的,再看PID为1881对应的父进程PPID为1,是命令/sbin/init,这是Linux启动之后第一个被加载的进程。衍生知识点:如果我们是在物理主机上执行ps -ef,追根溯源过程中,一定不会有sshd相关的命令

那么,我们如果想看下是否在ps -ef中输出的命令中是否有mysql相关的行,只需要用grep 来捕获mysql关键字即可,即输入命令:ps -ef|grep mysql

效果如下:


top显示的pid怎么找到java的id_mysql_03


注意:上图中用红色框圈出的问号,表明当前进程与终端运行无关。此时,我们可以判断既然与终端无关,那就是该命令是由Linux系统首次启动时启动的,而不是通过某个具体的终端。测试例子如下:

首先,在某个终端(可能是pts或者tty)关闭mysql,输入命令:service mysqld stop,然后执行命令:service mysqld start,此时,再执行命令:ps -ef|grep mysql,效果如下:


top显示的pid怎么找到java的id_父进程_04


这里,显示了具体终端的类型。

总结:通过TTY的类型,可以知道该进程是否由系统启动时运行的。

方法二:输入命令:ps aux | grep 相应的进程名称

比如:查找是否存在MySQL进程,输入:ps aux|grep mysql,效果如下:


top显示的pid怎么找到java的id_top命令_05


其中各个参数的含义如下:


top显示的pid怎么找到java的id_父进程_06


%CPU:进程占用的CPU百分比;

%MEM:进程占用内存的百分比;

VSZ:进程使用的虚拟内存量(KB);

RSS:进程占用的固定内存量(KB);

START:进程被触发启动的时间;

TIME:进程实际使用CPU运行的时间(注意:这是cpu实际的运行时间);

COMMAND:命令的名称和参数;

问题:如何查看当前进程的内存使用情况,比如项目名称为platform。

输入命令:ps aux|grep platform


top显示的pid怎么找到java的id_top命令_07


注意观察上面用红色框框圈出的参数,都是有用的,第一个1190是当前的进程号,0.3是cpu的使用率,8.9是内存的使用率,4582832单位是KB是虚拟内存的使用率,718104单位是KB是内存的使用率,16:01 是系统的启动时间,如果是具体的时间值时,表示当天16点01分,在当前之前则只显示具体的日期。1:27表示实际使用CPU的时间,可以看到现在时间(23:00)启动了7个小时,CPU的使用时间为1小时27分。

补充:

(1)关于0.3的cpu使用率,我们也可以通过上面的参数计算得到

即CPU的Time的值为1小时27分,而到目前为止总共运行的时间为7个小时,因此,我们大概计算下CPU的平均利用率为:1.5/7=0.214,这与瞬时的0.3大致相吻合。

(2)关于8.9的内存使用率

使用的物理内存为718104Kb,而总的内存我们可以通过free,参数得到:


top显示的pid怎么找到java的id_mysql_08


总的内存为8011936单位是KB,因此,我们可以得到物理内存的使用率:

718104/8011936=0.0896=9%左右

再补充知识点:

如何利用ps aux 将展示的数据按照cpu或者内存进行排序?

按照CPU降序: ps aux --sort=-%cpu

按照内存降序: ps aux --sort=-rss


注意:将-%cpu改为+%cpu则变成CPU升序;-rss改为+rss则变为内存升序。



场景二:如何去动态跟踪指定进程的资源使用情况呢?

动态跟踪的命令有很多,这里用top命令。

输入命令:top -p 进程id,则可以一秒一次跟踪cpu的使用情况。

补充知识点:

(1)top -d 1 -n 1000  这一行命令表示延迟1秒为周期,打印1000次。

(2)在top命令下,输入u,然后输入相应的用户名,则可以查看相应的用户进程,这个命令还是比较好用,比如,我们想看下mysql用户的动态进程信息。


top显示的pid怎么找到java的id_mysql_09


输出mysql用户相关的进程信息,如下:


top显示的pid怎么找到java的id_父进程_10


(2)top 然后输入1,查看各个cpu的使用情况