当前位置: 首页 > news >正文

Linux 真实使用内存计算

获取Linux内存信息,可通过cat /proc/meminfo查看,比如,Ubuntu 20.04.5 LTS上会显示以下信息:

leoya@DESKTOP-LMR:~$ cat /proc/meminfo
MemTotal:       16017572 kB
MemFree:        15637472 kB
MemAvailable:   15533140 kB
Buffers:           19964 kB
Cached:            77928 kB
SwapCached:            0 kB
Active:            37444 kB
Inactive:          82628 kB
Active(anon):        164 kB
Inactive(anon):    22308 kB
Active(file):      37280 kB
Inactive(file):    60320 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194304 kB
SwapFree:        4194304 kB
Dirty:              1024 kB
Writeback:             0 kB
AnonPages:         22192 kB
Mapped:            21932 kB
Shmem:               284 kB
KReclaimable:      20232 kB
Slab:              50776 kB
SReclaimable:      20232 kB
SUnreclaim:        30544 kB
KernelStack:        3152 kB
PageTables:          748 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12203088 kB
Committed_AS:     241884 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       23736 kB
VmallocChunk:          0 kB
Percpu:             5568 kB
AnonHugePages:     10240 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:       19456 kB
DirectMap2M:     4851712 kB
DirectMap1G:    19922944 kB

一般来说,MemTotal代表总内存,MemFree代表系统层面剩余内存,MemAvailable代表应用层面可用内存,可能在这里就有点迷糊了,真实的可用内存以及使用内存应该是什么?

通过查阅相关资料,国外大佬已经给出答案:

// 已使用内存
Used RAM = MemTotal - (MemFree+Buffers+SReclaimable+Cached-Shmem)

故:

这将打印 Linux 上实际使用的(不可回收的)内存量,单位为兆字节。

#include <stdio.h>
#include <string.h>int main() {unsigned long int div = 1024;unsigned long int memtotal = 0, memfree = 0, buffers = 0, cached = 0, shmem = 0, sreclaimable = 0;FILE *meminfo_fp;char buf[256]; /* any line in /proc/meminfo longer than this would get truncated; wouldn't happen */if (!(meminfo_fp = fopen("/proc/meminfo", "r"))) {fprintf(stderr, "can't open /proc/meminfo");return 1;}while (!feof(meminfo_fp)) {if (fgets(buf, 255, meminfo_fp) == NULL) {break;}if (strncmp(buf, "MemTotal:", 9) == 0) {sscanf(buf, "%*s %lu", &memtotal);} else if (strncmp(buf, "MemFree:", 8) == 0) {sscanf(buf, "%*s %lu", &memfree);} else if (strncmp(buf, "Buffers:", 8) == 0) {sscanf(buf, "%*s %lu", &buffers);} else if (strncmp(buf, "Cached:", 7) == 0) {sscanf(buf, "%*s %lu", &cached);} else if (strncmp(buf, "Shmem:", 6) == 0) {sscanf(buf, "%*s %lu", &shmem);} else if (strncmp(buf, "SReclaimable:", 13) == 0) {sscanf(buf, "%*s %lu", &sreclaimable);}}fclose(meminfo_fp);printf("%lu\n", ( memtotal - (memfree + buffers + sreclaimable + (cached - shmem)) ) / div );return 0;
}

我也查阅了相关开源项目的代码,比如netdata项目也是用以上公式进行计算的:

collectors\proc.plugin\proc_meminfo.c

// http://calimeroteknik.free.fr/blag/?article20/really-used-memory-on-gnu-linux
unsigned long long MemCached = Cached + SReclaimable - Shmem;
unsigned long long MemUsed = MemTotal - MemFree - MemCached - Buffers;
// The Linux kernel doesn't report ZFS ARC usage as cache memory (the ARC is included in the total used system memory)
MemCached += (zfs_arcstats_shrinkable_cache_size_bytes / 1024);
MemUsed -= (zfs_arcstats_shrinkable_cache_size_bytes / 1024);
MemAvailable += (zfs_arcstats_shrinkable_cache_size_bytes / 1024);

https://github.com/netdata/netdata/blob/2d5f3acf71f0c759056a3269987fee484566bc4c/collectors/proc.plugin/proc_meminfo.c#L157-L163

在平时,可用粗略估算,如果要计算准确的内存使用率,那么可采用此方法

Really used memory on GNU/Linux - CalimeroTeknik’s Blag (free.fr)

netdata-proc_meminfo.c

/proc/meminfo 各字段详解

相关文章:

Linux 真实使用内存计算

获取Linux内存信息&#xff0c;可通过cat /proc/meminfo查看&#xff0c;比如&#xff0c;Ubuntu 20.04.5 LTS上会显示以下信息&#xff1a; leoyaDESKTOP-LMR:~$ cat /proc/meminfo MemTotal: 16017572 kB MemFree: 15637472 kB MemAvailable: 15533140 kB Bu…...

Unity Jobsystem ECS

简介随着ECS的加入&#xff0c;Unity基本上改变了软件开发方面的大部分方法。ECS的加入预示着OOP方法的结束。随着实体组件系统ECS的到来&#xff0c;我们在Unity开发中曾使用的大量实践方法都必须进行改变以适应ECS&#xff0c;也许不少人需要些时间适应ECS的使用&#xff0c;…...

Java中创建线程有哪几种方式

1.继承Thread类 总结&#xff1a;通过继承 Thread 类&#xff0c;重写 run() 方法&#xff0c;而不是 start() 方法 Thread 类底层实现 Runnable 接口类只能单继承 接口可以多继承2.实现Runnable接口 总结&#xff1a;通过实现 Runnable 接口,实现 run() 方法&#xff0c;依然…...

C++【string类用法详细介绍string类模拟实现解析】

文章目录string 类用法介绍及模拟实现一、string介绍二、string类常用接口1. string类对象的常见构造接口2.string类对象的常见容量接口3.string类对象的常见修改接口4. string类对象的常见访问及遍历接口5.string其他接口1.不常用查找接口2.字符替换3.字符串拼接4.字符串排序5…...

常见的开发模型和测试模型

软件的生命周期软件开发阶段的生命周期需求分析->计划->设计->编码->测试->运维软件测试阶段的生命周期需求分期->测试计划->测试设计与开发->执行测试->测试评估开发模型瀑布模型可以看到,这个模型和我们上面的软件开发生命周期很相似采用的是线性…...

印度和印度尼西亚有什么关系吗?

印度和印度尼西亚&#xff0c;这两个国家很多人都比较熟悉。因为两国都是人口大国&#xff0c;而且经济总量也比较高&#xff0c;在全球还是有很大影响的。不过很多人刚看到这两个国家的时候&#xff0c;都会觉得这两个国家肯定有什么关系&#xff0c;要不然国名也不会这么像。…...

单调栈(C/C++)

目录 1. 单调栈的定义 2. 单调栈的常见用途 3. 案例分析 3.1 暴力解法 3.2 单调栈 4. 单调栈总结 1. 单调栈的定义 单调栈顾名思义&#xff0c;就是栈内的元素是单调的。根据栈内元素的单调性的不同&#xff0c;可以分为&#xff1a; 单调递增栈&#xff1a;栈内元素是单…...

算法设计与智能计算 || 专题一: 算法基础

专题一: 算法基础 文章目录专题一: 算法基础1. 算法的定义及特点1.1 算法的基本特征1.2 算法的基本要素1.3 算法的评定2 算法常见执行方法2.1 判断语句2.2 循环语句2.3 综合运用3. 计算复杂度4. 代码的重用5. 类函数的定义与使用5.1 定义类5.2 调用类函数1. 算法的定义及特点 …...

用javascript分类刷leetcode13.单调栈(图文视频讲解)

239. 滑动窗口最大值 (hard) 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,…...

英语基础语法学习(B站英语电力公司)

1. 句子结构 五大基本句型&#xff1a; 主谓主谓宾主谓宾宾主谓宾宾补主系表 谓语&#xff1a; 一般来说&#xff0c;谓语是指主语发出的动作。&#xff08;动词&#xff09;但是很多句子是没有动作的&#xff0c;但是还是必须要有谓语。&#xff08;此时需要be动词&#x…...

【计算机网络】网络层IP协议

文章目录一、认识IP协议二、IP协议头部格式三、IP地址划分1. IP地址分类2. 子网划分四、IP地址数量危机1. IP地址的数量限制2. NAT技术五、私网IP和公网IP六、路由1. 认识路由2. 路由表生成算法一、认识IP协议 IP协议是Internet Protocol&#xff08;互联网协议&#xff09;的…...

Eclipse快捷键大全

编辑类快捷键Ctrl1: 快速修复(最经典的快捷键, 可以解决很多问题, 比如import类、try catch包围等)CtrlShiftF: 格式化当前代码CtrlShiftM: 添加类的import导入CtrlShiftO: 组织类的导入(既有CtrlShiftM的作用,又可以去除没用的导入, 一般用这个导入包)CtrlY: 重做(与CtrlZ相反…...

JavaScript 高级2 :构造函数和原型 d331702016e84f54b3594ae05e0eeac

JavaScript 高级2 &#xff1a;构造函数和原型 Date: January 16, 2023 Text: 构造函数和原型、继承、ES5中的新增方法 目标 能够使用构造函数创建对象 能够说出原型的作用 能够说出访问对象成员的规则 能够使用 ES5新增的一些方法 构造函数和原型 概述 在典型的 OOP 的…...

maven-war-plugin插件 overlays maven-war-plugin翻译

说明 翻译maven-war-plugin插件的部分内容 官方地址为&#xff1a;https://maven.apache.org/plugins/maven-war-plugin/index.html Overview 概述 Introduction 介绍 Apache Maven WAR Plugin apache maven war 插件 The WAR Plugin is responsible for collecting all artifa…...

【数据结构】初识二叉树(二叉树的入门知识)

初识二叉树一、树概念及结构1、树的概念2、树的相关概念3、树的表示4、树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09;二、二叉树概念及结构1、概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构三、结语一、树概念及结构 1、树的概念 树是一种非线…...

RV1126笔记三十二:基于 FastDeploy 在 RV1126 上的部署示例(RV1126 上部署 YOLOv5 检测模型测试)

若该文为原创文章,转载请注明原文出处。 FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具, 支持云边端部署。提供超过 🔥160+ Text,Vision, Speech和跨模态模型📦开箱即用的部署体验,并实现🔚端到端的推理性能优化。包括 物体检测、字符识别(OCR)、…...

JVM垃圾回收——G1垃圾收集器

目录 一、什么是G1垃圾收集器 二、G1垃圾收集器的内存划分 三、G1垃圾收集器的收集过程 四、G1收集器的优缺点 五、G1收集器的JVM参数配置 一、什么是G1垃圾收集器 Garbage First(简称G1)收集器是垃圾收集器技术发展史上里程碑式的成果&#xff0c;它摒弃了传统垃圾收集器的…...

C语言深度剖析:关键字

C语言深度剖析:关键字C语言深度剖析:关键字前言定义与声明&#xff08;补充内容&#xff09;最宏大的关键字-auto最快的关键字-register关键字static被冤枉的关键字-sizeof整型在内存中的存储原码、反码、补码大小端补充理解变量内容的存储和取出为什么都是补码整型取值范围关于…...

聊一聊过度设计!

文章目录什么是过度设计&#xff1f;过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时&#xff0c;因为缺乏经验&#xff0c;很容易写出欠设计的代码&#xff0c;但有一些经验的程序员&#xff0c;尤其是在刚学习过设…...

程序员在小公司(没有大牛,人少)怎么成长?

大多数小公司都是创业公司&#xff0c;所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长&#xff0c;竭尽所能让公司盈利&#xff0c;或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员&#xff0c;你极有可能要身兼多职&#xff0c;不能…...

Qwen3-0.6B-FP8入门必看:6亿参数如何做到≤2GB显存?FP8量化压缩深度解析

Qwen3-0.6B-FP8入门必看&#xff1a;6亿参数如何做到≤2GB显存&#xff1f;FP8量化压缩深度解析 你是不是也遇到过这种情况&#xff1a;想在自己的电脑上跑个大模型试试&#xff0c;结果一看显存要求&#xff0c;动辄十几GB&#xff0c;直接劝退&#xff1f;或者好不容易找到一…...

OpenClaw成本优化方案:nanobot轻量镜像替代高价API实测

OpenClaw成本优化方案&#xff1a;nanobot轻量镜像替代高价API实测 1. 为什么需要关注OpenClaw的成本问题 去年冬天&#xff0c;当我第一次用OpenClaw完成邮件自动回复的完整流程时&#xff0c;既兴奋又心疼。兴奋的是它真的能像人类一样读取邮件、分析内容、生成回复&#x…...

别再只盯着GDP了!用Python+GIS手把手教你计算城市土地利用强度指数(附代码与数据)

PythonGIS实战&#xff1a;城市土地利用强度指数计算全流程指南 城市规划师和地理信息分析师们常常需要量化评估人类活动对土地资源的干扰程度。传统GDP指标无法全面反映这种影响&#xff0c;而土地利用强度指数&#xff08;LUI&#xff09;则提供了更科学的评估工具。本文将带…...

JAVA重点基础、进阶知识及易错点总结(10)Map 接口(HashMap、LinkedHashMap、TreeMap)

&#x1f680; Java 巩固进阶 第10天 主题&#xff1a;Map 接口深度解析 —— 键值对的高效艺术&#x1f4c5; 进度概览&#xff1a;掌握 Java 中最灵活的数据结构。 &#x1f4a1; 核心价值&#xff1a; 动态数据承载&#xff1a;SpringBoot 中接收前端动态参数 (Map<Stri…...

BilibiliDown:B站音视频资源管理的全场景解决方案

BilibiliDown&#xff1a;B站音视频资源管理的全场景解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...

告别手动Dockerfile!io.fabric8插件如何用Maven配置自动生成镜像(附Spring Boot实战)

告别手动Dockerfile&#xff01;io.fabric8插件如何用Maven配置自动生成镜像&#xff08;附Spring Boot实战&#xff09; 在Java生态中&#xff0c;容器化部署已成为现代应用交付的标准方式。传统做法要求开发者同时维护Dockerfile和构建脚本&#xff0c;这种割裂的配置方式不仅…...

3大核心功能让你的英雄联盟体验提升300%:League-Toolkit完全指南

3大核心功能让你的英雄联盟体验提升300%&#xff1a;League-Toolkit完全指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 引言…...

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large

利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large 想试试最新的MogFace-large人脸检测模型&#xff0c;但手头没有现成的云GPU服务器&#xff1f;或者想先在本地环境里跑通流程&#xff0c;验证一下效果再上云&#xff1f;今天就来分享一个非常实用的方法&#xf…...

Grok-1大模型实战指南:如何用5大核心模块构建企业级AI应用

Grok-1大模型实战指南&#xff1a;如何用5大核心模块构建企业级AI应用 【免费下载链接】grok-1 马斯克旗下xAI组织开源的Grok AI项目的代码仓库镜像&#xff0c;此次开源的Grok-1是一个3140亿参数的混合专家模型 项目地址: https://gitcode.com/GitHub_Trending/gr/grok-1 …...

从零推导贝尔曼方程:强化学习中的价值函数与策略优化

1. 强化学习中的价值函数基础 想象你正在玩一个迷宫游戏&#xff0c;每走一步都会消耗体力&#xff0c;找到出口能获得大奖。这时候你会想&#xff1a;**"从当前位置出发&#xff0c;最终能获得多少奖励&#xff1f;"这个问题的答案就是价值函数&#xff08;Value Fu…...