linux 进程 释放内存,Linux 释放内存方法和原理

今天惊愕地发现,主节点上8G内存被不知道什么进程吃掉了整整6G有余,正常的计算快要维持不下去了,遂处理之。

先看看内存使用状况

[root@node1 ~]# free -m

total used free shared buffers cached

Mem: 8004 6557 1446 0 163 5630

-/+ buffers/cache: 763 7240

Swap: 1983 0 1983

其中:

total 内存总数

used 已经使用的内存数

free 空闲的内存数

shared 多个进程共享的内存总额

buffers Buffer Cache和cached Page Cache 磁盘缓存的大小

-buffers/cache 的内存数:used - buffers - cached

+buffers/cache 的内存数:free + buffers + cached

可用的memory=free memory+buffers+cached

把内存里的数据暂时写到硬盘里

[root@node1 ~]# sync

修改 /proc/sys/vm/drop_caches文件(/proc/sys/vm/drop_caches的默认值为0)

[root@node1 ~]# echo 3 > /proc/sys/vm/drop_caches

[root@node1 ~]# cat /proc/sys/vm/drop_caches

再看内存

[root@node1 ~]# free -m

total used free shared buffers cached

Mem: 8004 631 7372 0 0 60

-/+ buffers/cache: 570 7433

Swap: 1983 0 1983

终于释放出来了。

有关/proc/sys/vm/drop_caches的用法在下面进行了说明(原文:http://www.linuxinsight.com/proc_sys_vm_drop_caches.html):

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

To free pagecache:

echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation, and dirty objects are not freeable, the user should run "sync" first in order to make sure all cached objects are freed.

This tunable was added in 2.6.16.

真实情况是 “当有某程序需要占用大内存时linux会自动释放cache”

linux的理念是内存空着不用白不用,因此会使用空闲内存来做buffer和cache。

我的一台虚拟机运行了JBOSS,在运行一段时间后,查看内存使用情况:

[root@JBOSS ~]# free -m

total used free shared buffers cached

Mem: 3949 2928 1021 0 308 1278

-/+ buffers/cache: 1341 2608

Swap: 4094 0 4094

可以看出,内存已用2928M,但实际除去 buffers/cache后实际只使用了1341M。

你若不管它,内存是不会释放的,而且也没必要释放。

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

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

相关文章

玩转Win32开发(2):完整的开发流程

上一篇中我给各位说了一般人认为C中较为难的东西——指针。其实对于C,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类、虚基类、纯虚函数等,这些都是概念性的东西,几乎每一本C书上都会介绍,而…

c++函数传参:值传递、指针传递、引用传递

1、将变量名作为实参和形参: 这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回实参。应为在调用函数时,形参和实参不是同一个存储单元。 2、传递变量的指针: 形参是指针变量&a…

赞!带进度条的 jQuery 文件拖放上传插件

jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果。作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 Hack 的方式使之兼容那些古老的浏览器。jQuery File Uploa…

linux系统有几个系统盘,linux操作系统的分区有哪些种类?各分区主要作用是什么?...

满意答案Linux下一切都是文件,不存在分区的概念,在Linux下说的分区只是磁盘管理和数据组织的需要。Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个…

::范围解析运算符

学习笔记&#xff1a;参考链接 ::是范围解析运算符&#xff0c;或者称为域区分符&#xff0c;用来指明一个函数或一个数据属于哪一个类。 ::也可以不跟类名&#xff0c;表示全局函数或者全局数据 eg: #include<iostream> using namespace std;int month;//全局变量 i…

渴望

有些时候 还是会觉得很孤独 因为自己总是一个人 一个人吃饭 一个人学习 一个人生活 心情难免会低落 很想有一个人 可以一直陪伴在自己身边 一起吃饭 一起学习 一起看潮起潮落 以为自己足够坚强 可以耐得住很多孤独 却总还是会 感觉lonely 很多时候很羡慕 那些大学里的小情侣 虽…

linux中可以安装不同版本的gcc么,在linux下安装多个版本的GCC

文章链接&#xff1a;http://blog.csdn.net/chid/article/details/6251781很是有用&#xff0c;转载学习1.查看当前linux版本内核版本&#xff1a;cat /proc/version或者&#xff1a;uname -a2.查看gcc的版本gcc -v或者&#xff1a;gcc --version或者&#xff1a;查看当前安装的…

Python中如何读取xml的数据

<?xml version"1.0" encoding"utf-8" ?> - <catalog><maxid>4</maxid> - <login username"pytest" passwd"123456"><caption>Python</caption> - <item id"4"><ca…

C++中private成员变量和protect成员变量的区别

保护成员和私有成员很相似&#xff0c;但是就是在子类中&#xff0c;保护成员可以访问&#xff0c;而私有成员不能被访问&#xff0c;也就是说子类中的函数&#xff0c;可以访问父类中的保护成员变量&#xff0c;而不能访问私有成员变量&#xff0c;要想访问父类中的私有成员变…

Linux下C语言串口应用编程,Linux下串口C语言编程

Linux下串口C语言编程 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分串口操作代码#include #include #include #include #include #include #include #include #include #define BUFFER…

顺序查找 折半查找

顺序查找 算法描述 顺序比较即可。 平均查找长度 (n1)/2, 其中n为表长。 时间复杂度 O(n) #include "stdio.h" typedef struct student{int id; /*学生编号*/char name[10]; /*…

linux c实现一个简单的sniffer

参考陈兵老师的《网络安全》一书 环境&#xff1a;kali linuxgcc 6.xx 具体的实现原理是&#xff0c;先将自己的网卡设置为混杂模式&#xff0c;然后从特殊的套接字中读取以太网帧&#xff0c;对读取的以太帧进行筛选、去报头。得到我们想要的数据。 #include<stdio.h>…

Java12题:发奖金问题

题目&#xff1a;企业发放的奖金根据利润提成。利润(I)低于或等于10万元时&#xff0c;奖金可提10%&#xff1b;利润高于10万元&#xff0c;低于20万元时&#xff0c;低于10万元的部分按10%提成&#xff0c;高于10万元的部分&#xff0c;可可提成7.5%&#xff1b;20万到40万之间…

Linux第一条指令地址,arm-linux 启动代码分析——stage1 (1)

本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入start_kernel()函数.我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会加上行号以便于和源码进行对照.例:在文件init/main.c中:00478: asmlinkage void __init start_kernel(void)前面的…

C#--序列化与反序列化

引用: 序列化与反序列化 解释: 序列化,就是将一个对象保存到文件中去,而反序列化就是将该文件重新保存为一个对象. 序列化的三种方式: 1.BinaryFormatter class BinarySerialize : ISerialize{FileStream fs;string filepath "D:/1/1.txt";public void Serialize(Bo…

开启linux ssh

kali linux在开机的时候ssh服务是默认关闭的&#xff0c;可通过以下方法开启服务

Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)(转)...

实现全屏无标题栏&#xff1a; 1.在xml文件中进行配置 AndroidManifest.xml中&#xff0c;找到需要全屏或设置成无标题栏的Activity&#xff0c;在该Activity进行如下配置即可。 实现全屏效果&#xff1a; android:theme"android:style/Theme.NoTitleBar.Fullscreen"…

格式化linux grub,linux grub 引导启动过程详解

机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下&#xff0c;BIOS都是被配置成首先检查软驱或者光驱(或两者都检查)&#xff0c;然后再尝试从硬盘引导。如果在这些可移动的设备中&#xff0c;没有找到可引导的…

DevExpress GridControl 后台设置列

/// <summary>/// 初始化GridView /// </summary>/// <param name"gv">GridView 名称</param>/// <param name"captions">列标题</param>/// <param name"fieldName">列字段</param>/// <pa…

linux c实现myecho、mycat、mycp

myecho、mycat、mycp分别用于模拟系统命令echo、cat、cp 代码如下&#xff1a; myecho #include<stdlib.h> #include<stdio.h> int main(int argc,char *argv[]){if(argc1){printf("Error:need parameter!\n");exit(0);}for(int i1;i<argc;i)print…