Crush The Crash--蓝屏

游戏玩着玩着蓝屏了,这是让很多玩家崩溃的事情,这个更让开发者头疼,第一次遇到时候(还得去解决)不免还有点手足无措。

在《天涯明月刀》项目中也解决了一些这个问题,这里也聊下这个。

什么是蓝屏?

蓝屏英语叫法,或者google它的时候叫blur screen of death,简称bsod。

游戏崩溃了,就直接退了,系统崩溃了,就是蓝屏。

造成蓝屏的因素包括:

  • 硬件问题--显卡过热,内存突然松动,硬盘线断了。。。
  • 驱动问题
这些因素导致在系统内核中crash,最后就蓝屏了。

游戏是否能直接导致蓝屏?
第一次遇到同事那里蓝屏,我还挺好奇,如果能写出可以蓝屏的代码,留个后门,在游戏里看谁不爽,发个命令过去,直接蓝屏,多happy啊。
但其实标准情况下,user mode application(也就是我们的游戏)是不能直接导致蓝屏的。

这里细节可以看msdn上的这些文章:user mode and kernel mode
user mode的application,是有自己的process,有自己的一块virtual address,processor不能访问其他地址(包括属于操作系统内核的地址)。
process crash也只是crash自己,不能直接crash系统。

但是游戏在运行的时候会调用系统函数等,如果游戏有安全组件,去更改了这部分的驱动,那么就有可能更改了对于kernel部分的调用,影响其运行,最终导致crash。

定位
所以一旦出现了蓝屏,我们需要了解,就不需要在游戏正常运行的代码中去看是否有问题,直接往会接触到驱动,硬件和kernel调用的部分去定位即可。

蓝屏的dump收集
蓝屏也是有dump的。

系统失败这里,如果玩家出现蓝屏,可以根据玩家情况,或者拜托玩家在调试信息这里尽量选择全的信息,来获取dump。
这里的dmp是kernel mode的,只能使用windbg来查看,visual studio看不了。

显卡过热
实际工作中,能接触到最常见的,且游戏直接相关的,是显卡过热导致的显卡挂了,这里会导致显卡重启或者蓝屏。
我们在游戏中尽可能的利用显卡的每一份计算资源,去提升效率,让所有组件并行最大化,在同样的硬件下跑得更流畅,展示出更好的效果,但这直接也导致了散热更厉害。
加之现在不少JS会卖畸形显卡--在散热上偷工减料,跑跑LOL这种简单游戏玩的很流畅,一旦全速运转,散热不行,很快就挂了。
处理方法,一个是限帧,在游戏中正常限制在60fps,这个对于普通mmo足够了,这样起码对于一些特别牛的显卡,会降低散热,在散热不足的情况下降低出问题的风险。
在loading画面的时候,降低到更低的帧数,起码让显卡先冷一会也是好的。
一个是温度检测,在显卡厂商(比如nvidia)都会有自己专有的sdk,提供接口来获得显卡的温度,在温度过高的情况,做降帧降效果的处理,但是这个比较双刃剑,一般过一百度的时候做一下还可以,但是玩家会出现抱怨游戏效果下降的问题。

reference:
http://www.howtogeek.com/163452/everything-you-need-to-know-about-the-blue-screen-of-death/
https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/hh439648(v=vs.85).aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph-volume 是一个用于部署和管理 Ceph 存储池的工具,它提供了对块设备(如 SSD、HDD)的操作,包括创建、删除、挂载和扩容等操作。在更换存储盘(例如从旧硬盘到新硬盘)的过程中,Ceph-volume 提供了以下步骤: 1. **数据迁移**: - 在更换之前,先确保业务数据已备份或迁移。Ceph 提供的数据复制功能(如 RBD snapshots 或 CephFS snapshots)可以用于临时迁移数据到新的存储。 - 如果可能,使用 `ceph osd tree` 查看存储池在集群中的分布,以确定哪个 OSD(对象存储设备)包含需要更换的盘。 2. **停止服务**: - 关闭与旧硬盘相关的 Ceph 对象存储服务,如 RBD 或 RADOSGW。可以通过命令行工具 `ceph OSD tree` 或 `ceph health` 确认哪些 OSD 需要被关闭。 3. **替换硬件**: - 安装新的硬盘并将其连接到服务器的正确接口。 - 使用 `ceph-volume lvm` 或 `ceph-volume rbd` 命令将旧的 LVM 或 RBD 映射从旧盘切换到新盘,然后卸载旧盘。 4. **扩容或重建**: - 对于 LVM,你可以使用 `ceph-volume resize` 命令来调整 LVM 大小以适应新盘的空间,然后重新挂载和配置文件系统。 - 对于 RBD,可能需要执行 `ceph osd crush reweight <osd_id>` 来重新平衡数据,接着 `ceph osd pool apply-size <pool_name> <size>` 更新池大小,最后重启相关服务使其生效。 5. **验证和恢复服务**: - 检查新盘是否正确安装和挂载,并确认 Ceph 服务状态正常。 - 使用数据迁移工具(如 Radosgw Migrator 或 GlusterFS镜像)将数据迁回新的存储位置。 - 最后,确保业务服务可以正常使用新的存储资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值