在日常使用 Linux 系统时,我们有时候会碰到系统很卡顿的情况,这时候该怎么排查呢?其实啊,利用 Linux 里的进程管理命令 ps 和 top 就能帮我们实时监控进程状态,找到问题所在。下面咱就来详细说说这俩命令。
一、ps 命令基础介绍
1.1 什么是 ps 命令
ps 命令就像是 Linux 系统的一个小侦探,它能把当前系统里的进程信息给列出来。比如说,它能告诉我们某个进程是谁在运行的、用了多少 CPU 资源、运行了多久等等。这就好比我们在教室里,想知道每个同学在做什么一样方便。
1.2 ps 命令基本用法
最常用的 ps 命令格式就是 ps aux,这里面的 a 表示显示所有用户的进程,u 是以用户为主的格式输出,x 呢则能显示没有控制终端的进程。下面来看个例子:
# 技术栈:Shell
ps aux
# 这个命令执行后,会列出当前系统中所有用户的进程信息,我们可以从输出里看到进程的各种详细信息,像 CPU 使用率、内存使用率等
1.3 ps 命令输出结果解读
执行完 ps aux 命令后,会得到一大串输出内容,咱们来看看几个重要的列都代表啥意思。
USER:就是运行这个进程的用户是谁,就像我们知道教室里某个活动是哪个同学发起的一样。PID:这是进程的一个唯一编号,每个进程都有自己的 ID,就好比每个同学都有自己的学号。%CPU:表示这个进程占用 CPU 的百分比,数字越大说明这个进程越“耗”CPU。%MEM:是指进程占用内存的百分比,要是这个数字大,就说明它占了不少内存。TIME:进程运行的总时间。COMMAND:就是启动这个进程的命令。
比如说输出里有这么一行:
root 1234 0.1 0.2 123456 1234 pts/0 Ss 10:00 0:01 /usr/bin/bash
这里 root 就是运行进程的用户,1234 是进程 ID,0.1 是 CPU 使用率,0.2 是内存使用率,123456 是进程占用的内存大小,1234 是共享内存大小,pts/0 是控制终端,Ss 是进程状态,10:00 是进程启动时间,0:01 是运行时间,/usr/bin/bash 就是启动进程的命令。
二、ps 命令高级用法
2.1 根据用户过滤进程
有时候我们只想看看某个用户运行的进程,这时候就可以用 -u 参数。比如我们想看看用户 testuser 运行的进程,就可以这么做:
# 技术栈:Shell
ps -u testuser
# 这个命令会只显示 testuser 用户运行的进程信息
2.2 根据进程状态过滤
进程有不同的状态,像运行(R)、睡眠(S)、停止(T)等。我们可以根据状态来筛选进程。比如只显示运行状态的进程:
# 技术栈:Shell
ps aux | grep R
# 先执行 ps aux 列出所有进程,然后通过 grep 过滤出状态为 R 的进程
2.3 按照 CPU 或内存使用率排序
如果我们想找出占用 CPU 或者内存最多的进程,可以对输出进行排序。按 CPU 使用率排序:
# 技术栈:Shell
ps aux --sort=-%CPU
# --sort 表示排序,-%CPU 表示按 CPU 使用率从高到低排序
按内存使用率排序:
# 技术栈:Shell
ps aux --sort=-%MEM
# 同理,-%MEM 表示按内存使用率从高到低排序
三、top 命令基础介绍
3.1 什么是 top 命令
如果说 ps 命令是给进程拍了张照片,那 top 命令就是给进程录了个视频。top 命令能实时动态地显示系统中各个进程的资源占用情况,就像我们在实时看着教室里的同学们在做什么,有没有谁特别活跃。
3.2 top 命令基本用法
直接在终端输入 top 命令就可以启动它:
# 技术栈:Shell
top
# 执行后会进入一个动态界面,不断更新进程的信息
3.3 top 命令界面解读
- 最上面会显示一些系统的总体信息,比如当前时间、系统运行时间、登录用户数、系统负载等。系统负载就像学校门口的拥堵情况,数值越大说明系统越忙。
- 接着是进程列表部分,这里面的列和 ps 命令输出的有很多相似的地方,像 PID、USER、%CPU、%MEM 等。而且这个列表会不断更新,让我们能看到进程的实时状态。
四、top 命令高级用法
4.1 交互式命令操作
在 top 命令的界面里,我们可以通过一些按键来进行交互式操作。比如按 P 键可以按 CPU 使用率排序,按 M 键可以按内存使用率排序。按 q 键则可以退出 top 界面。
4.2 过滤特定的进程
如果我们只想看某个特定用户的进程,或者包含某个关键词的进程,可以用 top 命令的过滤功能。比如只看用户 testuser 的进程:
# 技术栈:Shell
top -u testuser
# 这样就能只显示 testuser 用户的进程信息了
如果要过滤包含某个关键词的进程,在 top 界面按 o 键,然后输入关键词,按回车就可以了。
五、应用场景
5.1 排查系统卡顿问题
当我们感觉系统运行很慢很卡的时候,就可以用 ps 和 top 命令来看看是不是有某个进程占用了过多的 CPU 或者内存资源。比如说通过 top 命令按 CPU 使用率排序,找出占用 CPU 高的进程,然后分析这个进程是不是正常运行的,需不需要关闭。
5.2 监控系统资源使用情况
在日常运维中,我们可以定期使用 ps 命令来查看系统进程的基本信息,用 top 命令实时监控系统资源的使用情况。这样就能及时发现系统的异常,提前做好应对措施,就像我们定期给身体做检查一样。
5.3 性能优化和调优
通过分析进程的资源占用情况,我们可以对系统进行性能优化。比如发现某个进程占用内存过高,就可以看看能不能调整它的配置,减少内存的使用。或者发现某个服务的进程 CPU 使用率一直很高,就可以考虑优化这个服务的代码。
六、技术优缺点
6.1 ps 命令
优点
- 简单易用,能快速获取当前系统进程的基本信息,就像快速拍张照片看看大概情况。
- 输出信息详细,我们可以通过各种参数对输出进行定制,筛选出我们需要的信息。
缺点
- 只能获取某一时刻的进程信息,不能实时动态更新,就像照片只能记录一瞬间的场景。
- 对于复杂的进程信息分析,可能需要结合其他命令来完成。
6.2 top 命令
优点
- 实时动态显示进程的资源占用情况,让我们能及时发现进程的变化,就像看视频一样能看到全过程。
- 具有交互式操作功能,方便我们对进程列表进行排序、过滤等操作。
缺点
- 占用一定的系统资源,因为它要不断更新信息。
- 对于长时间运行的监控任务,输出信息会不断滚动,不利于保存和回顾历史数据。
七、注意事项
7.1 权限问题
有些进程可能只有 root 用户才能查看,如果我们用普通用户执行 ps 或 top 命令,可能看不到某些重要的进程信息。所以在排查问题的时候,如果需要查看所有进程,最好使用 root 用户或者有足够权限的用户。
7.2 资源占用问题
top 命令会占用一定的系统资源,尤其是在系统负载很高的时候,频繁使用 top 命令可能会让系统变得更卡。所以在使用的时候要注意,不要过度使用。
7.3 数据准确性问题
由于系统进程的状态是动态变化的,ps 和 top 命令获取的信息只是某个时刻的快照或者实时情况,可能会存在一定的误差。比如说在我们查看 CPU 使用率的时候,可能由于进程的短暂波动,导致数据不太准确。
八、文章总结
通过本文我们了解了 Linux 系统中非常实用的进程管理命令 ps 和 top。ps 命令能让我们获取系统进程的静态信息,通过各种参数可以对进程信息进行筛选和排序;而 top 命令则能实时动态地显示进程的资源占用情况,还支持交互式操作。这两个命令在排查系统卡顿问题、监控系统资源使用情况以及系统性能优化等方面都有很大的作用。不过在使用过程中,我们也要注意权限问题、资源占用问题和数据准确性问题。总之,掌握好这两个命令,能让我们在 Linux 系统的使用和运维中更加得心应手。
Comments