-
Notifications
You must be signed in to change notification settings - Fork 179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第一次快照unity会卡死 #5
Comments
参数我一开始选的都是-1,但我以为是测试的对象太多了,所以就填成10了,也没用 |
1.你无论如何都不要在具体项目中使用 "./" 这样的相对路径,我示例中这么写是为了方便保存在当前路径下,slua 或者 ulua 等环境不一样,也会存在读取权限的问题,恐怕你自己都不知道 "./" 会保存到哪里;你应该自己去合并一个明确的路径才对,比如:Application.persistentPath + "/LuaSnapshot/" 或者 Application.dataPath + "/LuaSnapshot/" 类似非常明确的路径才对; 2.mri.m_cMethods.DumpMemorySnapshotCompareFile 中也是一样,显示的传入文件夹路径和文件路径,你修改试试。 |
非常谢谢啊,头一次见到你这么积极回复的博主。昨天我已经猜测出来问题所在了。其实不只是你这个工具,就算是风云写的snapshot工具,我加入到slua.dll重新编译,然后加入全局变量中。当我在lua内用snapshot函数快照时,如果快照的时候是我自己测试的一个对象,因为内容很少,所以很容易就打印出来了。但是当我进入游戏大场景,再调用就会直接卡死,跟用你的工具现象是一样的。所以我暂时怀疑可能是我游戏场景中的临时内存太多了吧 |
所以我在想,会不会存在监控的变量太多了导致卡死的因素? |
这个比较奇怪了,你的 lua memroy 得多大,一般10M以下,5M左右正常,我曾经遇到过因为泄露100M的lua memroy,打印快照也是很快没有死过的情况,不知道你的情况,你需要看看 collectgarbage("count") 的数值,如果这个数值太夸张,比如甚至大于 100M,就得考虑你项目对于lua的使用是不是有什么问题。如果你有数据尽量贴过来帮你看看。 |
我们的项目确实特别大,超大场景无缝地图,还有引擎配合,各种绚丽的shader,场景元素非常庞大。在登录界面,我collectgarbage("count")得到的结果是42525左右,这个时候已经有点卡了。到了场景中,得到的值内存值为180000到380000左右,一直卡死 |
我们项目之前确实存在内存泄露,就在那一直开着不动,unityproflier看不出来,但从任务管理器上看unity,内存一直在慢慢增长。因为之前都是做功能,一直没重视优化这块,所以现在要出包了,我就被要求做优化工具的研究。感觉你这个和风云那个都挺好,但唯独卡这个事我不知道怎么回事。其实我想如果能减少监控的数目,能不能做到筛选,让工具运行更顺畅一些 |
现在的问题是,先不考虑内存泄露,我得先找到哪些临时的内存占用了这么多的内存,如果这个不解决,就算没有内存泄露,它平时的正常状态也会占用过多内存 |
这个没办法,你的虚拟机内存太大了,几百兆,不过也不至于所有操作卡死,顶多unity会卡一会儿,生成过程没那么慢,可能你触发了什么访问权限的东西被系统阻止,你首选确认修改了我上面说的生成路径,应该是你项目的问题。DumpMemorySnapshot 接口最后有两个默认参数,不填的话是打印 debug.registry,你可以显示指定,比如: |
至于过滤,你可以自己去修改CollectObjectReferenceInMemory这个接口,按照自己需求修改即可,比较简单。 |
我也同时试了云风的版本和这个版本,我的collectgarbage("count")大约在500M左右,云风的可以生成出来,这个版本不知道为啥也卡了~不是系统权限的原因,还没到输出的逻辑,卡在collect阶段 |
不好意思,内网无法截图,我只能手写了。以下是我的调用
local mri=require 'common.utils.MemoryReferenceInfo'
if Input.GetKeyDown(KeyCode.U) then
collectiigarbage("collect")
mri.m_cMethods.DumpMemorySnapshot("./","1-Before",10)
elseif Input.GetKeyDown(KeyCode.I) then
collectiigarbage("collect")
mri.m_cMethods.DumpMemorySnapshot("./","2-After,10)
elseif Input.GetKeyDown(KeyCode.O) then
mri.m_cMethods.DumpMemorySnapshotCompareFile("./","Compared",10,"./LuaMemRefInfo-All-[1-Before].txt","./LuaMemRefInfo-All-[2-After].txt"
end
我用的是Slua,对应lua版本5.1,手写输入难免不,但大致是这么写的,我是完全参考你的事例程序这么用的。只要一按U键,立刻屏幕,所有操作都会卡死,也不生成文件(其实到现在我都不知道文件会生成在什么地方)
The text was updated successfully, but these errors were encountered: