首页
社区
课程
招聘
未解决 棘手: 对 “Windows内存不足后无法重启”问题的分析与讨论。
发表于: 2019-4-2 10:26 2260

未解决 棘手: 对 “Windows内存不足后无法重启”问题的分析与讨论。

2019-4-2 10:26
2260
各位大佬好,我目前遇到一个问题,比较棘手,故发出来与大家讨论下,集思广益。 在此先谢谢各位。

背景:
Windows跑在Hypervisor下,是一个Guest OS,分配给他的内存为12GB。 磁盘驱动使用的VIRTIO-BLK。
在开机自启动程序中,运行了3个testLimit测试程序,分别申请3000MB, 3000MB和9000MB内存,即总计申请了14.64GB内存
另在自启动程序中有一个重启脚本,它在Windows登录60秒后,自动执行重启操作,重启次数设定为1万次。 
即,Guest Windows启动后,通过testLimit程序申请14.64GB内存,等待60秒后,自动重启。再次启动后,再次执行上述流程。

问题:
当重启次数达到2-3百次时,会出现无法重启的问题,屏幕界面卡在Restarting界面,一直转圈。 

需求:  
找到问题的根本原因,并着手解决。

目前我的思路,以及做过的实验如下:
我不怀疑Windows系统的内存管理或其他机制有什么问题,较大概率问题出现在Hypervisor上。
当申请内存不超过12GB时,重启是一直没有问题的。申请内存超出(或邻近)12GB后,
Windows的虚拟内存(Linux下叫SWAP)功能就启动了。不怀疑Windows自身的内存页与磁盘页面置换策略,
此时我认为唯一多了的事情就是磁盘操作,即VirtioBLK。 我怀疑问题与这个驱动有关。

思路1: 从Windows端入手,先确定Windows具体卡在哪里了,卡的时候在做什么。
进而推导出卡的时候,Hypervisor与Windows的交互情况,进而定位Hypervisor端的问题。 

实验:我搭建了基于网络的双物理机调试环境。通过PC A 来调试PC B上的Guest Windows。
当Windows 卡在Restarting 界面时,我通过Windbg连到Windows上, 观察到系统还处在运行状态。
有几个程序在运行: kiRetireDpcList, kiExecuteAllDpcs, kiIdleLoop, PoIdle. 
很郁闷,我对Windows下的这些程序都不太了解。 即使能Debug,也不知道现在Windows是在什么状态,为什么进入的这个状态。

换句话说,我不知道Windows系统的重启流程,不知道现在进行到具体哪一步了,不知道发生了什么导致它不再继续了。
求高人指点,要如何是好。

思路2:
在Hypervisor端观察。
 4个CPU都处于IDLE状态,但IN/OUT还是有增长,应该还是在缓慢工作的。
VirtioBLk的Avail/Used index都在非常缓慢的增长。 即磁盘读写也还在进行。
不知道还能收集哪些信息 ?
此时CPU应该是没有从VMX non-root 状态退出的,故VMM (Hypervisor)应该还不知道Window要重启了。

其他:
1. 不能够关闭Virtual memory (SWAP)功能,因为这样相当于规避了问题,并没有解决。
2.  Windows虚拟内存现在的管理方式设定的是由系统自动管理。目前系统虚拟内存的使用量5700多MB。 
     感觉这个数量有点太大了。  但如果设置一个比较小的值,则要给出充足的理由。
3.  有一种情况就是,Windows系统还是好的,只是性能急剧下降,运行极为缓慢。 
     我目前不关机,看系统能否一点点运行完毕。 截至发帖,已经等了1晚了。
4.  哪位大神知道虚拟化的圈子,想讨论一些虚拟化开发相关的技术问题,一直找不到组织,有点纠结。

综上,我不求能直接找到问题的Root Cause, 但求一些讨论,活跃下思路。 谢谢。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 10704
活跃值: (784)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
创建虚拟机的时候有没有看过一句话,超出此大小可能发生内存交换
2019-4-4 07:53
0
雪    币: 10704
活跃值: (784)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
内存不够,硬盘来凑,
2019-4-4 07:54
0
雪    币: 406
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
固件安全 创建虚拟机的时候有没有看过一句话,超出此大小可能发生内存交换[em_39]
您好,感谢回复哈。  肯定是发生内存交换了的,而且交换量很大。 目前Virtual memory是交给Windows自己管理的, 
Total paging file for all drivers:  5076MB.   现在需要找出,开启内存交换功能后,这个问题的出现原因。
最后于 2019-4-4 17:39 被用户已经存在编辑 ,原因:
2019-4-4 17:39
0
游客
登录 | 注册 方可回帖
返回
//