Kernel

嵌入式 Linux OOM - 幫助失去 RAM

  • June 25, 2016

我有一個 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 快閃記憶體上的 r/w 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)

Total_vm 被我算錯了,OOM 報告是正確的。app已分配 59739 個頁面,即 233MB。所以,這就是OOM的正確原因。

引用自:https://unix.stackexchange.com/questions/290922