Linux系统之smem命令的基本使用

news2024/11/23 18:45:59

Linux系统之smem命令的基本使用

  • 一、smem命令介绍
  • 二、smem命令的使用帮助
    • 2.1 smem命令的help帮助信息
    • 2.2 smem命令的语法解释
  • 三、smem工具安装
    • 3.1 安装epel
    • 3.2 搜索smem包
    • 3.3 安装smem
  • 四、smem命令的基本使用
    • 4.1 查看内存概览
    • 4.2 查看内存占用百分比
    • 4.3 查看系统内存使用情况
    • 4.4 显示单位后缀
    • 4.5 对结果排序
  • 五、显示图表
    • 5.1 安装python
    • 5.4 显示饼状图和柱状图
  • 六、使用注意事项

在这里插入图片描述

一、smem命令介绍

smem 是一个用于Linux系统的命令行工具,它提供了比传统内存报告工具(如 freetop)更为详细和高级的内存使用情况分析。smem 的关键特性是它能够报告 PSS(Proportional Set Size),这一指标在理解和分析现代多进程、特别是使用共享库和内存的系统中的内存消耗时更为准确。

二、smem命令的使用帮助

2.1 smem命令的help帮助信息

使用–help,查询 smem命令的help帮助信息。

[root@jeven ~]# smem --help
Usage: smem [options]

Options:
  -h, --help            show this help message and exit
  -H, --no-header       disable header line
  -c COLUMNS, --columns=COLUMNS
                        columns to show
  -t, --totals          show totals
  -R REALMEM, --realmem=REALMEM
                        amount of physical RAM
  -K KERNEL, --kernel=KERNEL
                        path to kernel image
  -m, --mappings        show mappings
  -u, --users           show users
  -w, --system          show whole system
  -P PROCESSFILTER, --processfilter=PROCESSFILTER
                        process filter regex
  -M MAPFILTER, --mapfilter=MAPFILTER
                        map filter regex
  -U USERFILTER, --userfilter=USERFILTER
                        user filter regex
  -n, --numeric         numeric output
  -s SORT, --sort=SORT  field to sort on
  -r, --reverse         reverse sort
  -p, --percent         show percentage
  -k, --abbreviate      show unit suffixes
  --pie=PIE             show pie graph
  --bar=BAR             show bar graph
  -S SOURCE, --source=SOURCE
                        /proc data source

2.2 smem命令的语法解释

选项描述
-h, --help显示帮助信息并退出
-H, --no-header不显示表头行
-c COLUMNS, --columns=COLUMNS指定显示的列
-t, --totals显示总计
-R REALMEM, --realmem=REALMEM设置物理RAM的总量
-K KERNEL, --kernel=KERNEL指定内核镜像路径
-m, --mappings显示内存映射信息
-u, --users按用户分组显示内存使用情况
-w, --system显示整个系统的内存使用情况
-P PROCESSFILTER, --processfilter=PROCESSFILTER使用正则表达式过滤进程
-M MAPFILTER, --mapfilter=MAPFILTER使用正则表达式过滤内存映射
-U USERFILTER, --userfilter=USERFILTER使用正则表达式过滤用户
-n, --numeric输出数值形式,不带单位
-s SORT, --sort=SORT指定排序依据的字段
-r, --reverse反转排序顺序
-p, --percent显示百分比
-k, --abbreviate显示单位后缀,如KB, MB, GB等
--pie=PIE显示饼状图
--bar=BAR显示柱状图
-S SOURCE, --source=SOURCE指定 /proc 数据源,用于获取内存使用信息

三、smem工具安装

3.1 安装epel

执行以下命令,安装epel源。

yum install -y epel-release

在这里插入图片描述

3.2 搜索smem包

执行以下命令,搜索smem包。

yum search smem

在这里插入图片描述

3.3 安装smem

直接使用yum安装smem包

 yum install smem -y

在这里插入图片描述

四、smem命令的基本使用

4.1 查看内存概览

直接使用smem命令,将显示一个简要的内存使用概览,无参数时显示所有进程的内存使用情况。

smem

在这里插入图片描述

其中几个主要参数意思:

  • VSS – Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

  • RSS – Resident Set Size 实际使用物理内存(包含共享库占用的内存)

  • PSS – Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

  • USS – Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

4.2 查看内存占用百分比

参数-p 查看耗用内存情况的百分比, 这个命令会列出所有运行进程及其PSS值,按PSS大小降序排列,帮助识别内存消耗较高的进程。

   smem -p

在这里插入图片描述

4.3 查看系统内存使用情况

使用以下命令,查看系统内存占用的整体情况。

[root@jeven ~]# smem -w
Area                           Used      Cache   Noncache
firmware/hardware                 0          0          0
kernel image                      0          0          0
kernel dynamic memory       1330796    1018196     312600
userspace memory            1068992     228016     840976
free memory                 5590492    5590492          0

4.4 显示单位后缀

可以使用-k选项,显示单位后缀。

[root@jeven ~]# smem -wk
Area                           Used      Cache   Noncache
firmware/hardware                 0          0          0
kernel image                      0          0          0
kernel dynamic memory          1.3G     994.3M     305.5M
userspace memory               1.0G     222.7M     821.4M
free memory                    5.3G       5.3G          0

4.5 对结果排序

使用以下命令,排序并显示内存使用最多的进程。

[root@jeven ~]# smem -rk --sort pss |head
  PID User     Command                         Swap      USS      PSS      RSS
10396 polkitd  mysqld --default-authentica        0   200.3M   200.3M   200.3M
10775 gdm      /usr/bin/gnome-shell               0   106.2M   113.3M   130.8M
11900 root     /data/fastgithub_linux-x64/        0    99.3M    99.7M   101.7M
 9546 root     /usr/bin/dockerd -H fd:// -        0    68.0M    68.1M    69.3M
11218 102      /usr/sbin/mysqld --basedir=        0    48.9M    49.0M    49.9M
 9336 root     /usr/bin/containerd                0    47.6M    47.6M    48.1M
11920 root     dnscrypt-proxy/dnscrypt-pro        0    17.0M    17.0M    17.0M
10714 root     /usr/bin/X :0 -background n        0    10.9M    15.7M    23.1M
 9345 root     /usr/sbin/libvirtd                 0    13.1M    14.3M    20.0M

五、显示图表

5.1 安装python

执行以下命令,安装python。

yum install python-matplotlib python-tk -y

在这里插入图片描述

5.4 显示饼状图和柱状图

生成一张进程的 PSS 和 RSS 值的条状图,纵坐标为每一个进程的 PSS 和 RSS 值,横坐标为 root 用户的所有进程(的 ID)

smem --userfilter="root" --bar pid -c"pss rss"

在这里插入图片描述

  • 显示饼状图
smem --userfilter="root" --pie name 

在这里插入图片描述

六、使用注意事项

在使用 smem 命令时,有几个注意事项可以帮助你更有效地利用这个工具并避免潜在的误解或错误。以下是几点重要的使用注意事项:

  1. 权限要求:通常,非根用户也可以运行 smem 来查看内存使用概况,但要获取更详细的进程信息(如特定用户的内存使用情况),可能需要提升至 root 权限。

  2. 理解内存术语smem 使用了几个关键的内存度量标准,如 RSS(Resident Set Size)、PSS(Proportional Set Size)和 USS(Unique Set Size)。了解它们的含义对于正确解读报告至关重要。PSS 特别有用,因为它考虑了共享库的分配,提供了进程实际消耗内存的更准确视图。

  3. 单位意识:使用 -k选项来控制报告中的内存单位,确保你清楚当前的显示单位,以免对数值产生误解。

  4. 实时性和准确性:虽然 smem 提供了详尽的内存使用信息,但它提供的快照反映了命令执行那一刻的系统状态。对于实时监控,可能需要定期运行 smem 并对比结果。

  5. 性能影响:在高负载系统上频繁运行 smem(尤其是带有详细报告选项如 --report top)可能会对系统性能造成轻微影响,因为这涉及到收集和处理大量进程信息。

  6. 内存类型区分smem 可以区分不同类型的内存使用(如物理内存、交换空间和内核缓冲/缓存),理解这些分类有助于深入分析系统内存状况。

  7. 与其它工具结合使用:尽管 smem 功能强大,但在某些情况下,结合使用 free, top, 或 ps 等其他命令可以获得更全面的系统性能视图。

  8. 更新与兼容性:确保你的 smem 版本是最新的,以便获得最佳功能和兼容性。旧版本可能缺少新特性和修复。

  9. 输出解析:当输出被重定向或管道传输给其他程序时,注意格式设置(如 CSV 输出),并验证输出是否符合后续处理工具的预期格式。

  10. 文档与帮助:遇到疑问时,查阅 smem 的官方文档或使用 man smem 查看手册页,可以提供更详细的命令选项和使用案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FANUC机器人4种启动方式的区别

FANUC机器人4种启动方式的区别 1.初始化启动 执行初始化启动时,删除所有程序,所有设定返回标准值。 初始化启动完成时,自动执行控制启动。 说明: 执行初始化启动时,删除所有程序,所有设定返回标准值。初始化启动完成时,自动执行控制启动。执行初始化启动时,程序、设定等…

32+综述!百位大佬联袂解析“One Health”时代下新污染物对全球健康的影响

如果你关注环境健康,那么会发现以上研究发现层出不穷,新污染物正在“潜移默化”悄悄改变我们的个体健康和生存环境! 新污染物是全球经济快速发展的“产物”。例如,微塑料作为一种经常出现的新污染物,可作为载体传播和…

Pikachu靶场--暴力破解

实验前的准备 问题解决 PHPStudy(小皮)V8.1安装后启动Apache报错AH00526: Syntax error 【数据库连接问题】【靶场访问错误】 抓不到本地靶场包的原因及解决方法_pakachu抓不到包 设置代理 BP添加和选择代理 火狐浏览器-->设置-->拓展-->搜索…

臻奶惠的行业优势与市场竞争力解析

臻奶惠在智能售货机领域深耕多年,其加盟合作模式在行业中展现出了多方面的优势。以下是对该公司智能售货机加盟优势的深入分析: 技术先进性: 臻奶惠智能售货机以高度自动化的运营模式著称,特别是在自动补货、远程监控和数据分析…

Git仓库中文件的状态

0 Preface/Foreword 1 文件状态 文件包含以下4个状态: untracked,未跟踪,表示该文件在文件夹中,但是没有加入到git 仓库中进行版本管控。可以通过git add命令将该文件增加到git 仓库中。从untracked变为staged。unmodified&…

夏日炎炎,护牙不闲——口腔问诊小程序开发助你笑口常开

近年来,“口呼吸”、“牙齿矫正”、“美牙贴片”等词越来越多的出现在大众的视野中,口腔健康成为了人们关注的新热点。但是市面上的口腔诊所数量众多又参差不齐,如何选择最合适的口腔诊所是人们面对的新问题。为了有效解决这一现状&#xff0…

Linux命令详解(1)

在Linux操作系统中,命令行界面(CLI)是一个强大的工具,它允许用户通过键入命令来与系统交互。无论是系统管理员还是普通用户,掌握一些基本的Linux命令都是非常重要的。在本文中,我们将探讨一些常用的Linux命…

OCP-042之:Oracle实例管理

2. Oracle实例管理 2.1 Instance管理 Oracle实例(instance)是一组Oracle后台进程和内存结构的集合。 后台进程主要包括SMON,PMON,DBWR,CKPT和LGWR等;内存结构包括数据库高速缓冲区、重做日志缓冲区、共享池、大池等组成系统全局区(SGA)的重要组件。实例主要实现对数据库的…

【论文速读】| 通过大语言模型从协议实现中推断状态机

本次分享论文:Inferring State Machine from the Protocol Implementation via Large Language Model 基本信息 原文作者:Haiyang Wei, Zhengjie Du, Haohui Huang, Yue Liu, Guang Cheng, Linzhang Wang, Bing Mao 作者单位:南京大学&#…

12V转5V3A固定输出电源转换芯片

AH8642A是一款高效的12V转5V固定输出电源转换芯片,适用于车载充电器、适配器以及电池充电器等应用场景。该芯片具有SOP-8封装,使得其具有易于安装和组装的特性,非常适合于生产厂家和消费者使用。 其主要特点包括: 1. 固定输出电压…

【Win】打造个性化的Windows锁屏:从移除小部件到隐藏锁屏

移除锁屏小部件 如果您是Windows 11用户并且安装了最新版本的Windows 11,您可能已经注意到锁屏上的小部件。如果您不希望Windows 11在锁屏上显示小部件,您可以禁用此功能。本文展示了如何在Windows 11中移除锁屏小部件。 要移除Windows 11的锁屏小部件&…

通过自定义线程池初步理解JAVA线程池

减少线程上下文切换 生产者提供的任务对象交给线程池,线程池没有线程的话就创建线程执行它。有线程但是数量不足就放入(任务)阻塞队列。 自定义线程池 组件: 线程池:存储可重用的线程(相当于消费者&#x…

快速上手Selenium:环境搭建详解

一、下载安装python 安装Python是进入编程世界的第一步,下面将详细指导您如何在不同操作系统上安装Python,并确保安装成功后的环境配置。具体分析如下: 下载Python 选择版本:打开Python官网的下载页面,根据需求选择适…

Java 反射的基本概念及其在框架中的应用

Java反射(Reflection)是Java语言中的一种特性,它允许程序在运行时检查和操作类、接口、字段和方法。反射提供了一种机制,使得Java程序可以动态地加载类、创建对象、调用方法、访问和修改字段。反射是Java动态性的重要体现&#xf…

python __init__.py 文件案例练习

通过一些案例练习来更好地理解 __init__.py 的用法。我们将创建一个简单的 Python 包,并在 __init__.py 中实现不同的功能。 案例一:基本包结构 创建包目录结构: mypackage/__init__.pymodule1.pymodule2.py实现 module1.py 和 module2.py: # mypackage/module1.py def fu…

微服务开发与实战Day05 - 服务保护和分布式事务

一、服务保护和分布式事务 二、雪崩问题 微服务调用链路中某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 1. 雪崩问题产生的原因是什么? 微服务相互调用,服务提供者出现故障或阻塞;服务调用者没有做…

OpenGauss数据库-9.模式管理

第1关:创建模式 gsql -d postgres -U gaussdb -W passwd123123; CREATE DATABASE test_db; \c test_db passwd123123 CREATE SCHEMA new_schema AUTHORIZATION gaussdb; CREATE TABLE new_schema.mytable (my_id int, my_info varchar(36)); 第2关:管理…

asyncio协程提高执行效率

from fastapi import FastAPI import asyncioapp FastAPI()async def task1():# 模拟执行任务1print("开始执行任务1")await asyncio.sleep(1)print("结束执行任务1")return "Result from Task 1"async def task2():# 模拟执行任务2print("…

Linux:进程优先级

文章目录 基本概念查看进程优先级PRI & NI 更改优先级Linux中进程优先级的实现原理上下文 基本概念 CPU资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用&a…

【ARM Cache 与 MMU 系列文章 7.4 -- ARMv8 MMU 配置 寄存器使用介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 MMU 转换控制寄存器 TCR_ELxTCR_ELx 概览TCR_ELx 寄存器字段详解TCR 使用示例Normal MemoryCacheableShareability MMU 内存属性寄存器 MAIR_ELxMAIR_ELx 寄存器结构内存属性字段Devic…