Kernel
嵌入式 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 快閃記憶體上的 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的正確原因。