Armadilloフォーラム

メモリリークの調査について

someya

2019年2月5日 17時14分

Armadillo-IoT G3Lで、アプリケーションを動作させていますが、
メモリリークしていないか調査しています。

以下コマンド実行例です。
freeがものすごく少なくなっていますが、
使えるメモリ量は、
free+buffers+cachedなので、メモリリークはしていない。で理解はあってるでしょうか?

freeが少なくなっているのは特に気にする必要はないでしょうか?

---
root@armadillo:/home/fujitsu# free
total used free shared buffers cached
Mem: 1021320 1011368 9952 21276 71428 701524
-/+ buffers/cache: 238416 782904
Swap: 0 0 0

----

root@armadillo:/home/fujitsu# cat /proc/meminfo
MemTotal: 1021320 kB
MemFree: 15668 kB
MemAvailable: 771196 kB
Buffers: 71304 kB
Cached: 695784 kB
SwapCached: 0 kB
Active: 687348 kB
Inactive: 267972 kB
Active(anon): 188552 kB
Inactive(anon): 20960 kB
Active(file): 498796 kB
Inactive(file): 247012 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 1021320 kB
LowFree: 15668 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 456 kB
Writeback: 0 kB
AnonPages: 188252 kB
Mapped: 18332 kB
Shmem: 21272 kB
Slab: 37656 kB
SReclaimable: 25236 kB
SUnreclaim: 12420 kB
KernelStack: 1248 kB
PageTables: 1424 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 510660 kB
Committed_AS: 662444 kB
VmallocTotal: 1024000 kB
VmallocUsed: 24428 kB
VmallocChunk: 831484 kB

----

root@armadillo:/home/fujitsu# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 9640 71424 700900 0 0 0 12 10 18 72 1 26 0 0

---
root@armadillo:/home/fujitsu# ps aux k -rss | head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1037 143 13.5 765204 138876 ttymxc4 Sl Jan24 25052:15 /usr/bin/java -jar -Xms256m -Xmx512m gateway-app-1.0.jar
root 408 0.2 4.0 101480 41048 ? Ssl Jan24 43:03 /usr/sbin/NetworkManager --no-daemon
root 878 0.0 0.5 7768 5932 ? S Jan24 0:02 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /var/run/dhclient-wlan0.pid -lf /var/lib/NetworkManager/dhclient-b2306039-790e-41b9-b600-73fd17f1d9c2-wlan0.lease -cf /var/lib/NetworkManager/dhclient-wlan0.conf wlan0
root 419 0.0 0.4 39468 4388 ? Ssl Jan24 0:00 /usr/sbin/ModemManager
root 782 0.0 0.3 6768 4020 ? Ss Jan24 2:56 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
root 575 0.0 0.3 35896 3380 ? Ssl Jan24 0:02 /usr/lib/policykit-1/polkitd --no-debug
root 12002 0.0 0.2 8220 2872 ? Ss 17:06 0:00 sshd: root@notty
root 1 0.0 0.2 22884 2544 ? Ss Jan24 2:53 /sbin/init
root 972 0.0 0.2 3588 2320 ttymxc4 S Jan24 0:00 -bash

---
root@armadillo:/home/fujitsu# top

top - 17:12:48 up 12 days, 2:55, 1 user, load average: 1.96, 1.93, 1.96
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
%Cpu(s): 72.1 us, 1.3 sy, 0.0 ni, 26.3 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 1021320 total, 1009384 used, 11936 free, 71424 buffers
KiB Swap: 0 total, 0 used, 0 free. 698204 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1037 root 20 0 765204 138876 5000 S 157.7 13.6 25052:47 java
17319 root 20 0 2976 1032 736 R 11.3 0.1 0:00.03 top
90 root 20 0 0 0 0 S 5.6 0.0 30:42.45 mmcqd/2
17394 root 20 0 0 0 0 S 5.6 0.0 0:01.49 kworker/u4+
1 root 20 0 22884 2544 1456 S 0.0 0.2 2:53.86 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.40 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:42.47 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+
7 root 20 0 0 0 0 S 0.0 0.0 15:29.13 rcu_preempt
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_sched
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:01.21 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:01.36 migration/1
12 root 20 0 0 0 0 S 0.0 0.0 0:19.19 ksoftirqd/1
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:+
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

コメント

at_keitaro.takahashi

2019年2月7日 18時07分

> Armadillo-IoT G3Lで、アプリケーションを動作させていますが、
> メモリリークしていないか調査しています。
>
>
> 以下コマンド実行例です。
> freeがものすごく少なくなっていますが、
> 使えるメモリ量は、
> free+buffers+cachedなので、メモリリークはしていない。で理解はあってるでしょうか?
>
>
> freeが少なくなっているのは特に気にする必要はないでしょうか?
>

高橋です。
一般的に、アプリケーションを長期間動作させることによって
使用中のメモリ量が増加しなければ、メモリリークしていない可能性は高いですが、
実装によってはそうでない可能性もあるため、メモリリークしていないと断言することはできません。

メモリリークの解析を行う際は、静的解析を行う他にも、valgrindなどを使用した動的解析を行う手法があります。
valgrindは以下のコマンドでインストールできます。

apt-get install valgrind

参考までに、valgrindの使用方法を解説しているサイトです。
https://www.hiroom2.com/2015/06/15/valgrind%E3%81%AE%E4%BD%BF%E3%81%84%…