top 命令看到 VSZ 在逐步增大

2022-07-30 20:56:02 +08:00
 huangya
在 debug 看到一个程序的 VSZ 在逐步增大,我在理清是否发生了 memory leak 或者有没有潜在的问题. 这个程序最早的版本是没有这个问题的,我们魔改了很多。由于各种原因,不方便用 git bisect 来 debug.所以想请教一下大家。PID 为 7512 。
可以看大 VSZ 和%VSZ 分别为 2173m 和 29%。
root@RaspberryPi-Gateway:~# top
Mem: 453176K used, 7283640K free, 77544K shrd, 11840K buff, 119616K cached
CPU: 2% usr 4% sys 0% nic 93% idle 0% io 0% irq 0% sirq
Load average: 0.30 0.27 0.27 3/300 4429
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
4429 3665 root R 2052 0% 3% top
7512 1 root S 2173m 29% 2% /usr/bin/CcspWifiSsp -subsys eRT.

奇怪的是:
1.似乎涨到 29%不会继续涨了

2.用下列命令看 heap 信息,发现 heap 也不大。
root@RaspberryPi-Gateway:~# grep -A 15 heap /proc/7512/smaps
00024000-00066000 rw-p 00000000 00:00 0 [heap]
Size: 264 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 248 kB
Pss: 248 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 248 kB
Referenced: 228 kB
Anonymous: 248 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
--
00066000-002a0000 rw-p 00000000 00:00 0 [heap]
Size: 2280 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 2216 kB
Pss: 2216 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 2216 kB
Referenced: 2216 kB
Anonymous: 2216 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB

3.还是看 /proc/7512/smaps 里面的信息,发现一个我不知道的区域占了大量虚拟内存
2fc99000-b16fe000 rw-p 00000000 00:00 0
Size: 2124180 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 16 kB
Pss: 16 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 16 kB
Referenced: 16 kB
Anonymous: 16 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd wr mr mw me ac


额外补充的 Notes:
1. 这个 top 命令来自于嵌入式的 busybox
2. free 看到的信息:
root@RaspberryPi-Gateway:~# free -m
total used free shared buff/cache available
Mem: 7555 313 7117 75 124 7045
Swap: 0 0 0
2360 次点击
所在节点    Linux
3 条回复
nuk
2022-07-31 02:44:29 +08:00
应该只是 mmap 了,但还没访问的未分配页。原因各种各样,不过只要不做 fork ,一般是没啥问题的。
huangya
2022-09-02 18:42:34 +08:00
@nuk 不好意思这么久才回复,但我其实一直在追这个问题。因为我发现似乎另外一个遇到的内存问题可能与之相关,我看到有时程序调用 calloc ( x,y )不成功。x *y 大概有几千个字节。想听听你的看法。或者你能否多讲讲此贴的问题的可能的原因。非常感谢!
nuk
2022-09-03 22:02:55 +08:00
@huangya 建议跟踪一下内存分配函数,这片 2G 的内存怎么看都像 INT_MAX,mmap 下个断点
b mmap if len>1<<20

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/869684

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX