前一段时间参加面试,被问到一个场景题:就比如说我们发现一台 Linux 的服务器,它的一些系统资源,比如说 CPU 内存都涨得比较厉害的。所以现在需要登录到这台机器上去,用什么样的命令去可以看到是哪些进程导致了这个 CPU 或者内存的飙升我可以用哪些命令去看。翻译过来就是在Linux下查看系统中占用内存和CPU最多的进程。可惜当时没有太理解。以下是后期查找到的相关的应该使用的命令:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
ps aux|head -1
ps aux|grep -v PID|sort -rn -k +3|head
可以使用以下命令查使用内存最多的10个进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
或者top (然后按下M,注意这里是大写)
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
或者top (然后按下P,注意这里是大写)
该命令组合实际上是下面两句命令:
ps aux|head -1 ps aux|grep -v PID|sort -rn -k +3|head
其中第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)
。
接下来的grep -v PID
是将ps aux
命令得到的标题去掉,即grep
不包含PID
这三个字母组合的行,再将其中结果使用sort排序。
sort -rn -k +3
该命令中的-rn的r表示是结果倒序排列,n
为以数值大小排序,而-k +3
则是针对第3列的内容进行排序,再使用head
命令获取默认前10
行数据。(其中的|表示管道操作)
PID
:进程的ID
USER
:进程所有者PR
:进程的优先级别,越小越优先被执行NInice
:值VIRT
:进程占用的虚拟内存RES
:进程占用的物理内存SHR
:进程使用的共享内存S
:进程的状态。S
表示休眠,R
表示正在运行,Z
表示僵死状态,N
表示该进程优先值为负数%CPU
:进程占用CPU
的使用率%MEM
:进程使用的物理内存和总内存的百分比TIME+
:该进程启动后占用的总的CPU
时间,即占用CPU
使用时间的累加值。COMMAND
:进程启动命令名称可以使用以下命令查使用内存最多的K个进程
ps -aux | sort -k4nr | head -K
如果是10
个进程,K=10
,如果是最高的三个,K=3
说明:ps -aux
中(a
指代all
——所有的进程,u
指代userid
——执行该进程的用户id
,x
指代显示所有程序,不以终端机来区分)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]
sort -k4nr
中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n
指代numberic sort
,根据其数值排序;r
指代reverse
,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM
在第4
个位置,根据%MEM
的数值进行由大到小的排序。
head -K
(K
指代行数,即输出前几位的结果)
|
为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。
可以使用下面命令查使用CPU最多的K个进程
方法1:
ps -aux | sort -k3nr | head -K
方法2:top (然后按下P,注意大写)
转载自:https://linux265.com/news/3818.html