linux内存管理
来源:互联网 发布:降临影评知乎 编辑:程序博客网 时间:2024/06/05 08:41
共享内存
对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。
例如Linux平台的oracle为多进程程序,SGA和PGA都是各进程共享和通信的数据区域,所有可以看到分配了很大的共享内存。而MySQL为多线程,系统级表现为一个进程,不需要共享内存。
Linux的cache和buffer有何区别
Linux下对文件的访问和设备的访问通常会被cache起来加快访问速度,这个是系统的默认行为。 而cache需要耗费我们的内存,虽然这个内存最后可以通过echo 3>/proc/sys/vm/drop_caches这样的命令来主动释放。但是有时候我们还是需要理解谁消耗了我们的内存。
:
[root@my031045 ~]# free total used free shared buffers cachedMem: 24676836 626568 24050268 0 30884 508312-/+ buffers/cache: 87372 24589464Swap: 8385760
Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正
确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手。 Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
sync
sync
echo 3 > /proc/sys/vm/drop_caches
echo -e "----------------------缓存释放后,内存使用情况(KB):----------------------"
free
cached1=`free |grep Mem:|awk '{print $7}'`
buffers1=`free |grep Mem:|awk '{print $6}'`
date1=`date +"%Y%m%d%H%M%S"`
cat catalina.logaa >1
date2=`date +"%Y%m%d%H%M%S"`
echo -e "----------------------首次读取大文件后,内存使用情况(KB):----------------------"
free
cached2=`free |grep Mem:|awk '{print $7}'`
buffers2=`free |grep Mem:|awk '{print $6}'`
#echo $date1
#echo $date2
interval_1=`expr ${date2} - ${date1}`
cached_increment1=`expr ${cached2} - ${cached1}`
buffers_increment1=`expr ${buffers2} - ${buffers1}`
date3=`date +"%Y%m%d%H%M%S"`
cat catalina.logaa >1
date4=`date +"%Y%m%d%H%M%S"`
echo -e "----------------------再次读取大文件后,内存使用情况(KB):----------------------"
free
cached3=`free |grep Mem:|awk '{print $7}'`
buffers3=`free |grep Mem:|awk '{print $6}'`
#echo $date3
#echo $date4
interval_2=`expr ${date4} - ${date3}`
cached_increment2=`expr ${cached3} - ${cached2}`
buffers_increment2=`expr ${buffers3} - ${buffers2}`
echo -e "----------------------统计汇总数据如下:----------------------"
echo -e "首次读取大文件,cached增量:${cached_increment1},单位:KB"
echo -e "首次读取大文件,buffers增量:${buffers_increment1},单位:KB"
echo -e "首次读取大文件,耗时:${interval_1},单位:s \n"
echo -e "再次读取大文件,cached增量:${cached_increment2},单位:KB"
echo -e "再次读取大文件,buffers增量:${buffers_increment2},单位:KB"
- linux内存管理--内存回收
- linux内存管理-分段管理
- Linux内存管理
- Linux内存管理
- linux内存管理
- linux 内存管理
- Linux内存管理(上)
- Linux内存管理(下)
- Linux内存管理
- Linux内存管理
- LINUX内存管理
- Linux内存管理
- Linux内存管理
- Linux内存管理
- Linux内存管理(1)
- Linux内存管理(2)
- Linux内存管理(3)
- 浅析Linux内存管理
- @Autowired与@Resource的区别
- 读源码心得
- CI3.0框架 配合phpstorm2017.1.14 ,代码提示,自动补全
- HTML隐藏控件的方法
- interlij idea给Web项目添加SSM
- linux内存管理
- 每天一个linux命令(28):文件和目录属性 Linux文件类型与扩展名---学习笔记
- 剑指Offer----顺时针打印矩阵
- Deciding What to Do Next Revisited
- 数列1
- tensorflow im2txt模型
- oracle表操作
- 如何使用cocos的自动绑定工具实现lua调用c++的类
- insert into select from