Question Linux avec 256 Go de mémoire / 48 cœurs - la machine commence à battre / à suffoquer avec une tonne de mémoire disponible


Machine: Dell r815, CentOS 5.4, 256 Go de RAM, 4 x 12 cœurs.

Nous avons une application qui contient un fichier de 275 Go. Il effectue un tri sur place de 20 Go de données à la fois, c’est-à-dire qu’il échange des bits et les remplace dans le même fichier. Tout cela fonctionne bien.

Il existe un dernier passage qui lit ensuite l'intégralité du fichier et effectue un tri par fusion sur les différents morceaux de 20 Go, puis les exporte dans un tout nouveau fichier.

Ce processus semble fonctionner correctement pendant un certain temps et aboutit à vider environ 50 Go sur le disque. Quelque temps après, la machine ENTIÈRE commence à paniquer.

Des commandes simples comme ps -ef, ls -al, bloque pendant un long moment et s’affiche comme prenant 100% de CPU (ce qui n’est qu’un cœur).

En regardant les statistiques de la mémoire sur topJe vois qu’il utilise environ 120 Go de RAM (donc 128 Go gratuits) et qu’il a 120 Go dans la section "en cache".

Quelqu'un a-t-il déjà vu ce genre de comportement? Le même processus fonctionne correctement sur une machine dotée de 64 Go de mémoire - je pense donc que cela est lié au montage de la RAM dont je dispose dans la machine.

(en ce moment même, j'effectue le test sur cette machine avec tous sauf 64 Go - pour écarter un problème matériel).

Est-ce que je manque peut-être des params vm dans /etc/sysctrl.conf?

Merci!


12
2017-11-17 21:13


origine


Que font les disques .. Allez-vous échanger l'enfer ???? - Arenstar
Noyau 64 bits / app / etc? vous avez mentionné 100% de cpu, quelle est la charge moyenne lorsque cela se produit, c'est l'application multithread (elle n'utilisera pas tous les processeurs sinon), ce que vmstat 4 vous indique (io / cpu en particulier) - coredump
cela comme "ps" sont 100% cpu est sur 4800% (parce que 48 cœurs) - donc ils sont probablement bloqués par io ou quelque chose. la charge moyenne de la boîte n’est que de 5. Les disques, qui sont à l’état solide, ne voient pas beaucoup d’écritures ... Il semble y avoir plus de problèmes de noyau que de ressources. - aspitzer
la machine ne permute pas du tout. - aspitzer
ouais .. le lancer avec 64Go maintenant. devrait savoir dans une heure si elle se rapportait à la quantité totale de mem dans la machine - aspitzer


Réponses:


Votre question m'a rappelé quelque chose que j'ai lu récemment:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Cela explique comment les architectures NUMA (comme dans un système AMD à 48 cœurs, par exemple) affectent l’allocation et l’échange de mémoire. Je ne sais pas si c'est ce que vous rencontrez, mais cela sonnait suffisamment similaire pour que cela vaille la peine d'être lu.

Même si ce n'est pas la réponse, cela en fait une lecture fascinante.


12
2017-11-17 22:03



Cela semble être un bon coup au problème de cette question. Et c'est une lecture fantastique. - coredump
C’est une excellente lecture, et 4 sockets, 256 Go de RAM = 64 Go par nœud, et c’est là que semble se poser le problème, ce qui reproduit exactement la situation dans le document. - Mark Henderson♦


Cela semblait donc être un bogue du noyau dans les versions 64 bits Centos 5.4 ET 64 bits de Fedora 14. Après avoir installé Centos 5.5, le problème a disparu.

Désolé je n'ai pas de meilleure réponse pour tout le monde ...


12
2017-11-18 20:13



Hé mec, si c'est ce qui est réglé, c'est ce qui est réglé. Donnez-vous la coche pour que les autres puissent apprendre de vos difficultés :-) - mfinni


Vous pouvez essayer d’ajouter une ligne à /etc/sysctl.conf pour spécifier que l’échange ne doit être utilisé que lorsque cela est absolument nécessaire.

swappiness = 0

Vous savez peut-être déjà que ce fichier définit des paramètres globaux. Il est donc nécessaire de prendre en compte l'impact de cette modification sur le reste des applications en cours d'exécution dans l'environnement.


0
2017-11-17 21:47



cela est déjà défini ... mais comme je l'ai mentionné, il y a 128 Go gratuits - cela ne pose donc aucun problème de swap. - aspitzer


Où est votre espace temporaire. C'est souvent sur tempfs. Tempfs tire son espace de la mémoire sauvegardée par l'espace de swap. Par conséquent, si vous obtenez trop de données dans tempfs, des E / S de swap sont déclenchées.

Étant donné la taille des données que vous fusionnez, je m'attendrais à ce que vous obteniez un résultat final lorsque vous atteignez la fusion finale.

Répartir votre stockage d'échange sur plusieurs disques peut être utile.


0
2017-11-18 03:17





Bien que vous n'ayez peut-être pas recours à l'échange, vous pouvez toujours être lié aux E / S. Les infos suggèrent cela.

Je regarderais la sortie de dstat -df pour afficher les statistiques du disque, ou dstat -af (oui, les colonnes auront une largeur d’un milliard de milliards; c’est ce qui se produit lorsque vous avez 48 cœurs et que vous affichez l’utilisation de leur processeur sur tous) si vous voulez tout voir.

Je serais surpris que tous les processeurs soient occupés (le tri par fusion n’est pas une tâche gourmande en ressources), mais vous ne dites rien de votre système d’E / S. Si vous avez peu de disques et un tas de fichiers, vous pourriez forcer le disque à chercher pour que chaque fichier conserve le tri par fusion alimenté.


0
2017-11-18 04:33