Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这一次,卡98%问题终于解决了

这一次,卡98%问题终于解决了

作者头像
腾讯移动品质中心TMQ
发布于 2018-02-06 08:27:49
发布于 2018-02-06 08:27:49
12.5K5
举报

今日话题

在新项目中,往往会有一些瓶颈的问题阻碍项目进程,如鲠在喉。而腾讯手游助手项目中,启动卡98%的问题就属于这种问题。幸运的是团队最终解决了此问题,现在回过头来总结与思考一下,看看有什么收获和改进的地方。

1.背景

腾讯手游助手是基于virtualbox二次开发的产品,在virtualbox的基础上做一层UI,封装一些常用的操作,针对游戏设置一些默认虚拟按键,让玩家可以愉快的在电脑上玩手游,而不用操心繁琐的设置问题。

(图一) 模拟器模块结构

在项目初期,陆续接到一些用户的反馈,加载模拟器卡在98%。界面表现如下图:

(图二)助手启动卡98%的表现

翻看BBS的反馈信息可以看到,15年11月份就已经开始暴露该问题:

(图三) BBS卡98%反馈

2. 分析

翻看UI中的相应代码,梳理启动流程如下:

(图四)模拟器主要启动流程

01

CheckEnvironment()检查环境

  1. 检查上次是否发生崩溃
  2. 检测下COM和驱动是否正常,如果有则尝试修复
  3. 检测CPU、CPU是否支持VT、VT是否开启
  4. 检测OPENGL渲染是否OK
  5. 设置当前显示颜色为32位色

02

StartVM()准备虚拟机

  1. 检查OPENGL版本、判断是否强制使用DX模式
  2. 调整虚拟机内存大小
  3. 调整虚拟机CPU核数

03

StartVMInternal()启动虚拟机

  1. 设置虚拟机的分辨率
  2. 设置虚拟机的DPI
  3. 设置虚拟机开启hardware_opengl
  4. 设置IMEI
  5. 设置虚拟机代理
  6. 设置端口转发
  7. 调用启动模拟器的命令

04

Init_devices()初始化各种设备。

这一步会创建多个通讯线程来与android内部通讯,只要有线程能通讯成功,就说明模拟器成功启动且能正常控制模拟器。

  1. 启动本地OPENGL渲染,创建渲染窗口
  2. 启动输入通讯线程
  3. 启动控制通讯线程
  4. 启动传感器通讯线程

正常流程下,UI调起一些Tbox(即virtual的修改版)命令行进行设置,然后启动ROM,ROM成功启动后,android内的launch进程会发送一个"connected"消息,UI收到后启动成功。UI通过建立socket来与Tbox来通讯,而Tbox通过虚拟的PCI设备来与ROM通讯。而异常流程下,启动ROM后,UI一直没有收到一个成功连接的消息。所以该问题可能原因只有两种:

1、ROM压根未启动成功

2、ROM启动了,但是通讯失败了。

明确了问题原因后,似乎很容易排查了,但跟进过程并不是那么顺利。

3.跟进

01

机器配置过低

15年11月。发现一些用户的ROM启动不了,共性是机器配置都不高。之后查到主要是内存影响虚拟机的启动,所以解决方案是在安装程序中增加对机器内存的检查,低于2G的不允许安装。

02

Tbox进程卡死

15年11月。跟进了多个启动卡98%的用户发现,如果模拟器非正常退出,TBoxManage.exe、TBoxSVC.exe、TBoxHeadless.exe(tbox进程)三个进程可能会卡死,再次启动模拟器,所依赖的进程卡死,导致启动不成功。解决方案很简单:启动前强制结束三个进程。

03

第三方注入

15年12月。又发现一些用户卡98%的共性是都安装了迅雷网游加速器。进一步定位发现该软件的XLaccLSP.dll会注入到所有进程,包括模拟器的TBoxHeadless.exe进程,而导致socket建立失败。解决办法是防止这个模块的注入。

04

LSP服务等导致socket不可用

16年上半年。仍陆续接到很多反馈,又跟进多个用户,发现用户都是由于建立socket失败而导致的启动卡98%,原因包括:

a) lsp导致断网、

b) V**问题。

c) 防火墙问题。

决定使用管道(pipe)来取代socket来通讯。由于改动涉及底层,改动量大,加上其它业务需要较多,排期至7月份才上线。

05

新ROM的bug

16年8月份。原本以为卡98%能够通过管道版本彻底解决,没想到新版本也仍有不少用户反馈。继续跟用户。发现用户都是单独启动tbox也无法进入至桌面。进一步定位,发现是VDI(也就是ROM)文件损坏而导致。而后在官方论坛上找到原来是由于4.4.2的系统解析损坏的XML异常而导致,而上半年刚好我们由4.2.2的系统升级至4.4.2,打上官方补丁后终于得以解决。至此卡98%的问题终于得以完全解决。

4.反思

01

不要太过相信第三方组件。

对第三方组件过度依赖,太相信第三方组件往往会踩大坑,使用第三方组件一方面需要做全方面深入了解,另一方面是做一些必要的容错或者规避机制。

02

关键信息应该上报

虽然该问题严重程度很高,但该问题只在极少数用户的环境下出现,测试环境无法重现,所以进展非常缓慢。更重要的是,该问题的影响范围我们无法评估。仅仅靠反馈量来驱动问题的解决是非常不靠谱的,用户很有可能试用一次后就流失了。所以,在产品初期就应整理关键路径的数据,并上报给后台,出现问题后能及时评估关键路径上的异常影响范围,及时推进问题的解决。

03

异常原因应尽量细化

首先是产品表现太笼统了,增加了定位问题的成本。只要是未能成功与虚拟机通信,都表现为启动卡98%。另外,一些问题也值得我们思考:

a) 是否可以通过技术手段细化不能通讯的原因呢?

b) 是否能提前检测是VM的自身问题还是通讯的问题?

c) 是否可以提前细化socket建立连接异常的原因?

d) ...

在这种疑难疑难的定位过程中,出现后尽量把异常细化,不论是产品表现还是日志上数据上报,以便在出现问题时能快速而精确的定位问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯移动品质中心TMQ 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
5 条评论
热度
最新
然而并没有卵用,从去年安装了,就从来没玩过一次,一直卡98%,多开也不行!7代i7,16g内存,gtx1060.
然而并没有卵用,从去年安装了,就从来没玩过一次,一直卡98%,多开也不行!7代i7,16g内存,gtx1060.
回复回复点赞举报
一样的并没有解决这个问题,今天安装王者荣耀就一直卡在98%,设置了很多东西,依然改变不了98%的现状
一样的并没有解决这个问题,今天安装王者荣耀就一直卡在98%,设置了很多东西,依然改变不了98%的现状
回复回复点赞举报
没有解决,我现在是因为98%的问题才搜到这个页面来的
没有解决,我现在是因为98%的问题才搜到这个页面来的
回复回复点赞举报
确实还是没有解决啊 我现在更新微信和qq都卡在98%不动了 只有点击多开,才能打开app 还是没有更新的app
确实还是没有解决啊 我现在更新微信和qq都卡在98%不动了 只有点击多开,才能打开app 还是没有更新的app
回复回复点赞举报
并没有完全解决啊。我现在就是卡98%找教程的时候找到这篇文章了,同是程序猿理解你们哈哈。
并没有完全解决啊。我现在就是卡98%找教程的时候找到这篇文章了,同是程序猿理解你们哈哈。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
DevEco Studio真机调试完整方法演示——保姆级(HUAWEI nova 14演示机)
需要点击软件版本,7次以上,会提示是否重启并开启开发者选项,选择是就等着重启完毕即可。
红目香薰
2025/07/10
1010
DevEco Studio真机调试完整方法演示——保姆级(HUAWEI nova 14演示机)
你不知道的Android SDK安全测试
image.png 作者介绍:anglia,2014年加入腾讯TEG,一直致力于信鸽和MTA两款产品的移动终端 引言 作为Android手机用户中的一枚残粉,假如突然手机掉了,脑电波蹦出的第一个念想是见鬼,还是您的理财产品上的钱不安全呢? 假如最新下载的app,进去时不仅弹出各种无聊广告,而且通知栏还会冒出意想不到的推送,您会想到这可能是钓鱼推送,马上卸载app? 假如X渡全家桶事件,您卸载了所有的X渡app,但乌云暴漏的X渡WH事件,无论是 wifi或3G/4G 蜂窝网络,只要手机在联网状态都有可能受
腾讯技术工程官方号
2018/01/29
2.6K1
你不知道的Android SDK安全测试
大厂Android启动优化-出其不意的优化手段
常规的手段优化后,我们能解决基本的问题,但是我们得继续追求极致,本章将分享一些意想不到的手段。
做个快乐的码农
2021/12/15
1.6K0
大厂Android启动优化-出其不意的优化手段
OVN实战一之GNS3操作指南及OVN入门
一、GNS3简介 GNS3是一个专业的网络模拟器,可以用它来模拟交换机、路由器、防火墙等网络设备。它的功能非常强大,基于它能搭建一个近似于 “真实”的模拟环境。 Wireshark是一个跨平台的网络数据包分析工具,和tcpdump比较它提供了一个友好的GUI界面。GNS3中已经对它进行了集成(安装GNS3的时候自动安装),可以通过GNS3界面直接对网络拓扑中的某条链路抓包分析。 1.1 GNS3架构 GNS3由三部分组成,我们平时使用的是GNS3-GUI,这是一个用Python编写的GUI界面,通过这个界面
SDNLAB
2018/03/29
3.3K0
OVN实战一之GNS3操作指南及OVN入门
一位30K大佬的面试经验!Android高级开发岗必问知识点,赶紧收藏
最近这两年移动开发遭遇寒冬,再加上培训机构以及很多应届生的加入,很多从事Android和IOS开发的同学,都出现了工作难找的情况。基于此种情况下,这段时间基于以下疑虑打算去外面看看:
Android技术干货分享
2021/01/26
3.4K0
一位30K大佬的面试经验!Android高级开发岗必问知识点,赶紧收藏
这一次,终于系统的学习了 JVM 内存结构
最近在看《 JAVA并发编程实践 》这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的了解到 JVM 内存结构,关于 JVM 内存结构也许大学的课堂上老师给我们讲过,也许没有,反正我对这一块有一点点的了解,但是从来没有系统的学习过,所以这一次我把《 深入理解Java虚拟机JVM高级特性与最佳实践 》、《 Java虚拟机规范 Java SE 8版 》这两本书中关于 JVM 内存结构的部分都看了一遍,算是对 JVM 内存结构有了新的认识。JVM 内存结构是指:Java 虚拟机定义了若干种程序运行期间会使用的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁,另一些则与线程一一对应,随着线程的开始而创建,随着线程的结束而销毁。具体的运行时数据区如下图所示:
Bug开发工程师
2019/11/12
4290
【HarmonyOS NEXT调试全攻略】设备连接+运行环境一站式指南
cd Deveco安装目录/sdk/default/openharmony/toolchains
Turing_010
2025/05/26
2900
【HarmonyOS NEXT调试全攻略】设备连接+运行环境一站式指南
掌握 Android 系统架构,看这一篇就够了!
Android系统庞大且错综复杂,今天小编将带领大家初探Android系统整体架构,一窥其全貌。
Android技术干货分享
2019/04/19
25.2K0
掌握 Android 系统架构,看这一篇就够了!
开源即时通讯IM框架MobileIMSDK的鸿蒙NEXT端开发快速入门
小提示:鸿蒙Next中的WebSocket API跟标准HTML5中的WebSocket接口及用法略有不同,但主要API都能一一对应,相差不大。
JackJiang
2024/12/30
2280
开源即时通讯IM框架MobileIMSDK的鸿蒙NEXT端开发快速入门
Android ROM 制作教程
大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。 本文来自: 起点手机论坛 具体文章參考:http://www.qdppc.com/forum.php?mod=viewthread&ti
全栈程序员站长
2021/12/15
3.1K0
Android 调试技巧总结
在 Android Studio 中,最基本的以 debug 模式运行程序并打断点进行调试,相比大家都会,不过,如果遇到一些特殊的调试场景,则需要运用一些特殊的调试技巧来进行调试。
Kindem
2022/08/12
1.2K0
Android 调试技巧总结
Android开发高手课NOTE
内存优化 卡顿的原因 频繁 GC 造成卡顿、物理内存不足时系统会触发 low memory killer 机制,系统负载过高是造成卡顿的俩个原因。
六月的雨
2020/03/27
9600
Android面试题之说说系统的启动流程(总结)
Boot Rom -> Boot Loader -> Kernel -> 启动Init进程 -> Zygote进程 -> system_server进程 -> 启动AMS、WMS、PMS等服务 -> AMS启动Launcher应用的home activity
AntDream
2024/06/13
1550
Android面试题之说说系统的启动流程(总结)
因为n卡驱动问题导致的安装ubuntu失败的解决方法
最近终于在我的飞行堡垒上装成功了ubuntu18.04了,哎,不容易哈,大一刚接触linux的时候,我就想给电脑装ubuntu,脱坑windows,但是每次装系统的时候都会卡在ubuntu的logo那里,无奈的一批,谷歌了很多,试了很多方法都失败了。 然后昨天无意中看到一篇关于ubuntu N卡驱动导致ubuntu安装失败的解决方法的文章。
kevinfaith
2018/09/18
5.3K0
因为n卡驱动问题导致的安装ubuntu失败的解决方法
Android性能优化(一)
一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序。
xiangzhihong
2021/01/22
2.8K0
你知道威胁手游安全的对象有哪些吗?
手游客户端的发展往往会吸引一批想从游戏中获利以及爱好逆向分析研究员的关注,因此手游的安全攻守之道就产生了。那么这些威胁对象的存在,给手游客户端的安全带来很大程度上的影响,所带来影响的结果就是:游戏中出现各种外挂脚本,游戏客户端破解版,打金工作室泛滥等等各种作弊行为的出现,最终导致手游客户端的平衡性被破坏,玩家流失,最终导致手游收入的降低。
小道安全
2021/04/22
6.2K0
你知道威胁手游安全的对象有哪些吗?
移动端跨平台技术总结
概述 曾经大家以为在手机上可以像桌面那样通过 Web 技术来实现跨平台开发,却因为性能或其他问题而放弃,不得不针对不同平台开发多个版本。这也违背了跨平台开发的初衷。而React Native让跨平台移动端开发在次回到人们的视野中,其成功的原因除了他“一次编写处处运行”,还因为它相比h5等前端技术,有了更接近原生的体验。 为了方便理解,笔者将跨平台技术分为4大流派: Web 流:也被称为 Hybrid 技术,它基于 Web 相关技术来实现界面及功能 代码转换流:将某个语言转成 Objective-C、Ja
xiangzhihong
2018/02/06
1.9K0
对一个手游修改器锁机APP的分析
于是就进行下载分析(使用或分析这种未知风险的APP,建议都在模拟器上进行操作,因为你不知道这APP是否有危害,在模拟器上运行,如果出问题了,顶多就是删除模拟器然后重新再来,如果再手机上运行,那么这个就可能需要你进行刷机才可解决。),在模拟器上安装完APP,点击启动APP然后就出现了下面的一幕。屏幕被锁了,界面还带有极具讽刺的文字。
小道安全
2022/12/03
1.1K0
对一个手游修改器锁机APP的分析
Android开发在路上:少去踩坑,多走捷径
最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的。 http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行update,可以及时了解Android版本比例趋势。 屏幕密度数
腾讯大讲堂
2018/02/11
9980
Android开发在路上:少去踩坑,多走捷径
安卓7.0+系统抓包方案
最近在帮人写一些自动签到的脚本,涉及到了在安卓7.0+系统中如何对 app 和微信小程序进行抓包的问题。这里记录一下有效的抓包方案。
Chor
2023/01/16
3.8K0
推荐阅读
相关推荐
DevEco Studio真机调试完整方法演示——保姆级(HUAWEI nova 14演示机)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档