前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开启了 "关机 清除虚拟内存页面文件"(ClearPageFileAtShutdown)会导致Windows关机、重启变得很慢

开启了 "关机 清除虚拟内存页面文件"(ClearPageFileAtShutdown)会导致Windows关机、重启变得很慢

原创
作者头像
Windows技术交流
修改2024-04-26 14:23:59
2340
修改2024-04-26 14:23:59
举报
文章被收录于专栏:Windows技术交流Windows技术交流

有个同事帮他朋友问我一个问题,用Windows自定义镜像买机器,创建机器很快,但是进系统很慢,需要十几分钟。

原因:

代码语言:txt
复制
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"  /v "ClearPageFileAtShutdown"

管理员身份执行命令查看,结果如果是1而不是0的话,要关机、重启变快,就得把1改成0

解决方案:执行这句命令后关机做个新镜像用

代码语言:txt
复制
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"  /v "ClearPageFileAtShutdown" /d 0 /t REG_DWORD /f

由于配了ClearPageFileAtShutdown为1本来就会关机慢,如果镜像里cloudbase-init配置了allow_reboot=true或者在UserData环节在初始化的时候设置了重启机器的逻辑,那么在新创建机器或重装系统后,看到的是开机,实际开机过程中会有重启动作,重启肯定就会因为ClearPageFileAtShutdown为1慢了至少10分钟(内存越大,重启越慢),感受到的就是这至少10分钟时间是在开机阶段,也就是发现"创建机器发货快、但是进系统慢"

此外,由于开启ClearPageFileAtShutdown后关机、重启一般用时都会超过10分钟,而腾讯云的重启接口、关机接口都有默认5分钟软关机超时的设计,因此开启ClearPageFileAtShutdown的机器执行RebootInstancesStopInstances 会失败,除非你加强制重启、强制关机的参数,但这样又会引起其他问题:强制关机或强制重启(先关机再开机),关机过程是快了,但毕竟是硬关机,大概率会触发下次开机时autochk或者chkdsk,这个过程本来也不快,就会导致下次开机变慢。

腾讯云平台重启接口平滑重启就是5分钟超时的设置,十多年了没改过,开了ClearPageFileAtShutdown实际重启需要超过10分钟,接口调用自然就失败了。针对启用了ClearPageFileAtShutdown的机器,唯一的调用接口关机/重启机器的解法就是:在系统里面安装TAT,调用TAT接口下发重启机器的指令给系统里的TAT

参考腾讯云官网文档https://cloud.tencent.com/document/product/1340

TAT控制台:https://console.cloud.tencent.com/cvm/command

这里顺便提一下,powershell命令:restart-computer -force不如shutdown -r -t 0,用shutdown -r -t 0替代restart-computer -force。

Restart-Computer如果不加 -Force,TAT里System用户执行的话,没有任何反应,加了 -Force才行,但加 -Force总归是不友好的,而shutdown -r在TAT里不论是Administrator还是SYSTEM执行都有效果。

一般建议用shutdown -r重启,除非你确定需要强制重启以解决某些问题才用Restart-Computer -Force。

执行shutdown -r的效果其实就是shutdown -r -t 60,即机器在1分钟后正常重启,如果不想等1分钟,想立即正常重启,就用shutdown -r -t 0

注意:立即正常重启只是不多等那60秒而已,并不是强制重启

这是图形界面操作

图形界面的操作都是接口包装的

代码语言:txt
复制
有些命令在cmd、powershell、.bat中是一样的效果,有些则有语法差异
建议搞.ps1或者.bat放置在机器硬盘里调试好了,通过TAT下发触发计划任务调用脚本的指令来达成目的

举个最简单的例子

ren c:\test.txt test.log
这在cmd里是重命名c:\test.txt为c:\test.log的意思
但在powershell里会报错不认识ren命令

如果你要通用在cmd和powershell下都能用,那就改成cmd.exe /c "ren c:\test.txt test.log"

还有,cmd下一个%的,放在.bat里就得多加一个%,即%%

总之,首先在本地调试好脚本,在不用TAT的时候调试好计划任务,这2步都验证没问题了,再通过TAT下发触发计划任务的指令,TAT下发指令的时候有地域、用户、超时 属性,看清楚、设置好

执行命令的时候选不到机器,有这些情况:机器关机了,或者系统异常,或者机器里没安装TAT或者TAT服务没启动,或者选错地域了或者机器网络不正常或者其他任何导致下发指令时无法跟TAT客户端建连的情况。或是powershell默认不适用Linux,shell默认不适用Windows,这点会在图形界面上体现。

TAT能干很多事,看自己对系统指令的掌握程度,示例参考:https://cloud.tencent.com/developer/article/2145058

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档