(问题的可能解决方案是最后一段)

大多数具有虚拟内存的现代操作系统上的内存分配是一个两阶段过程.首先,保留过程的虚拟地址空间的一部分,并且过程的虚拟存储器大小(VmSize)相应地增加.这将在所谓的流程页面表中创建条目.页面最初与物理内存帧无关,即实际上没有使用物理内存.每当实际读取或写入此分配部分的某些部分时,就会发生页面错误,操作系统会从物理内存安装(映射)一个空闲页面.这增加了进程的驻留集大小(VmRSS).当某些其他进程需要内存时,操作系统可能会将一些不经常使用的页面的内容(“不经常使用的页面”的定义高度依赖于实现)存储到某些持久存储(大多数情况下是硬盘驱动器,或者通常是交换设备) )然后取消映射.此过程会降低RSS但保持VmSize不变.如果稍后访问此页面,将再次发生页面错误并将其恢复.虚拟内存分配仅在释放虚拟内存分配时减少.请注意,VmSize还会计算内存映射文件(即可执行文件及其链接到的所有共享库或其他显式映射文件)和共享内存块.

进程中有两种通用类型的内存 – 静态分配的内存和堆内存.静态分配的内存保留所有常量和全局/静态变量.它是数据段的一部分,其大小由VmData度量标准显示.数据段还承载程序堆的一部分,其中正在分配动态内存.数据段是连续的,即它从某个位置开始并朝向堆栈向上增长(从非常高的地址开始然后向下增长).数据段中堆的问题在于它由一个特殊的堆分配器管理,该分配器负责将连续的数据段细分为更小的内存块.另一方面,在Linux中,动态内存也可以通过直接映射虚拟内存来分配.这通常仅用于大型分配以节省内存,因为它仅允许分配页面大小(通常为4 KiB)的倍数的内存.

堆栈也是大量内存使用的重要来源,特别是如果在自动(堆栈)存储中分配大数组.堆栈从可用虚拟地址空间的最顶端开始并向下增长.在某些情况下,它可能会到达数据段的顶部,或者可能达到其他一些虚拟分配的末尾.那么糟糕的事情发生了堆栈大小在VmStack度量标准中以及VmSize中进行计算.

人们可以这样总结:

> VmSize考虑了所有虚拟内存分配(文件映射,共享内存,堆内存,无论内存),并且几乎每次分配新内存时都会增长.几乎是因为如果新的堆内存分配是在数据段中释放的旧分配的位置进行的,则不会分配新的虚拟内存.无论何时释放虚拟分配,它都会递减. VmPeak跟踪VmSize的最大值 – 它只能在时间上增加.

> VmRSS随着内存的访问而增长,随着内存被分页到交换设备而减少.

> VmData随着堆的数据段部分的使用而增长.它几乎从不收缩,因为当前的堆分配器保留释放的内存,以防将来的分配需要它.

如果您在具有InfiniBand或其他基于RDMA的结构的群集上运行,则会发挥另一种内存 – 锁定(已注册)内存(VmLck).这是不允许被分页的内存.它的增长和缩小取决于MPI的实现.有些人从不取消注册已经注册的块(有关为什么太复杂而无法在此处描述的技术细节),其他人这样做是为了更好地利用虚拟内存管理器.

在您的情况下,您说您正在遇到虚拟内存大小限制.这可能意味着此限制设置得太低,或者您遇到操作系统强加的限制.首先,Linux(和大多数Unix)都有通过ulimit机制强加人为限制的手段.在shell中运行ulimit -v会告诉你虚拟内存大小的限制在KiB中.您可以使用ulimit -v< KiB中的值>来设置限制.这仅适用于当前shell及其子级,grandchilren等生成的进程.如果要在远程节点上启动,则需要指示mpiexec(或mpirun)将此值传播到所有其他进程.如果您在某些工作负载管理器(如LSF,Sun / Oracle Grid Engine,Torque / PBS等)的控制下运行您的程序,则会有控制虚拟内存大小限制的作业参数.最后但并非最不重要的是,32位进程通常限制为2 GiB的可用虚拟内存.

linux系统增加内存无法启动,linux – 增加虚拟内存而不增加VmSize相关推荐

  1. linux系统oracle监听启动,linux下启动与关闭oracle监听与实例

    转自:http://fireye83.iteye.com/blog/1064116 一.如何启动数据库实例 1.进入到sqlplus启动实例 [oracle@localhost ~]$ su - or ...

  2. linux系统清理内存,如何清除linux的内存缓存,缓冲和交换空间

    说明 和其他操作系统一样,linux已经实现了很有效的内存管理机制,但是任何一个进程损坏了系统的内存,那么你就必须清理它,linux提供了一个比较好的方式刷新\清除RAM缓存. 注意:并不是什么时候都 ...

  3. linux系统ssh服务无法启动,Linux上的SSH无法启动

    问题 Linux上的SSH无法启动, 报告/var/empty/sshd must be owned by root and not group or world-writable 解决方案 首先通过 ...

  4. linux系统如何选择内核启动,Linux系统的快速启动机制(内核切换)

    快速启动机制:允许通过已经运行的Linux内核的上下文启动另一个Linux内核,不需要经过BIOS.BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器.这种办法可以为经常启动机器的开发者 ...

  5. 【linux】一文总结linux系统平台完整的启动周期

    本文内容很短,主要为方便梳理知识而写.本文站在linux系统平台启动的完整周期的角度出发,描述其整个的启动周期. 一.开篇 linux系统平台完整的启动周期大致可分为四个阶段: (1)引导加载程序 当 ...

  6. Linux系统下SSH服务启动失败故障处理

    Linux系统下SSH服务启动失败故障处理 一.系统版本 二.报错状态 三.处理方法 四.查看服务状态 一.系统版本 [root@localhost ~]# cat /etc/os-release N ...

  7. Shell 脚本来监控 Linux 系统的内存

    一.安装Linux下面的一个邮件客户端Msmtp软件(类似于一个Foxmail的工具) 1.下载安装:http://downloads.sourceforge.net - 206451&big ...

  8. linux电脑自启动,caddyserver在linux系统下设置开机启动

    caddyserver在linux系统下的开机启动设置方法 方法一: vi /etc/rc.local 在exit 0前添加如下代码cd /root/caddy ./caddy & 保存后重启 ...

  9. linux系统占内存大吗,关于linux使用内存时占用率大的讲解

    Linux/Unix与windows在管理内存的方式上是不一样的.它的管理方式是充分的利用系统的内存,而windows则是无论使用多大的内存都要使用一定的虚拟内存(linux中swap). 所以说即便 ...

最新文章

  1. linux shell 加、减、乘、除
  2. linux远程登录ssh免密码配置方法
  3. HDOJ HDU 1709 The Balance ACM 1709 IN HDU
  4. 《Python Cookbook 3rd》笔记(4.8):跳过可迭代对象的开始部分
  5. 图像滤波与滤波器基础知识
  6. 如何查电脑ip地址_摄像机地址不对连不上网?教你快速更改IP地址
  7. 服务器主板测试工程师的项目经历,硬件测试简历项目经验怎么写
  8. HTML期末大作业~简洁的个人博客网站前台页面HTML模板7个页面(html+css+js)
  9. Java Tomcat生成图片验证码不显示问题 超坑记录
  10. 【云锁·nginx自编译web防护教程】
  11. 三位数分解百位,十位,个位
  12. 路由器角色 ABR ASBR
  13. matlab寻峰代码,寻峰的函数!! - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...
  14. 推荐几款HTML5开发工具
  15. python打地鼠脚本_制作一个打地鼠的小游戏!100行Python代码轻松搞定
  16. 考研倒计时自律神器计划便签
  17. Windows 事件查看器(收集)
  18. 计算机摄像头打不开,电脑摄像头打不开、用不了怎么办(操作简单),这几步你要了解...
  19. 前端技术学习第三讲:JavaScript基础语法
  20. Re: 我对中医的切身体会

热门文章

  1. 比穷更可怕的事情是什么?
  2. 微信小程序WXML语法介绍
  3. 在51系列中data,idata,xdata,pdata的区别
  4. SQL Server安装问题程序被挂起的错误解决办法
  5. js宝典学习笔记【转载】
  6. 时间特效。js读取时间
  7. 页面自动刷新,页面自动跳转
  8. 我的内容管理系统(CMS)寻找历程 -- Mambo出鞘,谁与争锋?
  9. 最早将于Q3季度发布,小米12至尊版将搭载骁龙8 Plus
  10. 阿里云新设浙江猫精人工智能科技有限公司