hxp
2024-04-15 7817044e4d973d1eedf2a68a03546769c58c56bd
10138 内存分析(地图24小时内没有玩家在线则回收py表数据)
5个文件已修改
126 ■■■■■ 已修改文件
PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/Éú³ÉIpyGameDataPY/IpyGameDataPYTemp.py
@@ -21,6 +21,7 @@
import hashlib
import os
import gc
'''表结构定义字典
{
@@ -60,6 +61,34 @@
        self.IpyDataClear(True)
        return
    
    def Recycle(self):
        Log("IPY_DataMgr Recycle")
        for tableName in Def_IpyTable.keys():
            if not hasattr(self, "ipy%sLen" % tableName):
                continue
            cacheList = getattr(self, "ipy%sCache" % tableName)
            del cacheList
            delattr(self, "ipy%sLen" % tableName)
            delattr(self, "ipy%sCache" % tableName)
            Log("Recycle IPY_%s" % tableName)
        del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
        self.fileMD5Dict = {}
        self.ipyConfigEx = {}
        self.ipyDataIndexMap = {}
        self.ipyDataIndexMapEx = {}
        self.ipyFuncConfigDict = {}
        self.classSizeDict = {}
        gc.collect()
        return
    def LoadAll(self):
        ## åŠ è½½å…¨éƒ¨æ•°æ®ï¼Œæµ‹è¯•å†…å­˜ç”¨ï¼Œå®žé™…åº”ç”¨ä¸­ä¸è°ƒç”¨
        for tableName in Def_IpyTable.keys():
            setattr(self, "ipy%sLen" % tableName, 0)
        self.IpyDataClear()
        return
    def IpyDataClear(self, onlyCheck=False):
        Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
        if not onlyCheck:
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -21,6 +21,7 @@
import hashlib
import os
import gc
'''表结构定义字典
{
@@ -2327,6 +2328,34 @@
        self.IpyDataClear(True)
        return
    
    def Recycle(self):
        Log("IPY_DataMgr Recycle")
        for tableName in Def_IpyTable.keys():
            if not hasattr(self, "ipy%sLen" % tableName):
                continue
            cacheList = getattr(self, "ipy%sCache" % tableName)
            del cacheList
            delattr(self, "ipy%sLen" % tableName)
            delattr(self, "ipy%sCache" % tableName)
            Log("Recycle IPY_%s" % tableName)
        del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
        self.fileMD5Dict = {}
        self.ipyConfigEx = {}
        self.ipyDataIndexMap = {}
        self.ipyDataIndexMapEx = {}
        self.ipyFuncConfigDict = {}
        self.classSizeDict = {}
        gc.collect()
        return
    def LoadAll(self):
        ## åŠ è½½å…¨éƒ¨æ•°æ®ï¼Œæµ‹è¯•å†…å­˜ç”¨ï¼Œå®žé™…åº”ç”¨ä¸­ä¸è°ƒç”¨
        for tableName in Def_IpyTable.keys():
            setattr(self, "ipy%sLen" % tableName, 0)
        self.IpyDataClear()
        return
    def IpyDataClear(self, onlyCheck=False):
        Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
        if not onlyCheck:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -51,6 +51,7 @@
import PlayerTeam
import GameMap
import NPCRealmRefresh
import IpyGameDataPY
#---------------------------------------------------------------------
## å‰¯æœ¬å¼€å¯
#  @param gameWorld IPY_GameWorld
@@ -548,7 +549,9 @@
    __ProcessRouteServer(gameWorld, tick)
    
    #每分钟触发
    __RefreshOnMinute(tick)
    curTime = GameWorld.GetCurrentTime()
    __OnMapMinute(curTime, tick)
    __RefreshOnMinute(curTime, tick)
    #五分钟触发
    __RefreshOnFiveMinute(tick)
    #定时检测关闭超时文件
@@ -752,17 +755,13 @@
## æŒ‰åˆ†é’Ÿåˆ·æ–°
# @param tick
# @return None
def __RefreshOnMinute(tick):
def __RefreshOnMinute(curTime, tick):
    gameWorld = GameWorld.GetGameWorld()
    lastTick = gameWorld.GetTickByType(ChConfig.TYPE_Map_Tick_ProcessMinute)
    tickInterval = ChConfig.TYPE_Map_Tick_Time[ChConfig.TYPE_Map_Tick_ProcessMinute]
    if tick - lastTick < tickInterval:
        return
    gameWorld.SetTickByType(ChConfig.TYPE_Map_Tick_ProcessMinute, tick)
    curTime = GameWorld.GetCurrentTime()
    __OnMapMinute(curTime, tick)
    
    playerManager = GameWorld.GetMapCopyPlayerManager()
    for index in xrange(playerManager.GetPlayerCount()):
@@ -780,8 +779,35 @@
        return
    PyGameData.g_mapLastProcess_Minute = curMinute
    PlayerTeam.OnCheckTeamPlayerDisconnectTimeout(tick)
    __CheckIpyDataRecycle(curTime)
    return
def __CheckIpyDataRecycle(timeNow):
    ## æ£€æŸ¥IpyData数据回收
    playerCount = GameWorld.GetPlayerManager().OnlineCount()
    if playerCount:
        PyGameData.g_ipyDataRecycleCheckTime = 0
        #GameWorld.DebugLog("地图还有玩家在线! playerCount=%s" % playerCount)
        return
    curTime = GameWorld.ChangeDatetimeToNum(timeNow)
    if not PyGameData.g_ipyDataRecycleCheckTime:
        PyGameData.g_ipyDataRecycleCheckTime = curTime
        #GameWorld.DebugLog("地图没有玩家在线")
        return
    if PyGameData.g_ipyDataRecycleCheckTime == 1:
        # å·²ç»å›žæ”¶äº†
        #GameWorld.DebugLog("本次已经回收过了")
        return
    if curTime - PyGameData.g_ipyDataRecycleCheckTime < 24 * 3600:
        #GameWorld.DebugLog("还未到达回收时间, passSeconds=%s" % (curTime - PyGameData.g_ipyDataRecycleCheckTime))
        return
    PyGameData.g_ipyDataRecycleCheckTime = 1
    IpyGameDataPY.IPYData.Recycle()
    return
## æ•´åŠå°æ—¶è§¦å‘ <00和30分钟时触发>
# @param curPlayer
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -21,6 +21,7 @@
import hashlib
import os
import gc
'''表结构定义字典
{
@@ -5574,6 +5575,34 @@
        self.IpyDataClear(True)
        return
    
    def Recycle(self):
        Log("IPY_DataMgr Recycle")
        for tableName in Def_IpyTable.keys():
            if not hasattr(self, "ipy%sLen" % tableName):
                continue
            cacheList = getattr(self, "ipy%sCache" % tableName)
            del cacheList
            delattr(self, "ipy%sLen" % tableName)
            delattr(self, "ipy%sCache" % tableName)
            Log("Recycle IPY_%s" % tableName)
        del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
        self.fileMD5Dict = {}
        self.ipyConfigEx = {}
        self.ipyDataIndexMap = {}
        self.ipyDataIndexMapEx = {}
        self.ipyFuncConfigDict = {}
        self.classSizeDict = {}
        gc.collect()
        return
    def LoadAll(self):
        ## åŠ è½½å…¨éƒ¨æ•°æ®ï¼Œæµ‹è¯•å†…å­˜ç”¨ï¼Œå®žé™…åº”ç”¨ä¸­ä¸è°ƒç”¨
        for tableName in Def_IpyTable.keys():
            setattr(self, "ipy%sLen" % tableName, 0)
        self.IpyDataClear()
        return
    def IpyDataClear(self, onlyCheck=False):
        Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
        if not onlyCheck:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -21,6 +21,7 @@
g_commMapLinePlayerCountDict = {} # å¸¸è§„地图分线人数 {mapID:{lineID:人数, ...}}
g_needRefreshMapServerState = True # å¸¸è§„地图分线人数是否有变更需要通知
g_mapLastProcess_Minute = -1 # åœ°å›¾ä¸Šæ¬¡å¤„理的分钟
g_ipyDataRecycleCheckTime = 0 # åœ°å›¾IpyData数据回收检查time
InitPyItem = False # æ˜¯å¦åŠ è½½è¿‡ç‰©å“è¡¨æ‰€éœ€è¦çš„Py数据, æ¯å¼ åœ°å›¾åªåœ¨å¯åŠ¨æ—¶æ‰§è¡Œä¸€æ¬¡
DailyUseCountLimitItemIDList = [] # æ¯æ—¥æœ‰ä½¿ç”¨ä¸ªæ•°é™åˆ¶çš„物品ID列表