Linux下找出吃内存的方法

几个 个 Linux 内存查看方法

1、free命令

2、 vmstat命令

3、 /proc/meminfo 命令

4、 top命令

5、 htop 命令

6、查看进程内存信息

内存性能指标

系统内存使用情况,比如已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量等。 共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊 的缓存。 可用内存是新进程可以使用的最大内存,它包括剩余内存和可回收缓存。 缓存包括两部分,一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快以后再次访 问的速度。另一部分,则是 Slab 分配器中的可回收内存。 缓冲区是对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据。这样,内核就可以把分散的写集中 起来,统一优化磁盘写入。

2. 进程内存使用情况,比如进程的虚拟内存、常驻内存、共享内存以及 Swap 内存等。 虚拟内存,包括了进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内存等。这里要注 意,已经申请的内存,即使还没有分配物理内存,也算作虚拟内存。常驻内存是进程实际使用的物理内存,不过,它不包括 Swap 和共享内存。 共享内存,既包括与其他进程共同使用的真实的共享内存,还包括了加载的动态链接库以及程序的代码 段等。

Swap 内存,是指通过 Swap 换出到磁盘的内存。 当然,这些指标中,常驻内存一般会换算成占系统总内存的百分比,也就是进程的内存使用率。

3. 缺页异常。 系统调用内存分配请求后,并不会立刻为其分配物理内存,而是在请求首次访问时,通过缺页异常来分 配。缺页异常又分为下面两种场景。 可以直接从物理内存中分配时,被称为次缺页异常。 需要磁盘 I/O 介入(比如 Swap)时,被称为主缺页异常。 主缺页异常升高,就意味着需要磁盘 I/O,那么内存访问也会慢很多。

4. Swap 的使用情况,比如 Swap 的已用空间、剩余空间、换入速度和换出速度等。 已用空间和剩余空间很好理解,就是字面上的意思,已经使用和没有使用的内存空间。 换入和换出速度,则表示每秒钟换入和换出内存的大小。

内存性能工具

一、free命令

最常用的内存工具,可以查看系统的整体内存和 Swap 使用情况可以显示当前系统未使用的和已使用的 内存数目

1. free 命令语法:

free [options]

free 命令选项:

. free 命令实例

二、vmstat 指令

vmstat命令是最常见的Linux/Unix监控工具,用于查看系统的内存存储信息,是一个报告虚拟内存统计 信息的小工具,属于sysstat包。可以动态查看内存变化,还可以区分缓存和缓冲区、Swap 换入和换出 的内存大小。

vmstat 命令报告包括:进程、内存、分页、阻塞 IO、中断、磁盘、CPU。 可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读 写情况。 这个命令一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而 不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

3. 常见性能问题分析

IO/CPU/men连锁反应

内存不足

io瓶颈

CPU瓶颈:load,vmstat中r列

三、/proc/meminfo

用途:用于从/proc文件系统中提取与内存相关的信息。这些文件包含有 系统和内核的内部信息。其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只 是看起来不太直观。

四、top 指令

Top 命令提供了对系统当前工作负载的简单和动态的实时概述。由 Linux 内核处理的线程和进程列 表显示为一个基于交互式列的汇总显示,其中进程的统计数据和资源使用情况显示在上半部分,而 当前活动的进程列表显示在下半部分

用途:用于打印系统中的CPU和内存使用情况。输出结果中,可以很清晰的看出已用和可用内存的资源 情况。top 最好的地方之一就是发现可能已经失控的服务的进程 ID 号(PID)。有了这些 PID,可以对 有问题的任务进行故障排除(或 kill)。

第一行,任务队列信息,同 uptime 命令的执行结果

系统时间:02:19:10 运行时间:up 2:26 min, 当前登录用户:1 user 负载均衡(uptime) load average: 0.00, 0.06, 0.07 average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除 以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行,Tasks — 任务(进程)

总进程:229 total, 运行:1 running, 休眠:163 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息

0.7%us【user space】— 用户空间占用CPU的百分比。1.0%sy【sysctl】— 内核空间占用CPU的 百分比。0.0%ni【】— 改变过优先级的进程占用CPU的百分比 97.9%id【idolt】— 空闲CPU百分 比 0.3%wa【wait】— IO等待占用CPU的百分比 0.0%hi【Hardware IRQ】— 硬中断占用CPU的百 分比 0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行,内存状态

2017504 total, 653616 free, 1154200 used, 209688 buff/cache【缓存的内存量】

第五行,swap交换分区信息

998396 total, 771068 free, 227328 used. 635608 avail Mem

第七行以下:各进程(任务)的状态监控

PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示 低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES — 进程使用的、未被 换出的物理内存大小,单位kb。RES=CODE+DATA SHR — 共享内存大小,单位kb S —进程状态。

D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU — 上次更新到现在的CPU

时间占用百分比 %MEM — 进程使用的物理内存百分比 TIME+ — 进程使用的CPU时间总计,单位

1/100秒 COMMAND — 进程名称(命令名/命令行)

五、htop 指令

htop 它类似于 top 命令,但可以让在垂直和水平方向上滚动,所以可以看到系统上运行的所有进程,以 及他们完整的命令行。 可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。

htop快照:

六、查看指定进程的内存

通过/proc/procid/status查看进程内存

以上内存性能工具使用总结

首先,用 free。这是个。相对应的,可以用 top 或 p,查看进程的内存使用情况。 然后,通过 proc 文件系统,找到了内存指标的来源;并通过 vmstat,动态观察了内存的变化情况。 接着,可以使用cachestat ,查看整个系统缓存的读写命中情况,并用 cachetop 来观察每个进程缓存的 读写命中情况。 再接着,用 vmstat看内存泄露情况,然后用 memleak给出的内存分配栈,确认内存泄漏情况并找到内 存泄露位置。 最后,通过 cachetop,可以找到缓冲区升高的根源;通过对比剩余内存跟 /proc/zoneinfo 的内存阈, 找出Swap 所影响的进程。

常用清理命令

清缓存

请交换空间

总结

系统内存不足会导致OOM问题,可在/var/log中查看

也有可能是内存泄露(memory leak),在实际环境中可能是Apache、MySQL、Java程序、http大量请 求等导致 常见的优化结局思路:

最好禁止 Swap。如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的使用倾向。 减少内存的动态分配。比如,可以使用内存池、大页(HugePage)等。 尽量使用缓存和缓冲区来访问数据。比如,可以使用堆栈明确声明内存空间,来存储需要缓存的数据; 或者用 Redis 这类的外部缓存组件,优化数据的访问。 使用 cgroups 等方式限制进程的内存使用情况。这样,可以确保系统内存不会被异常进程耗尽。 通过 /proc/pid/oom_adj ,调整核心应用的 oom_score。这样,可以保证即使内存紧张,核心应用也不 会被 OOM 杀死。

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

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

相关文章

detectron2环境搭建及自定义coco数据集(voc转coco)训练

detectron2建议ubuntu进行环境搭建,Windows大概率报错 一 环境搭建 创建虚拟环境 conda create -n detectron2 python3.8 -y conda activate detectron2后面下载源代码建议存到git中再git clone git clone https://github.com/facebookresearch/detectron2.git …

Python中的del用法

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题。 python的del不同于C的fre…

使用Drupal管理小型项目?试试Docker快速部署Drupal结合内网穿透实现远程访问

🎬 鸽芷咕:个人主页 🔥个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal…

SUSE 12双网卡绑定

原创作者:运维工程师 谢晋 SUSE 12双网卡绑定 客户环境及需求网卡绑定 客户环境及需求 客户一台物理机安装了SUSE 12的操作系统,需要将ETH5和ETH7双网卡聚合为一块虚拟网卡,以保证一块网卡故障不会影响系统正常运行。 网卡绑定 输入命令c…

HBase学习笔记(1)—— 知识点总结

目录 HBase概述 HBase 基本架构 HBase安装部署启动 HBase Shell HBase数据读写流程 HBase 优化 HBase概述 HBase是以 hdfs 为数据存储的,一种分布式、非关系型的、可扩展的 NoSQL 数据库 关系型数据库和非关系型数据库的区别: 关系型数据库和非关…

windows系统自动更新中断电导致系统无法开启

windows系统自动更新中断电导致系统无法开启 现象原因解决进入bios拆机更新系统重新安装内存条 现象 前一天晚上电脑出现合上之后风扇继续转的现象,拔掉电源后,第二天开不了机。现象为按压电源键,电源键和充电指示灯亮一次后熄灭&#xff0c…

每天一点python——day65

#每天一点Python——65 #字符串的内容对齐操作类似于word中左对齐、右对齐、居中对齐如图 #例: s1hello,python print(s1.center(20,*))#设置宽度20,填充图是*s1有12个字符,这个字符串的宽度设置为20, 20-128 因为center是居中对齐…

后端面试问题(学习版)

JAVA相关 JAVA语言概述 1. 一个".java"源文件中是否可以包含多个类?有什么限制? 可以。 一个源文件可以声明多个类,但是最多只能有一个类使用public进行声明 且要求声明public的类的类名与源文件相同。 2. Java的优势&#xff…

MySQL进阶_1.逻辑架构和SQL执行流程

文章目录 第一节、逻辑架构剖析1.1、服务器处理客户端请求1.2、Connectors1.3、第1层:连接层1.4、第2层:服务层1.5、 第3层:引擎层1.6、 存储层1.7、小结 第二节、SQL执行流程2.1、查询缓存2.2、解析器2.3、优化器2.4、执行器 第三节、数据库…

安装dubbo-admin报错node版本和test错误

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :dubbo-admin安装 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台&#xff0…

【Linux】进程的基本概念和进程控制

TOC 目录 一.冯诺依曼体系结构 二. 操作系统(Operator System) 概念 设计OS的目的 定位 总结 系统调用和库函数概念 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程标识符 进程状态 D--深度…

【笔记】原型和原型链(持续完善)

概念 原型:函数都具有 prototype 属性,称之为原型,也称之为原型对象 1.1 原型可以放一些属性和方法,共享给实例对象使用(也就是原生方法)。 1.2 原型可以做继承原型链:对象都有 __proto__ 属性…

Qt 4.8.6 的下载与安装

Qt 4.8.6 的下载与安装 Qt 4.8.6 的下载与安装下载并解压 MinGW 4.8.2Qt4.8.6 库的安装Qt Creator 3.3.0 的安装配置 Qt Creator测试 Qt 4.8.6 的下载与安装 学习《Qt Creator快速入门》(第3版),书里面要用 Qt:phonon,这个组件要…

CentOS7 安装Jenkins 2.414.3 详细教程

目录 1、前提条件硬件软件-java11安装 2、安装jenkins3、启动jenkins配置用户和用户组配置JAVA_HOME 4、配置Jenkins一直处于启动状态5、测试Jenkins是否可以访问以及配置6、访问Jenkins系统 1、前提条件 硬件 内存 4G ; 硬盘 20G 软件-java11安装 上传文件jdk-11.0.21_lin…

Vue+OpenLayers 创建地图并显示鼠标所在经纬度

1、效果 2、创建地图 本文用的是高德地图 页面 <div class"map" id"map"></div><div id"mouse-position" class"position_coordinate"></div>初始化地图 var gaodeLayer new TileLayer({title: "高德地…

Perl语言用多线程爬取商品信息并做可视化处理

首先&#xff0c;我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后&#xff0c;我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中&#xff0c;我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…

基于Fuzzing和ChatGPT结合的AI自动化测试实践分享

一、前言 有赞目前&#xff0c;结合insight接口自动化平台、horizons用例管理平台、引流回放平台、页面比对工具、数据工厂等&#xff0c;在研发全流程中&#xff0c;已经沉淀了对应的质量保障的实践经验&#xff0c;并在逐渐的进化中。 在AI能力大幅进步的背景下&#xff0c…

Maven 从入门到精通

目录 一. 前言 二. Maven 下载与安装 2.1. 下载 2.2. 安装 三. Maven 核心概念 3.1. POM 3.2. 约定的目录结构 3.3. 坐标 3.4. 依赖管理 3.4.1. 直接依赖和间接依赖 3.4.2. 依赖的排除 3.4.3. 统一的版本管理 3.4.4. 依赖范围 3.5. 仓库 3.6. 生命周期/插件/目标…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点