Linux 下可以通过free-m 查看内存使用情况
free 命令列出如下的
MemTotal = available + used
available = free + shared + buff/cache
所以查看系统内存释放情况,只需要查看 avaliable 即可
在C++ 里面可以通过如下代码实现
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
void getMemoryInfo(std::ofstream &ostream, bool first = false, std::string type="Type") {
if (!ostream.is_open()) {
std::cout << "invalid out file" << std::endl;
}
std::ifstream istream;
istream.open("/proc/meminfo", std::ios::binary);
std::string line;
int index = 0;
std::vector<std::string> title;
std::vector<std::string> value;
while(getline(istream, line)) {
index ++;
std::string flag = ":";
int position = line.find_first_of(flag);
title.push_back(line.substr(0, position));
value.push_back(line.substr(position+1, line.length() - 3 - position));
std::cout << title[title.size()-1] << "," << value[title.size()-1] << std::endl;
if(index == 15) break;
}
if (first) {
ostream << "Type" << ",";
for (auto k: title) {
ostream << k << ",";
}
ostream << std::endl;
}
ostream << type << ",";
for (auto k: value) {
ostream << std::atof(k.c_str()) / 1024 << ",";
}
ostream << std::endl;
}
/proc/meminfo 里面的信息如下
关于上面内存字段的含义,如下所示:
MemTotal: 7959868 kB --->内存总量
MemFree: 3900076 kB --->没有被使用过的内存
MemAvailable: 5813320 kB --->目前系统可用的内存
Buffers:
30304 kB --->缓冲区内存数
Cached: 1169388 kB --->缓存区内存数
SwapCached: 34104 kB --->内存总量
Active: 1122756 kB --->最近被使用过的,非必要不会释放的内存总量
Inactive: 637568 kB --->最近使用较少的,更具备释放条件的内存总量
Active(anon): 461300 kB --->最近一次system交换到swap后,正处于active use或曾处于active use的anonymous and tmpfs/shmem内存总量
Inactive(anon): 225728 kB --->被候选驱逐的 anonymous and tmpfs/shmem 内存总量
Active(file): 661456 kB --->最近一次system内存回收后,正处于active use或曾处于active use的cache memory总量
Inactive(file): 411840 kB --->内存总量
Unevictable: 15564 kB --->内存总量
Mlocked: 48 kB --->内存总量
SwapTotal: 3979920 kB --->多个进程共享的内存空间
SwapFree: 2267608 kB