嵌入式 Linux OOM - 帮助解决 RAM 丢失问题

嵌入式 Linux OOM - 帮助解决 RAM 丢失问题

我有一个带有 256MB RAM 的小型 Linux 系统。我有点困惑,RAM 可能会丢失在哪里?它运行旧的 linux 内核 2.6.38,我无法升级它(某些特定的 ARM 板)。

SHM 和所有 tmpfs 挂载的文件系统几乎为空 shmem:448kB

一切都被 active_anon 页面消耗,但正在运行的进程与此不对应。 Total_vm 的总和仅为 90MB,并且存在重复、共享内存、未分配内存...但 active_anon 报告为 235MB。为什么?我该如何解决这个问题?内核中是否存在内存泄漏?

这是相关的dmesg

    Mem-info:
    Normal per-cpu:
    CPU    0: hi:   90, btch:  15 usd:  14
    active_anon:60256 inactive_anon:67 isolated_anon:0
     active_file:0 inactive_file:185 isolated_file:0
     unevictable:0 dirty:0 writeback:0 unstable:0
     free:507 slab_reclaimable:120 slab_unreclaimable:463
     mapped:108 shmem:112 pagetables:217 bounce:0
    Normal free:2028kB min:2036kB low:2544kB high:3052kB active_anon:241024kB inactive_anon:268kB active_file:0kB inactive_file:740kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:260096kB mlocked:0k
    lowmem_reserve[]: 0 0
    Normal: 37*4kB 139*8kB 42*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2028kB
    305 total pagecache pages
    65536 pages of RAM
    622 free pages
    1976 reserved pages
    404 slab pages
    393 pages shared
    0 pages swap cached
    [ pid ]   uid  tgid total_vm      rss cpu oom_adj oom_score_adj name
    [  713]     0   713      666       40   0       0             0 busybox
    [  719]     0   719      634       18   0       0             0 busybox
    [  725]     0   725      634       15   0       0             0 busybox
    [  740]     0   740      654       19   0       0             0 inetd
    [  752]     0   752      634       17   0       0             0 ifplugd
    [  761]     0   761      634       21   0       0             0 busybox
    [  790]     0   790     4297      110   0       0             0 app
    [  792]     0   792      635       15   0       0             0 getty
    [  812]     0   812      634       16   0       0             0 exe
    [  849]   101   849      630       57   0       0             0 lighttpd
    [  850]   101   850     3005      218   0       0             0 php-cgi
    [  851]   101   851     3005      218   0       0             0 php-cgi
    [ 3172]     0  3172    72156    59739   0       0             0 app
    [ 3193]     0  3193      675       23   0       0             0 ntpd
    [ 4003]     0  4003      634       15   0       0             0 ntpd_prog
    [ 4004]     0  4004      634       15   0       0             0 hwclock
    [ 4005]     0  4005      634       20   0       0             0 hwclock
    Out of memory: Kill process 3172 (app) score 912 or sacrifice child
    Killed process 3172 (app) total-vm:288624kB, anon-rss:238684kB, file-rss:272kB

这是已安装文件系统的列表。根文件系统是 MTD 闪存上的读/写 YAFFS2。

rootfs on / type rootfs (rw)
/dev/root on / type yaffs2 (rw,relatime)
none on /proc type proc (rw,relatime)
none on /sys type sysfs (rw,relatime)
mdev on /dev type tmpfs (rw,nosuid,relatime,size=10240k,mode=755)
none on /proc/bus/usb type usbfs (rw,relatime)
none on /dev/pts type devpts (rw,relatime,mode=622)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
none on /tmp type tmpfs (rw,relatime,size=102400k,mode=777)
none on /run type tmpfs (rw,relatime,size=10240k,mode=755)

答案1

Total_vm 被我计算得很糟糕,OOM 报告是正确的。app已分配 59739 个页面,即 233MB。所以,这就是OOM的正确原因。

相关内容