cocoapods-project-hmap icon indicating copy to clipboard operation
cocoapods-project-hmap copied to clipboard

pod install 时卡死,内存飙升

Open tinymind opened this issue 2 years ago • 5 comments

如下图,终端输出 generate method of post install hook context override 之后就一直卡住,活动监视器显示 ruby 进程所占用的内存持续飙升 11 ~ 19.95 GB,直到被系统杀死。

image

CocoaPods 版本:1.11.2 MacOS 版本:12.0.1 Ruby 版本:ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19] hmap 版本:1.0.4

tinymind avatar Jun 06 '22 11:06 tinymind

我这边没有相同版本的 Mac 去还原你的环境,在其他条件相同的情况下并没有复现你说的问题,猜想这样的问题可能是多个插件间的方法交换导致的递归循环,麻烦列下你环境下安装的其他 CocoaPods 插件,因为所有的插件都会随着 CocoaPods 命令的调用一起加载到当前的 Ruby 进程,部分插件代码不需要依赖 Podfile 里面的插件声明就已经生效了,比如那些方法交换。

chenxGen avatar Jun 23 '22 06:06 chenxGen

调试来看是崩溃在recursively_add_dependent_headers_to_hmap的过程中,如果pod的依赖树比较深(十几级的深度),执行递归遍历时就会遇到类似问题。

似乎缺乏合适的退出递归条件

blastmann avatar Aug 04 '22 03:08 blastmann

@blastmann 可以提供一个 demo 吗

chenxGen avatar Aug 15 '22 03:08 chenxGen

我有空模拟创建一个看看,但从代码上看最好不要直接递归,我调整了一下代码逻辑,按照以下逻辑可以比较快地跑完:

  1. 优先一次遍历生成所有的pod hmap generator,通过字典缓存
  2. 递归合并aggregate target依赖到的pod,当遇到缓存时应该直接退出一次递归
  3. 生成hmap

blastmann avatar Aug 15 '22 05:08 blastmann

确实这样处理可以

chenxGen avatar Aug 15 '22 05:08 chenxGen