[Image Removed]Hello,我们项目之前是5.4.3的引擎, 最近升级了5.6.1,IOS启动的时候会出现mount的崩溃,大概mount149个paks的时候,TUniquePtr<FFileIoStoreReader> Reader(new FFileIoStoreReader(*PlatformImpl, Stats));
FIoStatus IoStatus = Reader->Initialize(InTocPath, Order);
if (!IoStatus.IsOk())
{
return IoStatus;
}返回的IOSTATUS为fileopenfailed。导致析构的delete 0发生崩溃。想问下是否5.6的IOSTORE占用了更多的句柄,我们现在大概是400个paks,每个pak包括ucas,utoc一共是1200个文件。
[Attachment Removed]
TonyChen1
(TonyChen1)
3
你好,5.6对utoc文件加入了内存映射,如果你们想要回退之前5.4的机制可以将这个cvar关了
[SystemSettings]
IoStore.AllowMemoryMappedUtoc=0
[Attachment Removed]
如果想使用这个优化的话,有什么办法可以提高IOS的打开文件句柄数吗
[Attachment Removed]
TonyChen1
(TonyChen1)
5
可以试下在FIOSPlatformMisc::PlatformInit修改OPEN_MAX这种方式,不过可以考虑项目是否能通过按需mount或者将小的pak合并的方式来避免一次性mount这么多pak带来这种问题
[Attachment Removed]
有两个问题,一个是当前这个OPEN_MAX是10240,我一共是400个pak,按理说不会超过这个吧,系统的限制是不是远低于这个,我看到有说IOS系统上只有512个句柄的限制,还另一个问题就是我降这个修改成10W之后一样会崩溃,因为pakmount的时间要早于platforminit的时间,那这个setrlimit可以提前到mountpak之前吗
[Attachment Removed]
TonyChen1
(TonyChen1)
7
你们的Limit.rlim_cur和Limit.rlim_max分别是多少?如果pakmount时间早于platforminit,断点应该能看到最后是哪个值判断失败返回的fileopenfailed
[Attachment Removed]
你好,我们IOS将设置limit的时间提前到了mout之前,设置成功这块没问题了,但是安卓现在出现的同样的报错12-29 10:45:57.012 F/DEBUG (23477): signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
12-29 10:45:57.012 F/DEBUG (23477): Abort message: ‘FORTIFY: FD_SET: file descriptor 1029 >= FD_SETSIZE 1024’,
并且安卓在初始化的时候已经将limit设置的很高了,默认取到打印出来是32768,设置修改成10240显示也成功了,但是系统仍然在1024的时候报错,我查了一下好像这个FS_SET跟设置的setlimit不是一个东西,是C库里FD_SET调用导致的,想确认下这个abort崩溃跟IOS的句柄数限制是一个问题,安卓的这个崩溃是否是由于句柄数限制导致的。
[Attachment Removed]
TonyChen1
(TonyChen1)
9
看上去是超过FD_SET最大1024的限制,您参考下之前的case: [Content removed]
[Attachment Removed]