2.6.13 (and before) OOM-Killer activated with plenty of memory available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Something still seems not right with the OOM handling.

The appended program forks 5 children, allocating 1GB each.  Running
this on a 4GB RAM Intel32 machine that also has 11GB swap available
causes an OOM killer activation killing off one of the memory hungry
kids. (A 4GB AMD64 machine with 11GB swap seems to be fine though).

/proc/sys/vm/overcommit_memory is already set to 2.

It should be noted that 2.4 kernels do not exhibit any problems with
this test case.

   Thanks for any feedback - I'm willing to test out anything you
   throw my way ;-)

                   Wolfgang



----------------------------------------------------------------------
Aug 30 14:27:42 monstert01 kernel: oom-killer: gfp_mask=0x80d2, order=0
Aug 30 14:27:42 monstert01 kernel: Mem-info:
Aug 30 14:27:42 monstert01 kernel: DMA per-cpu:
Aug 30 14:27:42 monstert01 kernel: cpu 0 hot: low 2, high 6, batch 1 used:5
Aug 30 14:27:42 monstert01 kernel: cpu 0 cold: low 0, high 2, batch 1 used:0
Aug 30 14:27:42 monstert01 kernel: cpu 1 hot: low 2, high 6, batch 1 used:1
Aug 30 14:27:42 monstert01 kernel: cpu 1 cold: low 0, high 2, batch 1 used:0
Aug 30 14:27:42 monstert01 kernel: Normal per-cpu:
Aug 30 14:27:42 monstert01 kernel: cpu 0 hot: low 62, high 186, batch 31 used:92
Aug 30 14:27:42 monstert01 kernel: cpu 0 cold: low 0, high 62, batch 31 used:37
Aug 30 14:27:42 monstert01 kernel: cpu 1 hot: low 62, high 186, batch 31 used:84
Aug 30 14:27:42 monstert01 kernel: cpu 1 cold: low 0, high 62, batch 31 used:51
Aug 30 14:27:42 monstert01 kernel: HighMem per-cpu:
Aug 30 14:27:43 monstert01 kernel: cpu 0 hot: low 62, high 186, batch 31 used:92
Aug 30 14:27:43 monstert01 kernel: cpu 0 cold: low 0, high 62, batch 31 used:44
Aug 30 14:27:43 monstert01 kernel: cpu 1 hot: low 62, high 186, batch 31 used:92
Aug 30 14:27:43 monstert01 kernel: cpu 1 cold: low 0, high 62, batch 31 used:61
Aug 30 14:27:43 monstert01 kernel: Free pages:      116436kB (496kB HighMem)
Aug 30 14:27:43 monstert01 kernel: Active:925586 inactive:55824 dirty:0 writeback:10969 unstable:0 free:29109 slab:4733 mapped:968758 pagetables:2181
Aug 30 14:27:43 monstert01 kernel: DMA free:12152kB min:68kB low:84kB high:100kB active:0kB inactive:0kB present:16384kB pages_scanned:1516 all_unreclaimable? yes
Aug 30 14:27:43 monstert01 kernel: lowmem_reserve[]: 0 880 4015
Aug 30 14:27:43 monstert01 kernel: Normal free:103788kB min:3756kB low:4692kB high:5632kB active:508888kB inactive:223296kB present:901120kB pages_scanned:94265 all_unreclaimable? no
Aug 30 14:27:43 monstert01 kernel: lowmem_reserve[]: 0 0 25087
Aug 30 14:27:43 monstert01 kernel: HighMem free:496kB min:512kB low:640kB high:768kB active:3193456kB inactive:0kB present:3211200kB pages_scanned:3688714 all_unreclaimable? yes
Aug 30 14:27:43 monstert01 kernel: lowmem_reserve[]: 0 0 0
Aug 30 14:27:43 monstert01 kernel: DMA: 2*4kB 4*8kB 3*16kB 3*32kB 3*64kB 2*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 2*4096kB = 12152kB
Aug 30 14:27:43 monstert01 kernel: Normal: 1*4kB 1*8kB 0*16kB 1*32kB 1*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 0*2048kB 25*4096kB = 103788kB
Aug 30 14:27:43 monstert01 kernel: HighMem: 0*4kB 0*8kB 1*16kB 1*32kB 1*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 496kB
Aug 30 14:27:43 monstert01 kernel: Swap cache: add 554996, delete 543480, find 129437/164972, race 0+0
Aug 30 14:27:43 monstert01 kernel: Free swap  = 11391916kB
Aug 30 14:27:43 monstert01 kernel: Total swap = 11537968kB
Aug 30 14:27:43 monstert01 kernel: Free swap:       11391916kB
Aug 30 14:27:43 monstert01 kernel: 1032176 pages of RAM
Aug 30 14:27:43 monstert01 kernel: 802800 pages of HIGHMEM
Aug 30 14:27:43 monstert01 kernel: 10366 reserved pages
Aug 30 14:27:43 monstert01 kernel: 10135 pages shared
Aug 30 14:27:43 monstert01 kernel: 11516 pages swap cached
Aug 30 14:27:43 monstert01 kernel: 0 pages dirty
Aug 30 14:27:43 monstert01 kernel: 14169 pages writeback
Aug 30 14:27:43 monstert01 kernel: 965539 pages mapped
Aug 30 14:27:43 monstert01 kernel: 4817 pages slab
Aug 30 14:27:43 monstert01 kernel: 2182 pages pagetables
Aug 30 14:27:43 monstert01 kernel: Out of Memory: Killed process 7457 (oomme).
----------------------------------------------------------------------

Seems like the program runs out of HighMem, /proc/slabinfo is appended
(right after the OOM) anyhow:
----------------------------------------------------------------------
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
fib6_nodes             5    119     32  119    1 : tunables  120   60    8 : slabdata      1      1      0
ip6_dst_cache          4     18    224   18    1 : tunables  120   60    8 : slabdata      1      1      0
ndisc_cache            1     25    160   25    1 : tunables  120   60    8 : slabdata      1      1      0
RAWv6                  4      6    640    6    1 : tunables   54   27    8 : slabdata      1      1      0
UDPv6                  2      6    608    6    1 : tunables   54   27    8 : slabdata      1      1      0
request_sock_TCPv6      0      0     96   41    1 : tunables  120   60    8 : slabdata      0      0      0
TCPv6                 12     14   1120    7    2 : tunables   24   12    8 : slabdata      2      2      0
ip_fib_alias          10    226     16  226    1 : tunables  120   60    8 : slabdata      1      1      0
ip_fib_hash           10    119     32  119    1 : tunables  120   60    8 : slabdata      1      1      0
xfs_acl                0      0    304   13    1 : tunables   54   27    8 : slabdata      0      0      0
xfs_chashlist          0      0     20  185    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_ili                0      0    140   28    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_ifork              0      0     56   70    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_efi_item           0      0    260   15    1 : tunables   54   27    8 : slabdata      0      0      0
xfs_efd_item           0      0    260   15    1 : tunables   54   27    8 : slabdata      0      0      0
xfs_buf_item           0      0    148   27    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_dabuf              0      0     16  226    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_da_state           0      0    336   12    1 : tunables   54   27    8 : slabdata      0      0      0
xfs_trans              0      0    596   13    2 : tunables   54   27    8 : slabdata      0      0      0
xfs_inode              0      0    368   11    1 : tunables   54   27    8 : slabdata      0      0      0
xfs_btree_cur          0      0    140   28    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_bmap_free_item      0      0     16  226    1 : tunables  120   60    8 : slabdata      0      0      0
xfs_buf                0      0    224   18    1 : tunables  120   60    8 : slabdata      0      0      0
linvfs_icache          0      0    388   10    1 : tunables   54   27    8 : slabdata      0      0      0
dm_tio               256    452     16  226    1 : tunables  120   60    8 : slabdata      2      2      0
dm_io                256    452     16  226    1 : tunables  120   60    8 : slabdata      2      2      0
reiser_inode_cache  12588  14832    436    9    1 : tunables   54   27    8 : slabdata   1648   1648    216
scsi_cmd_cache        88     88    352   11    1 : tunables   54   27    8 : slabdata      8      8     27
sgpool-128            72     72   2560    3    2 : tunables   24   12    8 : slabdata     24     24     24
sgpool-64             42     42   1280    3    1 : tunables   24   12    8 : slabdata     14     14      0
sgpool-32             39     42    640    6    1 : tunables   54   27    8 : slabdata      7      7      0
sgpool-16             35     36    320   12    1 : tunables   54   27    8 : slabdata      3      3      0
sgpool-8             100    100    160   25    1 : tunables  120   60    8 : slabdata      4      4      0
clip_arp_cache         0      0    160   25    1 : tunables  120   60    8 : slabdata      0      0      0
rpc_buffers            8      8   2048    2    1 : tunables   24   12    8 : slabdata      4      4      0
rpc_tasks             20     20    192   20    1 : tunables  120   60    8 : slabdata      1      1      0
rpc_inode_cache       12     16    480    8    1 : tunables   54   27    8 : slabdata      2      2      0
UNIX                  26     45    416    9    1 : tunables   54   27    8 : slabdata      5      5      0
ip_mrt_cache           0      0     96   41    1 : tunables  120   60    8 : slabdata      0      0      0
tcp_tw_bucket          2     31    128   31    1 : tunables  120   60    8 : slabdata      1      1      0
tcp_bind_bucket       22    226     16  226    1 : tunables  120   60    8 : slabdata      1      1      0
inet_peer_cache        2     61     64   61    1 : tunables  120   60    8 : slabdata      1      1      0
secpath_cache          0      0    128   31    1 : tunables  120   60    8 : slabdata      0      0      0
xfrm_dst_cache         0      0    288   14    1 : tunables   54   27    8 : slabdata      0      0      0
ip_dst_cache          44     45    256   15    1 : tunables  120   60    8 : slabdata      3      3      0
arp_cache              5     25    160   25    1 : tunables  120   60    8 : slabdata      1      1      0
RAW                    3      8    480    8    1 : tunables   54   27    8 : slabdata      1      1      0
UDP                    9     16    480    8    1 : tunables   54   27    8 : slabdata      2      2      0
request_sock_TCP       0      0     64   61    1 : tunables  120   60    8 : slabdata      0      0      0
TCP                   19     20   1024    4    1 : tunables   54   27    8 : slabdata      5      5      0
flow_cache             0      0     96   41    1 : tunables  120   60    8 : slabdata      0      0      0
cfq_ioc_pool           0      0     48   81    1 : tunables  120   60    8 : slabdata      0      0      0
cfq_pool               0      0     96   41    1 : tunables  120   60    8 : slabdata      0      0      0
crq_pool               0      0     48   81    1 : tunables  120   60    8 : slabdata      0      0      0
deadline_drq           0      0     52   75    1 : tunables  120   60    8 : slabdata      0      0      0
as_arq               183    183     64   61    1 : tunables  120   60    8 : slabdata      3      3     60
mqueue_inode_cache      1      7    544    7    1 : tunables   54   27    8 : slabdata      1      1      0
nfs_direct_cache       0      0     44   88    1 : tunables  120   60    8 : slabdata      0      0      0
nfs_write_data        36     36    448    9    1 : tunables   54   27    8 : slabdata      4      4      0
nfs_read_data         32     36    448    9    1 : tunables   54   27    8 : slabdata      4      4      0
nfs_inode_cache      979   1032    604    6    1 : tunables   54   27    8 : slabdata    172    172      0
nfs_page               0      0     64   61    1 : tunables  120   60    8 : slabdata      0      0      0
isofs_inode_cache      0      0    384   10    1 : tunables   54   27    8 : slabdata      0      0      0
minix_inode_cache      0      0    420    9    1 : tunables   54   27    8 : slabdata      0      0      0
hugetlbfs_inode_cache      1     11    356   11    1 : tunables   54   27    8 : slabdata      1      1      0
ext2_inode_cache       0      0    492    8    1 : tunables   54   27    8 : slabdata      0      0      0
ext2_xattr             0      0     48   81    1 : tunables  120   60    8 : slabdata      0      0      0
dnotify_cache          0      0     20  185    1 : tunables  120   60    8 : slabdata      0      0      0
dquot                  0      0    128   31    1 : tunables  120   60    8 : slabdata      0      0      0
eventpoll_pwq          0      0     36  107    1 : tunables  120   60    8 : slabdata      0      0      0
eventpoll_epi          0      0     96   41    1 : tunables  120   60    8 : slabdata      0      0      0
inotify_event_cache      0      0     28  135    1 : tunables  120   60    8 : slabdata      0      0      0
inotify_watch_cache      0      0     36  107    1 : tunables  120   60    8 : slabdata      0      0      0
kioctx                 0      0    192   20    1 : tunables  120   60    8 : slabdata      0      0      0
kiocb                  0      0    128   31    1 : tunables  120   60    8 : slabdata      0      0      0
fasync_cache           0      0     16  226    1 : tunables  120   60    8 : slabdata      0      0      0
shmem_inode_cache      6      8    452    8    1 : tunables   54   27    8 : slabdata      1      1      0
posix_timers_cache      0      0    100   39    1 : tunables  120   60    8 : slabdata      0      0      0
uid_cache              4     61     64   61    1 : tunables  120   60    8 : slabdata      1      1      0
blkdev_ioc            65    135     28  135    1 : tunables  120   60    8 : slabdata      1      1      0
blkdev_queue          32     40    396   10    1 : tunables   54   27    8 : slabdata      4      4      0
blkdev_requests      200    200    160   25    1 : tunables  120   60    8 : slabdata      8      8     60
biovec-(256)         260    260   3072    2    2 : tunables   24   12    8 : slabdata    130    130      0
biovec-128           264    265   1536    5    2 : tunables   24   12    8 : slabdata     53     53      0
biovec-64            275    275    768    5    1 : tunables   54   27    8 : slabdata     55     55      0
biovec-16            300    300    192   20    1 : tunables  120   60    8 : slabdata     15     15      0
biovec-4             288    305     64   61    1 : tunables  120   60    8 : slabdata      5      5      0
biovec-1             890   2034     16  226    1 : tunables  120   60    8 : slabdata      9      9    480
bio                  859   1435     96   41    1 : tunables  120   60    8 : slabdata     31     35    480
file_lock_cache        3     43     92   43    1 : tunables  120   60    8 : slabdata      1      1      0
sock_inode_cache      83     90    416    9    1 : tunables   54   27    8 : slabdata     10     10      0
skbuff_head_cache    180    200    192   20    1 : tunables  120   60    8 : slabdata     10     10      0
proc_inode_cache     359    710    372   10    1 : tunables   54   27    8 : slabdata     71     71      0
sigqueue              29     54    148   27    1 : tunables  120   60    8 : slabdata      2      2      0
radix_tree_node      802   1064    276   14    1 : tunables   54   27    8 : slabdata     76     76      0
bdev_cache             8     16    480    8    1 : tunables   54   27    8 : slabdata      2      2      0
sysfs_dir_cache     3165   3264     40   96    1 : tunables  120   60    8 : slabdata     34     34      0
mnt_cache             31     41     96   41    1 : tunables  120   60    8 : slabdata      1      1      0
inode_cache         1053   1265    356   11    1 : tunables   54   27    8 : slabdata    115    115      0
dentry_cache        8657  16520    140   28    1 : tunables  120   60    8 : slabdata    590    590    480
filp                 950    950    160   25    1 : tunables  120   60    8 : slabdata     38     38      0
names_cache            3      3   4096    1    1 : tunables   24   12    8 : slabdata      3      3      0
idr_layer_cache      113    116    136   29    1 : tunables  120   60    8 : slabdata      4      4      0
buffer_head          588   1650     52   75    1 : tunables  120   60    8 : slabdata     22     22      0
mm_struct             96    102    608    6    1 : tunables   54   27    8 : slabdata     17     17      0
vm_area_struct      1944   2537     92   43    1 : tunables  120   60    8 : slabdata     59     59      0
fs_cache              53    244     64   61    1 : tunables  120   60    8 : slabdata      4      4      0
files_cache           54    108    416    9    1 : tunables   54   27    8 : slabdata     12     12      0
signal_cache          84    143    352   11    1 : tunables   54   27    8 : slabdata     13     13      0
sighand_cache         82    108   1312    3    1 : tunables   24   12    8 : slabdata     36     36      0
task_struct           89    108   1312    3    1 : tunables   24   12    8 : slabdata     36     36      0
anon_vma             896   1160     12  290    1 : tunables  120   60    8 : slabdata      4      4      0
pgd                  129    238     32  119    1 : tunables  120   60    8 : slabdata      2      2      0
pmd                  165    165   4096    1    1 : tunables   24   12    8 : slabdata    165    165      0
size-131072(DMA)       0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0
size-131072            0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0
size-65536(DMA)        0      0  65536    1   16 : tunables    8    4    0 : slabdata      0      0      0
size-65536             0      0  65536    1   16 : tunables    8    4    0 : slabdata      0      0      0
size-32768(DMA)        0      0  32768    1    8 : tunables    8    4    0 : slabdata      0      0      0
size-32768             9      9  32768    1    8 : tunables    8    4    0 : slabdata      9      9      0
size-16384(DMA)        0      0  16384    1    4 : tunables    8    4    0 : slabdata      0      0      0
size-16384             3      3  16384    1    4 : tunables    8    4    0 : slabdata      3      3      0
size-8192(DMA)         0      0   8192    1    2 : tunables    8    4    0 : slabdata      0      0      0
size-8192             90     90   8192    1    2 : tunables    8    4    0 : slabdata     90     90      0
size-4096(DMA)         0      0   4096    1    1 : tunables   24   12    8 : slabdata      0      0      0
size-4096             70     70   4096    1    1 : tunables   24   12    8 : slabdata     70     70      0
size-2048(DMA)         0      0   2048    2    1 : tunables   24   12    8 : slabdata      0      0      0
size-2048            182    188   2048    2    1 : tunables   24   12    8 : slabdata     94     94      0
size-1024(DMA)         0      0   1024    4    1 : tunables   54   27    8 : slabdata      0      0      0
size-1024            207    252   1024    4    1 : tunables   54   27    8 : slabdata     63     63      0
size-512(DMA)          0      0    512    8    1 : tunables   54   27    8 : slabdata      0      0      0
size-512             352    352    512    8    1 : tunables   54   27    8 : slabdata     44     44     27
size-256(DMA)          0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0
size-256             222    225    256   15    1 : tunables  120   60    8 : slabdata     15     15      0
size-128(DMA)          0      0    128   31    1 : tunables  120   60    8 : slabdata      0      0      0
size-128            1674   1705    128   31    1 : tunables  120   60    8 : slabdata     55     55      0
size-64(DMA)           0      0     64   61    1 : tunables  120   60    8 : slabdata      0      0      0
size-64              566    732     64   61    1 : tunables  120   60    8 : slabdata     12     12      0
size-32(DMA)           0      0     32  119    1 : tunables  120   60    8 : slabdata      0      0      0
size-32             2200   2380     32  119    1 : tunables  120   60    8 : slabdata     20     20      0
kmem_cache           144    144    640    6    1 : tunables   54   27    8 : slabdata     24     24      0
----------------------------------------------------------------------

source code for oomme.c
----------------------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>

void
allocmore()
{
  char *list[10];
  int i;
  int j;

  for( i = 0; i < sizeof(list)/sizeof(list[0]); ++i ) {
    list[i] = calloc(100000000,1);
  }
  for( j = 0; j < 2; ++j ) {
    for( i = 0; i < sizeof(list)/sizeof(list[0]); ++i ) {
      memset(list[i], 1, 100000000);
      sleep(1);
    }
  }
  exit(0);
}


long children[5];

void
ackthem(int n)
{
  int status;
  pid_t victim;
  int i;
  int rem = 0;

  victim = wait( &status);

  int sig = WIFSIGNALED(status) ? WTERMSIG(status) : 0;
  
  for( i = 0; i < sizeof(children)/sizeof(children[0]); ++i ) {
    if( children[i] == victim ) 
      children[i] = -sig;
    if( children[i] > 0 )
      rem ++;
  }

  if( victim >= 0 ) {
    if( WIFSIGNALED(status) ) {
      printf("child %d died with %d (rem: %d)\n",victim,sig,rem);
      system("cat /proc/slabinfo");
    } else 
      printf("child %d exited (rem %d)\n", victim, rem);
  }
    
}

void
goodparent(void)
{
  int i;
  int alive;
  for( i = 0; i < sizeof(children)/sizeof(children[0]); ++i ) {
    children[i] = fork();
    if( children[i] == 0 ) {
      allocmore();
    } 
  }

  do {
    alive = 0;
    for( i = 0; i < sizeof(children)/sizeof(children[0]); ++i )
      if( children[i] > 0 )
	++alive;
    if( alive ) {
      ackthem(0);
      --alive;
    }
  } while(alive);
}

int
main()
{
  goodparent();
  return 0;
}
----------------------------------------------------------------------

$ zgrep MEM /proc/config.gz 
CONFIG_SHMEM=y
# CONFIG_TINY_SHMEM is not set
# CONFIG_NOHIGHMEM is not set
# CONFIG_HIGHMEM4G is not set
CONFIG_HIGHMEM64G=y
CONFIG_HIGHMEM=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_BLK_DEV_UMEM=m
CONFIG_W1_SMEM=m
CONFIG_SND_DEBUG_MEMORY=y
# CONFIG_DEBUG_HIGHMEM is not set

----------------------------------------------------------------------
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux