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…

大厂真题:【位运算】米哈游2023秋招-相加异或

题目描述与示例 题目描述 对于一个数组c,定义f(c)为c数组所有元素的总和。 现在给定两个长度为n的数组a, b,请你恰好删除一个数组a的元素或者一个数组b的元素,使得f(a)异或f(b)最大。 输入描述 第一行输入一个整数n。 第二行输入n个整数…

Davinci报警汇总

问题号模块软件影响90220LDCOMCfgcheck不过,需要解决53006RTECfg不需要管40316Mode Declaration GroupsDev不需要管40333Application Port InterfacedDev不需要管40334Application Port InterfacedDev不需要管40339Application Port InterfacedDev不需要管40041Appl…

使用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…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析》(2)

《Linux操作系统原理分析》(2) 2 Linux概述2.1 Linux发展史2.2 Linux与GNC 2.3 Linux性能2.4 Linux 技术特点 2 Linux概述 2.1 Linux发展史 年份事件1991年22岁的荷兰大学生 Linus B.Torvalds 在 PC 机上开发出简单的操作系统内核程序。1994 年 3 月Li…

Excel表格密码保护,避免他人编辑

最简单的办法解密和去除Excel表格密码是通过密码帝官网完成。具体步骤如下:第一步,在百度搜索【密码帝官网】,找到官网后第二步,点击“立即开始”进入用户中心,然后上传需要解密的Excel文件。无论是在手机还是电脑上都…

JavaScript中普通函数箭头函数容易混淆的this指向

[[toc]] 普通函数this指向什么? 普通函数的this指向哪里? this指向调用它的对象函数定义无法确定,只有函数执行时才能确定普通函数有哪些? 没有调用者的函数对象内函数使用apply// 没有调用者的函数: this(非严格)指向全局window function test(){console.log(this=,this…