天堂2单机论坛

 找回密码
 立即注册
查看: 2388|回复: 9

老端比较坑的一个客户端崩溃异常修复

[复制链接]
  • TA的每日心情
    开心
    2021-3-30 11:43
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    28

    主题

    58

    帖子

    2410

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2410
    发表于 2021-3-28 14:00:17 | 显示全部楼层 |阅读模式
    作者:复古天堂
    1. OS: Windows XP 5.1 (Build: 2600)
    2. CPU: GenuineIntel PentiumPro-class processor @ 3608 MHz with 1023MB RAM
    3. Video: NVIDIA GeForce RTX 2060 SUPER (4614)

    4. Insufficient Memory.
    5. Please check the Virtual Memory Option and avilable hard drive space.
    6. You can check them by going to : Control Panel->System->Advanced->Performance->Settings->Advanced->Virtual memory.

    7. <?int?Core.Errors.History?>: FMallocWindows::Malloc <- FMallocWindows::Realloc <- 356E0000 469032 FArray <- FArray::Realloc <- 19543*24 <- FCanvasUtil::DrawTile <- FDynamicActor::Render <- Actor <- TranslucentRendering <- RenderLevel <- FLevelSceneNode::Render <- FPlayerSceneNode::Render <- UGameEngine::Draw <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- MainLoop
    复制代码
    具体内容是客户端崩溃后推荐调大虚拟内存,然并卵。

    根本不是内存问题
    从<?int?Core.Errors.History?>可以看出,core接口调用了errors错误提示,具体内容大意上是某UI界面刷新异常过多,导致内存溢出,然后导致的客户端崩溃
    然而在没有core源码的情况下我们需要分析出具体问题
    通过IDE定位到导致崩溃异常的内容(怎么定位参照dbg打的断点信息)
    我们可以看到当服务端发送InventoryUpdate封包到客户端上时,线程过多,导致线程阻塞,然后导致客户端异常崩溃.
    那么我们就可以在内核里对InventoryUpdate进行一些优化.
    在内核里对所有引用InventoryUpdate的类进行仔细检查
    会发现L2PcInstance类下的addItem方法(如图):


    其中_inventory.addItem(process, itemId, count, this, reference);
    新增道具后,又进行了背包强制刷新
    InventoryUpdate playerIU = new InventoryUpdate(); //创建背包UI界面类playerIU.addItem(item);//往对象里添加道具sendPacket(playerIU);//发送UI封包

    这样会导致玩家到道具后,服务端不断的向客户端发送背包界面UI刷新的封包
    从而导致客户端不断接收UI刷新命令,最后导致客户端内存溢出崩溃.
    注释掉这几行代码后,崩溃不在出现.
    但是如果玩家在打开背包情况下击杀获得道具,界面将不会进行刷新.
    当然,谁打怪的时候还开着包盯着看?
    好了,这个坑我填上了

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 488 天

    [LV.9]以坛为家II

    0

    主题

    554

    帖子

    1522

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1522
    发表于 2021-3-29 10:31:51 | 显示全部楼层
    膜拜大神!!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-4-6 17:17
  • 签到天数: 573 天

    [LV.9]以坛为家II

    39

    主题

    1139

    帖子

    1万

    积分

    VIP会员

    Rank: 8Rank: 8

    积分
    11428
    发表于 2021-4-6 08:29:28 | 显示全部楼层
    路过看看!!
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-25 07:53
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    0

    主题

    21

    帖子

    70

    积分

    正式会员

    Rank: 2

    积分
    70
    发表于 2021-4-27 10:10:18 | 显示全部楼层

    膜拜大神!!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-9-28 22:29
  • 签到天数: 222 天

    [LV.7]常住居民III

    73

    主题

    292

    帖子

    1154

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1154
    发表于 2021-5-17 00:27:53 | 显示全部楼层
    一看就是虚拟机报错,XP系统1G内存,rtx2060显卡,风马牛不相及的东东。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-7-29 00:03
  • 签到天数: 864 天

    [LV.10]以坛为家III

    4

    主题

    5131

    帖子

    1万

    积分

    VIP会员

    Rank: 8Rank: 8

    积分
    14777
    发表于 2021-6-30 05:30:35 | 显示全部楼层
    感谢楼主分享
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-6-8 09:14
  • 签到天数: 40 天

    [LV.5]常住居民I

    0

    主题

    99

    帖子

    120

    积分

    正式会员

    Rank: 2

    积分
    120
    发表于 2021-8-29 09:58:36 | 显示全部楼层
    膜拜大神!!
    回复

    使用道具 举报

  • TA的每日心情

    前天 14:36
  • 签到天数: 32 天

    [LV.5]常住居民I

    1

    主题

    69

    帖子

    6115

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    6115
    发表于 2022-8-30 13:40:16 | 显示全部楼层
    谢谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:05
  • 签到天数: 136 天

    [LV.7]常住居民III

    4

    主题

    693

    帖子

    1627

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1627
    发表于 2024-12-2 12:36:10 | 显示全部楼层
    感谢楼主分享
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|监狱|天堂2单机论坛 ( 粤ICP备20030366号 )

    GMT+8, 2025-5-1 02:15 , Processed in 0.058099 second(s), 22 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表