Linux下找出吃内存的方法

news2024/12/23 11:00:50

几个 个 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.coloradmin.cn/o/1185489.html

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

相关文章

RISC-V处理器设计(五)—— 在 RISC-V 处理器上运行 C 程序

目录 一、前言 二、从 C 程序到机器指令 三、实验 3.1 实验环境 3.11 Windows 平台下环境搭建 3.12 Ubuntu 平台下环境搭建 3.13 实验涉及到的代码或目录 3.2 各文件作用介绍 3.2.1 link.lds 3.2.2 start.S 3.2.3 lib 和 include 目录 3.2.4 common.mk 3.2.5 demo …

【python海洋专题四十三】海洋指数画法--单色渐变柱状图

【python海洋专题四十三】海洋指数画法–单色渐变柱状图 【python海洋专题四十三】海洋指数画法–单色渐变柱状图 数据:AMO_index 数据:AMO_index 结果展示: 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二…

C++学习---动态内存

文章目录 堆和栈new和delete操作符数组的动态内存分配对象的动态内存分配 堆和栈 在C中 栈:是一种静态内存分配区域,用于存储局部变量和函数调用的上下文信息。在栈上的内存分配和释放都是自动管理的,遵循后进先出(LIFO&#xf…

从vue源码中看diff算法

一、v-for必须要指定key,其作用是什么? 在源码中有一个函数为,其中就是通过判断两个vnode的type和key进行判断,如果这两个属性相同,那么这两个vnode就是相同,所以在设置key的时候也不可以设置为object等无…

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

网工内推 | 上市公司,云平台运维,IP认证优先,13薪

01 上海新炬网络信息技术股份有限公司 招聘岗位:云平台运维工程师 职责描述: 1、负责云平台运维,包括例行巡检、版本发布、问题及故障处理、平台重保等,保障平台全年稳定运行; 2、参与制定运维标准规范与流程&#x…

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割5(训练篇)

在本系列的开篇,就对整个项目训练所需要的所有模块都进行了一个简要的介绍,尤其是针对训练中需要引入的各个结构,进行一个串联操作。 而在之前的数据构建篇和网络模型篇中,都对其中的每一个组块进行了分别的验证,预先…

python3+requests接口自动化测试框架

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的…

MCU常见通信总线串讲(四)—— SPI总线协议

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言一…

什么是API接口测试?这可能是全网最全的教程了!

什么是 API ? API 是“应用程序编程接口”的缩写,是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样,你只需要告诉服务员你想要的食物,而不需要了解厨房中的具体操作,服务员会把你的订单传递…

深入asyncio:构建异步应用

文章目录 异步I/O操作示例:异步网络请求异步任务管理示例:并发执行多个任务使用异步队列示例:生产者-消费者模式在现代软件开发中,异步编程已经成为提高应用性能和响应性的关键技术之一。Python的asyncio库为编写单线程并发代码提供了强大的支持。本文将深入探讨asyncio的三…

CCF CSP认证 历年题目自练Day44

题目一 试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个…

python教程:把多张图片,合并成一张图

D:\Wdpython\environment\Scripts\python.exe D:/Wdpython/爬虫/测试8.py 图片列表 10 [‘刘亦菲/刘亦菲_1.jpg’, ‘刘亦菲/刘亦菲_11.jpg’, ‘刘亦菲/刘亦菲_12.jpg’, ‘刘亦菲/刘亦菲_13.jpg’, ‘刘亦菲/刘亦菲_15.jpg’, ‘刘亦菲/刘亦菲_2.jpg’, ‘刘亦菲/刘亦菲_3.jp…

MacOS升级后命令行出现xcrun: error: invalid active developer path报错信息

在Mac上用g编译cpp文件时,出现以下(类似于工具环境问题的)报错: 解决方案:重新安装最新版的MacOS Command Line Tools xcode-select --install重新尝试编译: 编译成功(忽略这个warning&…

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

一、EMQX介绍 这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。 Windows版本的看这里: https://blog.csdn.net/xiaolong1126626497/article/details/1…

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set 此处为纯模拟的写法,但使用循环代码会更加简洁。 方法一: #include&…

servelt中请求路径的组成部分(Request Path Elements)

详情请参考:https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#request-path-elements 请求路径包含下面几部分: Context Path:与ServletContext 关联的路径前缀。如果这个上下文是默认的上下文(以…

定位内存溢出错误

添加虚拟机参数 -XX:HeapDumpOnOutOfMemoryError(内存溢出则会自动生成"溢出分析文件",如图1) 图1 -Xmx512m(为了快速模拟内存溢出,暂设堆空间为512m) 编写发生内存溢出代码 public class Me…

计算机基础知识48

web应用程序 # Django框架是一款专门用来开发web应用的框架 # Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构 案例:淘宝网、京东网... # 应用程序有两种模式: C/S:客户端/服务器端程序,这类程序一般独立运行 B/S&#xff1…

子查询,内查询 嵌套查询

子查询语句 一个查询语句中还有一个查询语句 Select,,,(select) 括号里的查询语句优先于查询语句执行,然后再把子查询的结果作为条件返回给主查询条件进行过滤 格式: #In Select 列名from …