Hi,
I'am working on a home gateway:
At startup, upnpd process takes a lot of memory: about 500M (view with top). When my gateway obtain an ipv4 @, the amout of VMsize is increasing to about 600M than it reaches 900M!!!!.
Mem: 241808K used, 212872K free, 0K shrd, 10084K buff, 40884K cached
CPU: 4% usr 0% sys 0% nic 95% idle 0% io 0% irq 0% sirq
Load average: 0.50 0.40 0.43 1/93 10124
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
2197 938 root S 856m 193% 4% upnpd -f -r 6a524f49 Device/IP/Interf
918 1 root S 18732 4% 0% /usr/bin/swmdk
1201 938 root S 7840 2% 0% tr69d
2184 938 root S 7328 2% 0% /usr/sbin/dhcpd -f -cf /opt/conf/dhcp
root@RAC2V1S:~# cat /proc/2197/status
Name: upnpd
State: S (sleeping)
Tgid: 2197
Ngid: 0
Pid: 2197
PPid: 938
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
VmPeak: 877504 kB
VmSize: 877440 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 4968 kB
VmRSS: 4968 kB
VmData: 875104 kB
VmStk: 136 kB
VmExe: 88 kB
VmLib: 1680 kB
VmPTE: 124 kB
VmPMD: 16 kB
VmSwap: 0 kB
Threads: 9
SigQ: 2/1775
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000004
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
voluntary_ctxt_switches: 81
nonvoluntary_ctxt_switches: 46
When I connect a client, the number of threads increses and VmSize and VmData. when this client disconnect, the number of threads decreases and VmSize still with the same value.
When I connect another client, the number of thread increses ( +2) and the amout of data dones increase. when I connect another client, VmSize/VmData/ increases and thread number.
root@RAC2V1S:~# pmap 2197
2197: {no such process} upnpd -f -r 6a524f49 Device/IP/Interfaces/Interface[IP_BR_LAN] BR_LAN Device/IP/Interfaces/Interface[IP_DATA] eth0
0000000000400000 88K r-xp /usr/sbin/upnpd
0000000000426000 4K rw-p /usr/sbin/upnpd
0000000000427000 4K rw-p [ anon ]
00000000295b4000 140K rw-p [heap]
0000007f64000000 132K rw-p [ anon ]
0000007f64021000 65404K ---p [ anon ]
0000007f68000000 132K rw-p [ anon ]
0000007f68021000 65404K ---p [ anon ]
0000007f6c000000 132K rw-p [ anon ]
0000007f6c021000 65404K ---p [ anon ]
0000007f70000000 132K rw-p [ anon ]
0000007f70021000 65404K ---p [ anon ]
0000007f74000000 136K rw-p [ anon ]
0000007f74022000 65400K ---p [ anon ]
0000007f78000000 132K rw-p [ anon ]
0000007f78021000 65404K ---p [ anon ]
0000007f7c000000 132K rw-p [ anon ]
0000007f7c021000 65404K ---p [ anon ]
0000007f80000000 2596K rw-p [ anon ]
0000007f80289000 62940K ---p [ anon ]
0000007f84000000 132K rw-p [ anon ]
0000007f84021000 65404K ---p [ anon ]
0000007f88000000 132K rw-p [ anon ]
0000007f88021000 65404K ---p [ anon ]
0000007f8c000000 132K rw-p [ anon ]
0000007f8c021000 65404K ---p [ anon ]
0000007f90000000 132K rw-p [ anon ]
0000007f90021000 65404K ---p [ anon ]
0000007f94000000 132K rw-p [ anon ]
0000007f94021000 65404K ---p [ anon ]
0000007f9a5ae000 4K ---p [ anon ]
0000007f9a5af000 2036K rw-p [ anon ]
0000007f9a7ac000 4K ---p [ anon ]
0000007f9a7ad000 2036K rw-p [stack:4439]
0000007f9a9aa000 4K ---p [ anon ]
0000007f9a9ab000 2444K rw-p [stack:2209]
0000007f9ac0e000 4K ---p [ anon ]
0000007f9ac0f000 2036K rw-p [stack:4870]
0000007f9ae0c000 4K ---p [ anon ]
0000007f9ae0d000 2036K rw-p [ anon ]
0000007f9b00a000 4K ---p [ anon ]
0000007f9b00b000 2036K rw-p [ anon ]
0000007f9b208000 4K ---p [ anon ]
0000007f9b209000 2036K rw-p [stack:2205]
0000007f9b406000 4K ---p [ anon ]
0000007f9b407000 2036K rw-p [stack:2204]
0000007f9b604000 4K ---p [ anon ]
0000007f9b605000 2036K rw-p [stack:2203]
0000007f9b802000 4K ---p [ anon ]
0000007f9b803000 2036K rw-p [ anon ]
0000007f9ba00000 4K ---p [ anon ]
0000007f9ba01000 2100K rw-p [stack:2201]
0000007f9bc0e000 1220K r-xp /lib/libc-2.22.so
0000007f9bd3f000 60K ---p /lib/libc-2.22.so
0000007f9bd4e000 16K r--p /lib/libc-2.22.so
0000007f9bd52000 8K rw-p /lib/libc-2.22.so
0000007f9bd54000 16K rw-p [ anon ]
0000007f9bd58000 84K r-xp /usr/lib/libgsdf.so.1.0.0
0000007f9bd6d000 60K ---p /usr/lib/libgsdf.so.1.0.0
0000007f9bd7c000 4K rw-p /usr/lib/libgsdf.so.1.0.0
0000007f9bd7d000 16K rw-p [ anon ]
0000007f9bd81000 20K r-xp /usr/lib/libthreadutil.so.6.0.3
0000007f9bd86000 60K ---p /usr/lib/libthreadutil.so.6.0.3
0000007f9bd95000 4K rw-p /usr/lib/libthreadutil.so.6.0.3
0000007f9bd96000 32K r-xp /usr/lib/libixml.so.2.0.8
0000007f9bd9e000 64K ---p /usr/lib/libixml.so.2.0.8
0000007f9bdae000 4K rw-p /usr/lib/libixml.so.2.0.8
0000007f9bdaf000 120K r-xp /usr/lib/libupnp.so.6.3.2
0000007f9bdcd000 64K ---p /usr/lib/libupnp.so.6.3.2
0000007f9bddd000 4K rw-p /usr/lib/libupnp.so.6.3.2
0000007f9bdde000 8K rw-p [ anon ]
0000007f9bde0000 92K r-xp /lib/libpthread-2.22.so
0000007f9bdf7000 60K ---p /lib/libpthread-2.22.so
0000007f9be06000 4K r--p /lib/libpthread-2.22.so
0000007f9be07000 4K rw-p /lib/libpthread-2.22.so
0000007f9be08000 16K rw-p [ anon ]
0000007f9be0c000 112K r-xp /lib/ld-2.22.so
0000007f9be32000 16K rw-p [ anon ]
0000007f9be36000 4K r--p [vvar]
0000007f9be37000 4K r-xp [vdso]
0000007f9be38000 4K r--p /lib/ld-2.22.so
0000007f9be39000 8K rw-p /lib/ld-2.22.so
0000007fdddc4000 132K rw-p [stack]
For each thread, a bloc of 65404K is reserved. It this normal?
I need your help.
Best regards
Hi Khaled,
I don't know if I can help you with that, I have never seen libupnp take so much memory per task, but I must confess I have not been using it for quite a long time, now I am just helping maintaing the library.
I would suggest you to debug your problem using valgrind. It is very good at catching memory leaks, worth a try.
Oh, and when you find the bug, please send us the patch :)
Best regards,
Marcelo.