我发现我的一个进程(~90个线程)使用> 8G内存,我不认为它需要这么大.
因此,我读了/proc/{pid}/maps
,/proc/{pid}/smaps
和pstack {pid}
.我想知道那些大的63M + 508K区域是如何产生的,它们的用途是什么,我可以通过某种方式减少我的内存使用量吗?
我发现这些地区几乎分为三类:
4xxx000-4xxxx000
:线程堆栈? 313xxxx000-313xxxx000
:lib文本和数据? 2xxxxxxxx000-2xxxxxxxx000
:许多令人困惑的(64M+...+63M+508K
)块.这种区域的数量非常接近线程的数量.这些与线程相关的大区域也是如此吗?下面是结果后,我合并的结果/proc/{pid}/maps
和pstack {pid} | grep Thread
:
(*Thread ?? (Thread 0x@@@@@@@@@@ (LWP !!!!))*
如果0x@@@@@@@@
位于这个区域内,我将它放在每个区域的末尾(我猜@@@@
是线程堆栈基础,因此该区域是线程堆栈的.)
Region 0: 18M, 00400000-01675000 r-xp 00000000 08:02 5401 /mybinary
Region 1: 236K, 01875000-018b0000 rw-p 01275000 08:02 5401 /mybinary
Region 2: 456K, 018b0000-01922000 rw-p 018b0000 00:00 0
Region 3: 741M, 11b46000-4006c000 rw-p 11b46000 00:00 0 [heap]
Region …
Run Code Online (Sandbox Code Playgroud)