jetsam就像linux的oom,当物理上内存低的时候,操作系统根据某些策略,去找到一个进程,并且将这个进程
杀死以释放更多的内存,这个进程一般就是占用内存最多的,在ios上选择的是占用虚拟内存页最多的进程,既然知道是
占用虚拟内存最多的进程,那么xcode提供的工具就派上用场了。
VSS = RSS + LSS + SwSSWhere:
VSSVirtual Set Size, as reported by top, ps(1), and others
RSSResident Set Size - the actual RAM footprint of the process. Also shown in top(1), ps(1), etc
LSS"Lazy" Set Size - Memory which the system has agreed to allocate, but not yet allocated
SwSS"Swap" Set Size - Memory which was previously in RAM, but has been pushed out to swap.
In iOS , this is always 0
xcode的instrument的工具 allocations 或者 leak都可以,以allocation为例
找到占用多的前几名进程,点击旁边的E图标,可以看到线程的堆栈,这个工具真是太牛鼻了,仔细review下代码吧,问题就出在你的设计和代码中。
最后爆下我排查的这个问题:
原因是每捕获一条http数据,写入沙盒,第二个请求又把第一个请求读出来,再写入沙盒。。。。。如果是第500个,那就需要把前面499个读出来到内存,然后再写入沙盒,牛鼻的人写的代码就是不一样啊,io狂高,写不到磁盘,导致内存迟迟无法释放,而且随着采集数据的增多,要很久很久才能释放出内存,结果就是触发 low memory warning ,被系统杀死了。
网友评论