现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题

本文主要是介绍现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目场景:

一位学生有一台笔记本电脑,安装了Android,Kafka虚拟机很多软件。笔记本配置了20GB内存,固态硬盘,但最近很卡,Android Stuido经常闪退,一些游戏也无法运行。


问题描述

由于Android Studio是很耗内存的软件,首先想到观察内存,发现可用内存不足5%,资源监视器大量“硬中断”报警,说明存在大量的内存分配失败。同时页面缓存也涨到快10GB,更说明是内存不够了。这直接导致开启一些大型3D游戏时卡顿(大量的Page交换),安卓仿真器崩溃。使用进程工具统计所有进程的内存,发现总共才占了6GB不到,那另外12GB内存是谁占用了?


原因分析:

考虑到同学启动了一个debain的虚拟机作为一个本地服务器,测试一些新版本Kafka的功能。会不会是虚拟机的问题呢? 同学也说本来以为是的,但是把虚拟机的内存从8G下降到2GB,还是会内存爆满。

在现场,我再次终止虚拟机后,内存果然全部释放干净了。但这个虚拟机总共才2GB的内存配置,怎么可能占用如此多的内存呢?

我们试着复现现象:

  1. 重启笔记本,不启动虚拟机时,一切正常。
  2. 启动虚拟机,开启数据吞吐测试程序。这个程序会不断从虚拟机内存里吞吐大量的数据。
  3. 资源管理器发现内存缓慢涨大,并轻松突破了2GB的限制,持续膨胀。
  4. 最终内存全部用光,故障浮现。

这难道是虚拟机本身有内存泄露?由于几次测试,观察到除了正常的系统占用,内存增量基本是16GB左右就不再涨大,狐疑这个16GB是怎么回事。如果是软件故障,应该不会有上限,至少应该把页面文件都撑爆了再退出。但这个现象是由虚拟机占用的内存到达16GB就停止增长了。此时,若不运行别的软件,系统还是正常的。

抱着试一试的态度,在虚拟机设置页面瞎点,改了一堆参数,也没有用。结果,即将黔驴技穷的时候,在虚拟机的“全局配置”选项菜单里,有一个“预留内存”的选项,恰好是16GB多。

把这个预留内存下移到4GB,问题解决。


解决方案:

“预留内存”只要比虚拟机的配置内存大就行了。像同学开1个2GB的Debain,设置个4GB足够了。

可能技术背景解释

不是很熟悉这款软件,但有个猜测:

  1. 这个“预留内存”应该是指由虚拟机统管的全部内存。
  2. 虽然客户OS只有 2GB内存,但因为IO频繁,虚拟机软件为避免碎片化,会用所有的16GB预留内存来周转数据。
  3. 增长期,随着频繁的IO,内存不断涨大。2GB客户机里的new每次都在宿主的这16GB缓存的尾部新增长,而不是重用2GB的空间。
  4. 稳定期,16GB空间用完,回到头部去找新的空闲位置。

原理上图中,虽然蓝色的虚拟机2GB内存大小不变,但是在虚拟机预留内存中的位置却时刻变化,并逐步遍历了所有的预留内存。因此,这个“预留内存”如果不是专门用来跑虚机的电脑,千万不要设置太大。如果要吃鸡或者GTA,应该非常谨慎地设置内存。

这篇关于现场工程师出手--虚拟化软件预留内存过大导致其他程序崩溃问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978068

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图