MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > linux / 正文

Linux内存占用查看利器-smem

2024-11-26 15:16 huorong linux 5 ℃ 0 评论

在Linux系统中,当我们想查看系统内存使用情况的时候,可能首先会想到“free”。查看内存的整体使用情况,“free”命令可以胜任,如果要查看某个指定进程的内存占用,可以选择使用“top”或它的升级版命令“htop”,但你会发现这些命令显示的结果都不直观。比如下面这样:


难道有这么多进程都占用了101G“RES”内存吗?显示不是的,这样的话251GB内存早都撑爆了,这里显示的PID都是线程(可以使用“pstree”命令查看进程和线程的关系图)。再进一步,查看指定进程对“swap”空间的占用情况,这时上面给出的命令就有点力不从心了。

好了,主角“smem”命令登场

“smem”可以直观简洁的显示进程(不是线程)对内存和“swap”空间的占用情况。比如,对进程按对内存的占用大小从高往低排序,仅显示前5个:

aneirin@host-1:~$ sudo smem  -r -k | head -6
  PID User     Command                         Swap      USS      PSS      RSS 
 3752 presto   java -cp /home/presto/prest        0   101.9G   101.9G   102.0G 
85199 hbase    /usr/lib/jvm/java-8-openjdk     7.7G    13.8G    13.8G    13.8G 
77009 hdfs     jsvc.exec -Dproc_datanode -    86.8M    12.5G    12.6G    12.6G 
139749 clickhouse /usr/bin/clickhouse-server      6.7G     5.6G     5.6G     5.6G 
81533 yarn     /usr/lib/jvm/java-8-openjdk   207.2M     2.7G     2.7G     2.7G 

核心参数解释:

USS:Unique Set Size,进程的非共享(Unshared memory)内存占用

PSS:Proportional Set Size,上面的USS加上进程在共享内存中占用的部分

RSS:Resident set size,进程对物理内存的占用,这个值加上“Swap”中的值(被交换到外部文件系统的数据)就是进程整体的内存占用情况

使用“smem”命令可以非常快速的找到占用内存最多的进程,从而在内存吃紧时,对进程做出调整。

工作中常会收到“Swap”空间占用过大导致的告警,使用下面命令让惹祸的进程无处藏身:

sudo smem -s swap -r -k | head -10

注意,如果不使用“sudo”命令仅显示自己创建的进程内存使用情况。

希望这篇文档能帮到正在努力的你,欢迎关注和评论!

Tags:查看linux内存使用情况

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言