web-dev-qa-db-fra.com

Oom Killer tue des choses avec beaucoup (?) De libre RAM

Le tueur d'OME semble tuer des choses malgré tout d'avoir plus que suffisant RAM sur mon système:

Memory utilization graph((résolution complète)

IO utilization graph((résolution complète)

27 minutes et 408 traitements plus tard, le système a commencé à répondre à nouveau. J'ai redémarré environ une heure après, et bientôt, l'utilisation de la mémoire est retournée à la normale (pour cette machine).

Lors de l'inspection, j'ai quelques processus intéressants qui fonctionnent sur ma boîte:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
[...snip...]
root      1399 60702042  0.2 482288 1868 ?     Sl   Feb21 21114574:24 /sbin/rsyslogd -i /var/run/syslogd.pid -c 4
[...snip...]
mysql     2022 60730428  5.1 1606028 38760 ?   Sl   Feb21 21096396:49 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
[...snip...]

Ce serveur spécifique est en cours d'exécution pendant env. 8 heures, et ce sont les deux seuls processus qui ont des valeurs aussi étonnantes. Ma suspicion est que "autre chose" se passe, potentiellement pertinente pour ces valeurs non sensibles. En particulier, je pense que le système pense qu'il est hors de mémoire, quand en réalité, ce n'est pas le cas. Après tout, il pense que RSYSLOGD utilise de manière cohérente 55383984% de processeur, lorsque le maximum théorique est de 400% sur ce système.

Il s'agit d'une installation entièrement à jour des Centos 6 (6.2) avec 768 Mo de RAM. Toute suggestion sur la façon de déterminer pourquoi cela se produit serait apprécié!

eDIT: Joindre le VM. SYSCTL TUNLABLES .. J'ai joué avec l'évanouissement (montrée par elle étant 100), et je suis également en cours d'exécution d'un fichier absolument terrible Script qui décharge mes tampons et mes cache (rendus évidents par VM. Drop_Caches étant 3) + synchronise le disque toutes les 15 minutes. C'est pourquoi, après le redémarrage, les données en cache ont augmenté de taille quelque peu normale, mais ont rapidement chuté rapidement. Je reconnais que le cache est une très bonne chose, mais jusqu'à ce que je reçois cela ...

Un peu intéressant est également que, même si mon fichier a grandi pendant l'événement, il n'atteint que 20% de l'utilisation totale possible, qui est incharactéiste des véritables événements OMOM. À l'autre extrémité du spectre, le disque est allé absolument des noix au cours de la même période, caractéristique d'un événement OOM lorsque le pageFile est en jeu.

sysctl -a 2>/dev/null | grep '^vm':

vm.overcommit_memory = 1
vm.panic_on_oom = 0
vm.oom_kill_allocating_task = 0
vm.extfrag_threshold = 500
vm.oom_dump_tasks = 0
vm.would_have_oomkilled = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
vm.nr_pdflush_threads = 0
vm.swappiness = 100
vm.nr_hugepages = 0
vm.hugetlb_shm_group = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0
vm.lowmem_reserve_ratio = 256   256     32
vm.drop_caches = 3
vm.min_free_kbytes = 3518
vm.percpu_pagelist_fraction = 0
vm.max_map_count = 65530
vm.laptop_mode = 0
vm.block_dump = 0
vm.vfs_cache_pressure = 100
vm.legacy_va_layout = 0
vm.zone_reclaim_mode = 0
vm.min_unmapped_ratio = 1
vm.min_slab_ratio = 5
vm.stat_interval = 1
vm.mmap_min_addr = 4096
vm.numa_zonelist_order = default
vm.scan_unevictable_pages = 0
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1

modifier: et attacher le premier message OMM ... lors de l'inspection de plus près, il disait que quelque chose a clairement sorti de sa manière de manger également l'intégralité de mon espace d'échange.

Feb 21 17:12:49 Host kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0
Feb 21 17:12:51 Host kernel: mysqld cpuset=/ mems_allowed=0
Feb 21 17:12:51 Host kernel: Pid: 2777, comm: mysqld Not tainted 2.6.32-71.29.1.el6.x86_64 #1
Feb 21 17:12:51 Host kernel: Call Trace:
Feb 21 17:12:51 Host kernel: [<ffffffff810c2e01>] ? cpuset_print_task_mems_allowed+0x91/0xb0
Feb 21 17:12:51 Host kernel: [<ffffffff8110f1bb>] oom_kill_process+0xcb/0x2e0
Feb 21 17:12:51 Host kernel: [<ffffffff8110f780>] ? select_bad_process+0xd0/0x110
Feb 21 17:12:51 Host kernel: [<ffffffff8110f818>] __out_of_memory+0x58/0xc0
Feb 21 17:12:51 Host kernel: [<ffffffff8110fa19>] out_of_memory+0x199/0x210
Feb 21 17:12:51 Host kernel: [<ffffffff8111ebe2>] __alloc_pages_nodemask+0x832/0x850
Feb 21 17:12:51 Host kernel: [<ffffffff81150cba>] alloc_pages_current+0x9a/0x100
Feb 21 17:12:51 Host kernel: [<ffffffff8110c617>] __page_cache_alloc+0x87/0x90
Feb 21 17:12:51 Host kernel: [<ffffffff8112136b>] __do_page_cache_readahead+0xdb/0x210
Feb 21 17:12:51 Host kernel: [<ffffffff811214c1>] ra_submit+0x21/0x30
Feb 21 17:12:51 Host kernel: [<ffffffff8110e1c1>] filemap_fault+0x4b1/0x510
Feb 21 17:12:51 Host kernel: [<ffffffff81135604>] __do_fault+0x54/0x500
Feb 21 17:12:51 Host kernel: [<ffffffff81135ba7>] handle_pte_fault+0xf7/0xad0
Feb 21 17:12:51 Host kernel: [<ffffffff8103cd18>] ? pvclock_clocksource_read+0x58/0xd0
Feb 21 17:12:51 Host kernel: [<ffffffff8100f951>] ? xen_clocksource_read+0x21/0x30
Feb 21 17:12:51 Host kernel: [<ffffffff8100fa39>] ? xen_clocksource_get_cycles+0x9/0x10
Feb 21 17:12:51 Host kernel: [<ffffffff8100c949>] ? __raw_callee_save_xen_pmd_val+0x11/0x1e
Feb 21 17:12:51 Host kernel: [<ffffffff8113676d>] handle_mm_fault+0x1ed/0x2b0
Feb 21 17:12:51 Host kernel: [<ffffffff814ce503>] do_page_fault+0x123/0x3a0
Feb 21 17:12:51 Host kernel: [<ffffffff814cbf75>] page_fault+0x25/0x30
Feb 21 17:12:51 Host kernel: Mem-Info:
Feb 21 17:12:51 Host kernel: Node 0 DMA per-cpu:
Feb 21 17:12:51 Host kernel: CPU    0: hi:    0, btch:   1 usd:   0
Feb 21 17:12:51 Host kernel: CPU    1: hi:    0, btch:   1 usd:   0
Feb 21 17:12:51 Host kernel: CPU    2: hi:    0, btch:   1 usd:   0
Feb 21 17:12:51 Host kernel: CPU    3: hi:    0, btch:   1 usd:   0
Feb 21 17:12:51 Host kernel: Node 0 DMA32 per-cpu:
Feb 21 17:12:51 Host kernel: CPU    0: hi:  186, btch:  31 usd:  47
Feb 21 17:12:51 Host kernel: CPU    1: hi:  186, btch:  31 usd:   0
Feb 21 17:12:51 Host kernel: CPU    2: hi:  186, btch:  31 usd:   0
Feb 21 17:12:51 Host kernel: CPU    3: hi:  186, btch:  31 usd: 174
Feb 21 17:12:51 Host kernel: active_anon:74201 inactive_anon:74249 isolated_anon:0
Feb 21 17:12:51 Host kernel: active_file:120 inactive_file:276 isolated_file:0
Feb 21 17:12:51 Host kernel: unevictable:0 dirty:0 writeback:2 unstable:0
Feb 21 17:12:51 Host kernel: free:1600 slab_reclaimable:2713 slab_unreclaimable:19139
Feb 21 17:12:51 Host kernel: mapped:177 shmem:84 pagetables:12939 bounce:0
Feb 21 17:12:51 Host kernel: Node 0 DMA free:3024kB min:64kB low:80kB high:96kB active_anon:5384kB inactive_anon:5460kB active_file:36kB inactive_file:12kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:14368kB mlocked:0kB dirty:0kB writeback:0kB mapped:16kB shmem:0kB slab_reclaimable:16kB slab_unreclaimable:116kB kernel_stack:32kB pagetables:140kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:8 all_unreclaimable? no
Feb 21 17:12:51 Host kernel: lowmem_reserve[]: 0 741 741 741
Feb 21 17:12:51 Host kernel: Node 0 DMA32 free:3376kB min:3448kB low:4308kB high:5172kB active_anon:291420kB inactive_anon:291536kB active_file:444kB inactive_file:1092kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:759520kB mlocked:0kB dirty:0kB writeback:8kB mapped:692kB shmem:336kB slab_reclaimable:10836kB slab_unreclaimable:76440kB kernel_stack:2520kB pagetables:51616kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:2560 all_unreclaimable? yes
Feb 21 17:12:51 Host kernel: lowmem_reserve[]: 0 0 0 0
Feb 21 17:12:51 Host kernel: Node 0 DMA: 5*4kB 4*8kB 2*16kB 0*32kB 0*64kB 1*128kB 1*256kB 1*512kB 0*1024kB 1*2048kB 0*4096kB = 3028kB
Feb 21 17:12:51 Host kernel: Node 0 DMA32: 191*4kB 63*8kB 9*16kB 2*32kB 0*64kB 1*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 3396kB
Feb 21 17:12:51 Host kernel: 4685 total pagecache pages
Feb 21 17:12:51 Host kernel: 4131 pages in swap cache
Feb 21 17:12:51 Host kernel: Swap cache stats: add 166650, delete 162519, find 1524867/1527901
Feb 21 17:12:51 Host kernel: Free swap  = 0kB
Feb 21 17:12:51 Host kernel: Total swap = 523256kB
Feb 21 17:12:51 Host kernel: 196607 pages RAM
Feb 21 17:12:51 Host kernel: 6737 pages reserved
Feb 21 17:12:51 Host kernel: 33612 pages shared
Feb 21 17:12:51 Host kernel: 180803 pages non-shared
Feb 21 17:12:51 Host kernel: Out of memory: kill process 2053 (mysqld_safe) score 891049 or a child
Feb 21 17:12:51 Host kernel: Killed process 2266 (mysqld) vsz:1540232kB, anon-rss:4692kB, file-rss:128kB
11
Kyle Brantley

Je viens de regarder à la sauvegarde du journal de oom, et je remets en question l'exactitude de ce graphique. Notez la première ligne " 0 nœud DMA32 ". Ça dit free:3376kB, min:3448kB, et low:4308kB. Chaque fois que la valeur libre descend en dessous de la faible valeur, kswapd est censé commencer à échanger des choses jusqu'à ce que la valeur revient au-dessus de la valeur élevée. Chaque fois que des gouttes libres dessous min, le système se bloque essentiellement jusqu'à ce que le noyau obtient sauvegarder au-dessus de la valeur min. Ce message indique également que swap a été complètement utilisé où il est dit Free swap = 0kB.
Donc, fondamentalement kswapd déclenché, mais échange était plein, donc il ne pouvait pas faire quoi que ce soit, et la valeur pages_free était encore inférieure à la valeur pages_min, de sorte que la seule option était de commencer à tuer les choses jusqu'à ce qu'il puisse se remettre pages_free up .
Vous certainement un manque de mémoire.

http://web.archive.org/web/20080419012851/http://people.redhat.com/dduval/kernel/min_free_kbytes.html a une explication vraiment bien de comment cela fonctionne. Voir la section " Mise en œuvre " en bas.

13
Patrick

Débarrassez-vous du script Drop_Caches. De plus, vous devez afficher les parties pertinentes de votre dmesg et /var/log/messages Sortie montrant les messages OMM.

Pour arrêter ce comportement, cependant, je recommanderais d'essayer ceci sysctl accordable. Il s'agit d'un système RHEL/CENTOS 6 et fonctionne clairement sur des ressources contraintes. Est-ce une machine virtuelle?

Essayez de modifier /proc/sys/vm/nr_hugepages et voir si les problèmes persistent. Cela pourrait être un problème de fragmentation de la mémoire, mais voir si ce paramètre fait une différence. Pour faire le changement permanent, ajoutez vm.nr_hugepages = value à ton /etc/sysctl.conf et courir sysctl -p Pour relire le fichier de configuration ...

Voir également: Interprétation des messages d'échec de l'allocation de la page "de la page" Cryptique "

3
ewwhite

Il n'y a pas de données disponibles sur le graphique à partir du moment où le tueur OMM commence jusqu'à ce qu'il se termine. Je crois que dans le délai où le graphique est interrompu que la consommation de mémoire est en fait une pointe et il n'y a plus de mémoire disponible. Sinon, le tueur OOM ne serait pas utilisé. Si vous regardez le graphe de mémoire libre après que l'OOM Killer ait cessé, vous pouvez le voir descendre d'une valeur supérieure à celle auparavant. Au moins, il a fait son travail correctement, libérant la mémoire.

Notez que votre espace de swap est presque utilisé complètement jusqu'au redémarrage. C'est presque jamais bonne chose et un signe certain qu'il reste peu de mémoire libre.

La raison pour laquelle il n'existe aucune donnée disponible pour cette période particulière est que le système est trop occupé avec d'autres choses. Les valeurs "drôles" dans votre liste de processus peuvent simplement être un résultat, pas une cause. Ce n'est pas inouïe de.

Vérifier /var/log/kern.log et/var/log/messages, quelles informations pouvez-vous trouver là-bas?

Si la journalisation s'est également arrêtée, essayez d'autres choses, videz la liste de processus à un fichier chaque seconde ou par exemple, même avec les informations de performance du système. Exécutez-le avec une priorité élevée afin qu'il puisse toujours faire son travail (espérons-le) lorsque la charge pointe. Bien que si vous n'avez pas de noyau de préemption (parfois indiqué comme un noyau de serveur "), vous risquez d'avoir une chance à cet égard.

Je pense que vous constaterez que le processus (ES) qui est (sont) en utilisant le plus% de CPU au bout du temps que vos problèmes commencent à être (sont) la cause. Je n'ai jamais vu RSYSLOGD Ni mysql ne se comporter de cette façon. Des coupables plus susceptibles sont Java applications et applications guidiques telle qu'un navigateur.

2
aseq