임베디드 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 보고서는 정확했습니다. app59739페이지(233MB)가 할당되었습니다. 이것이 OOM의 올바른 이유입니다.

관련 정보