{"id":8507,"date":"2021-02-01T10:00:22","date_gmt":"2021-02-01T09:00:22","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=8507"},"modified":"2021-01-28T11:50:57","modified_gmt":"2021-01-28T10:50:57","slug":"linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/","title":{"rendered":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507&#038;title=Linux%20Out-Of-Memory%20Killer%20%28OOM-Killer%29%20pour%20un%20serveur%20base%20de%20donn%C3%A9es%20PostgreSQL\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Linux%20Out-Of-Memory%20Killer%20%28OOM-Killer%29%20pour%20un%20serveur%20base%20de%20donn%C3%A9es%20PostgreSQL&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8508 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/01\/oom-killer.jpg\" alt=\"\" width=\"581\" height=\"133\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/01\/oom-killer.jpg 581w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/01\/oom-killer-300x69.jpg 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Hello,<\/p>\n<p>bonjour \u00e0 toutes et tous et bonne ann\u00e9e 2021 \u00e0 vous !<\/p>\n<p>Aujourd&#8217;hui nous allons nous pencher sur un nouveau sujet qui parlera \u00e0 beaucoup d&#8217;entre nous utilisateurs linux qui administrons des bases de donn\u00e9es sous ce syst\u00e8me !<\/p>\n<p>Nous avons rencontr\u00e9, r\u00e9cemment chez un de nos clients, des soucis de &#8220;kill&#8221; de process survenus sur notre instance PostgreSQL. C&#8217;est durant des op\u00e9rations assez lourdes en terme de charge m\u00e9moire que cela s&#8217;est produit. Notre client utilise l&#8217;extension &#8220;pg_partman&#8221; qui, coupl\u00e9 avec &#8220;pg_cron&#8221; permet de disposer du partitionning non natif, au sein d&#8217;une base PostgreSQL.<\/p>\n<p>Jusqu&#8217;ici tout allait bien, mais avec la charge de donn\u00e9es ins\u00e9r\u00e9es dans les partitions, certaines op\u00e9rations ont pris beaucoup plus de temps, et surtout ont n\u00e9cessit\u00e9 de d&#8217;avantage de ressources m\u00e9moire !<\/p>\n<p>Nous avons remont\u00e9 l&#8217;ordre SQL en cause qui \u00e9tait ex\u00e9cut\u00e9 via &#8220;pg_partman&#8221; :<\/p>\n<p><em>select\u00a0result.fn_agreg_rumresulthourly();<\/em><\/p>\n<p>Pour les utilisateurs de cette extension, cela parlera tr\u00e8s certainement, il s&#8217;agit d&#8217;un job qui va &#8220;merger&#8221; les donn\u00e9es par heures pour en faire une nouvelle partition journali\u00e8re. Et c&#8217;est la que la m\u00e9canique peut vite \u00eatre tr\u00e8s compliqu\u00e9e \u00e0 g\u00e9rer par l&#8217;OS en arri\u00e8re plan&#8230;.<\/p>\n<p>&nbsp;<\/p>\n<h4>OOM-Killer, qu&#8217;est ce que c&#8217;est ?<\/h4>\n<p>Lorsqu&#8217;un processus requiert de la m\u00e9moire pour son fonctionnement, le kernel Linux va alors lui r\u00e9server des pages qui lui seront n\u00e9cessaire pour mener \u00e0 bien son op\u00e9ration, c&#8217;est le principe de la m\u00e9moire r\u00e9serv\u00e9e (reserved memory). Au fur et \u00e0 mesure du cycle de vie du processus, le syst\u00e8me devra lui valider ces pages r\u00e9ellement en m\u00e9moire, afin que celles ci ne soient pas potentiellement r\u00e9utilisables par d&#8217;autres processus, ces pages lui sont d\u00e9finitivement attribu\u00e9es en fonction de la RAM disponible (principe de &#8220;commited&#8221; memory).<\/p>\n<p>Cependant, comment cela se passe si ce m\u00eame processus demande trop de m\u00e9moire et que l&#8217;on arrive \u00e0 une saturation RAM ? il y&#8217;a alors des cons\u00e9quences pour votre syst\u00e8me Linux. L&#8217;OS va devoir proc\u00e9der \u00e0 ce que l&#8217;on appelle du &#8220;over-commit&#8221; !<\/p>\n<p>Mais il faut bien garder \u00e0 l&#8217;esprit que cela est un m\u00e9canisme qui reste dans le cadre de l&#8217;exceptionnel, et lorsque le processus demande trop de ressources, l&#8217;OS ne pourra, \u00e0 un moment, plus y r\u00e9pondre.<br \/>\nC&#8217;est la qu&#8217;intervient le process syst\u00e8me &#8220;Out-of-memory Killer&#8221; ou &#8220;OOM-Killer&#8221;.<\/p>\n<p>Le kernel linux doit tout faire pour \u00e9viter un &#8220;kernel panic&#8221; et par cons\u00e9quence un &#8220;crash&#8221; du syst\u00e8me global et un reboot du serveur. Ainsi il va se d\u00e9fendre gr\u00e2ce \u00e0 ce &#8220;garde-fou&#8221; qui lui permettra de conserver la stabilit\u00e9 du syst\u00e8me et surtout supprimer le processus qui demande trop de ressources m\u00e9moire.<\/p>\n<p>La configuration de ce processus se fera dans &#8220;sysctl&#8221; en configurant les param\u00e8tres suivants :<\/p>\n<pre><span style=\"color: #800000;\">vm.overcommit_memory\r\nvm.overcommit_ratio<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Les valeurs possibles pour le param\u00e8tre &#8220;<strong>vm.overcommit_memory<\/strong>&#8221; sont :<\/p>\n<p><span style=\"color: #666699;\"><em>0 &#8211; Le syst\u00e8me va tenter d&#8217;effectuer de l&#8217;over-commit selon un algorithme d\u00e9fini et en fonction des ressources (valeur par d\u00e9faut)<\/em><\/span><br \/>\n<span style=\"color: #666699;\"><em>1 &#8211; le syst\u00e8me va effectuer de l&#8217;over-commit dans tous les cas, sans v\u00e9rification (\u00e0 vos risques et p\u00e9rils !)<\/em><\/span><br \/>\n<span style=\"color: #666699;\"><em>2 &#8211; Pas d&#8217;over-commit, seule la m\u00e9moire r\u00e9ellement allouable sera utilis\u00e9e selon un ratio d\u00e9fini.<\/em><\/span><\/p>\n<p>Si la valeur 2 est choisie pour &#8220;<strong>vm.overcommit_memory<\/strong>&#8221; alors le param\u00e8tre &#8220;<strong>vm.overcommit_ratio<\/strong>&#8221; rentre en jeu.<\/p>\n<p>Ce dernier param\u00e8tre renseigne sur quel pourcentage de m\u00e9moire l&#8217;OS va pouvoir utiliser au maximum pour un processus. Par d\u00e9faut, la valeur est fix\u00e9 \u00e0 50%.<br \/>\nMais il sera possible de l&#8217;augmenter .<\/p>\n<p>Gardons \u00e0 l&#8217;esprit que Linux utilisera cette formule pour savoir combien de m\u00e9moire il pourra au plus allouer :<\/p>\n<pre><span style=\"color: #800000;\">Limite allocation m\u00e9moire = Swap + RAM * (Overcommit Ratio \/ 100)<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Il est possible de compl\u00e8tement d\u00e9sactiver OOM-Killer, m\u00eame si cela n&#8217;est pas vraiment recommand\u00e9.<\/p>\n<pre><strong><span style=\"color: #0000ff;\">sysctl -w vm.oom-kill=0 \r\n<\/span><\/strong>ou bien directement dans le fichier \/etc\/sysctl.conf : <strong>echo \"vm.oom-kill=0\" &gt;&gt; \/etc\/sysctl.conf\r\n<\/strong><\/pre>\n<p>Par d\u00e9faut, lorsque &#8220;OOM-Killer&#8221; se d\u00e9clenche, nous n&#8217;avons pas de kernel panic, c&#8217;est ce qui est attendu afin de prot\u00e9ger l&#8217;OS et les autres processus actifs du serveur.<br \/>\nPour s&#8217;en assurer, nous interrogerons le param\u00e8tre &#8220;panic_on_oom&#8221; et v\u00e9rifions que la valeur est \u00e0 0 :<\/p>\n<pre>[root@VM_client]# cat \/proc\/sys\/vm\/panic_on_oom\r\n0<\/pre>\n<p>La valeur est bien \u00e0 0. Si tel n&#8217;\u00e9tait pas le cas, nous devrions la modifier :<\/p>\n<pre><strong><span style=\"color: #0000ff;\">sysctl -w vm.panic_on_oom=0 \r\n<\/span><\/strong>ou bien directement dans le fichier \/etc\/sysctl.conf : <strong>echo \"vm.panic_on_oom=0\" &gt;&gt; \/etc\/sysctl.conf<\/strong><\/pre>\n<h4><\/h4>\n<h4>Cas d&#8217;un processus trait\u00e9 par &#8220;OOM-Killer&#8221;<\/h4>\n<p>&nbsp;<\/p>\n<p>S&#8217;il l&#8217;on revient \u00e0 notre cas survenu chez notre client, nous avons l&#8217;exemple m\u00eame du comportement li\u00e9 \u00e0 OOM-Killer.<br \/>\nUn matin, notre supervision nous a alert\u00e9 d&#8217;une indisponibilit\u00e9 de la base PostgreSQL survenue en pleine nuit chez notre client. Le message d&#8217;erreur \u00e9tait le suivant :<\/p>\n<pre>2020-12-24 03:08:32.650 UTC [20332] LOG:  server process (PID 9725) was terminated by signal 9: Killed\r\n2020-12-24 03:08:32.650 UTC [20332] DETAIL:  Failed process was running: select result.fn_agreg_rumresultdaily();\r\n2020-12-24 03:08:32.650 UTC [20332] LOG:  terminating any other active server processes\r\n2020-12-24 03:08:32.650 UTC [12164] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.650 UTC [12164] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.650 UTC [12164] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.651 UTC [12288] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.651 UTC [12288] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.651 UTC [12288] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.655 UTC [12287] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.655 UTC [12287] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.655 UTC [12287] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.657 UTC [12286] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.657 UTC [12286] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.657 UTC [12286] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.661 UTC [12291] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.661 UTC [12291] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.661 UTC [12291] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.661 UTC [12162] WARNING:  terminating connection because of crash of another server process\r\n2020-12-24 03:08:32.661 UTC [12162] DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.\r\n2020-12-24 03:08:32.661 UTC [12162] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.664 UTC [12285] WARNING:  terminating connection because of crash of another server process\r\n.....<\/pre>\n<pre>2020-12-24 03:08:32.752 UTC [10939] HINT:  In a moment you should be able to reconnect to the database and repeat your command.\r\n2020-12-24 03:08:32.823 UTC [20332] LOG:  all server processes terminated; reinitializing\r\n2020-12-24 03:08:33.161 UTC [12295] LOG:  database system was interrupted; last known up at 2020-12-24 03:05:33 UTC\r\n2020-12-24 03:08:33.162 UTC [12297] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.162 UTC [12296] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.164 UTC [12298] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.245 UTC [12352] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.245 UTC [12350] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.246 UTC [12353] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.246 UTC [12354] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.249 UTC [12355] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.250 UTC [12356] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:33.877 UTC [12295] LOG:  database system was not properly shut down; automatic recovery in progress\r\n2020-12-24 03:08:33.883 UTC [12295] LOG:  redo starts at 219E\/595E1A0\r\n2020-12-24 03:08:36.936 UTC [12360] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:37.355 UTC [12361] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:38.184 UTC [12363] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:41.792 UTC [12366] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:44.189 UTC [12369] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:44.191 UTC [12370] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:46.792 UTC [12373] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:51.751 UTC [12295] LOG:  invalid record length at 219E\/6D68EE68: wanted 24, got 0\r\n2020-12-24 03:08:51.751 UTC [12295] LOG:  redo done at 219E\/6D68EE40\r\n2020-12-24 03:08:51.751 UTC [12295] LOG:  last completed transaction was at log time 2020-12-24 03:08:32.212985+00\r\n2020-12-24 03:08:51.757 UTC [12295] LOG:  checkpoint starting: end-of-recovery immediate\r\n2020-12-24 03:08:51.795 UTC [12378] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:56.195 UTC [12383] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:56.196 UTC [12384] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:56.796 UTC [12385] FATAL:  the database system is in recovery mode\r\n2020-12-24 03:08:58.621 UTC [12295] LOG:  checkpoint complete: wrote 120927 buffers (46.1%); 0 WAL file(s) added, 0 removed, 104 recycled; write=6.753 s, sync=0.022 s, total=6.865 s; sync files=62, longest=0.022 s, average=0.000 s; distance=1701059 kB, estimate=1701059 kB\r\n2020-12-24 03:08:58.675 UTC [20332] LOG:  database system is ready to accept connections\r\n\r\n\r\n<\/pre>\n<p>Comme on peut le voir, un &#8220;kill -9&#8221; a \u00e9t\u00e9 effectu\u00e9 sur le process 9725. Aussit\u00f4t le &#8220;postmaster&#8221; PostgreSQL a ordonn\u00e9 une op\u00e9ration &#8220;Rollback&#8221; sur la base afin d&#8217;assurer l&#8217;int\u00e9grit\u00e9 des donn\u00e9es sur celle ci. Durant ce temps, la base n&#8217;\u00e9tait pas disponible (FATAL: the database system is in recovery mode).<\/p>\n<p>Nous avons pu remonter les informations dans les traces syst\u00e8mes avec &#8220;sar&#8221; mais \u00e9galement dans le &#8220;\/var\/log\/messages&#8221; :<\/p>\n<pre>Dec 24 03:08:31 VM-client kernel: [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name\r\nDec 24 03:08:31 VM-client kernel: [ 7801] 26 7801 609660 5736 134 0 0 postmaster\r\n<strong><span style=\"color: #ff0000;\">Dec 24 03:08:31 VM-client kernel: [ 9725] 26 9725 1692322 1571644 3200 0 0 postmaster<\/span><\/strong>\r\nDec 24 03:08:31 VM-client kernel: [11225] 26 11225 612080 19332 341 0 0 postmaster\r\nDec 24 03:08:31 VM-client kernel: [11261] 0 11261 30815 58 17 0 0 anacron\r\nDec 24 03:08:31 VM-client kernel: [11447] 26 11447 611520 18491 325 0 0 postmaster\r\n...\r\nDec 24 03:08:31 VM-client kernel: Out of memory: Kill process 9725 (postmaster) score 786 or sacrifice child\r\nDec 24 03:08:31 VM-client kernel: Killed process 9725 (postmaster) total-vm:6769288kB, anon-rss:4323864kB, file-rss:0kB, shmem-rss:1962700kB\r\nDec 24 03:10:02 VM-client systemd: Created slice User Slice of postgres.<\/pre>\n<p>&nbsp;<\/p>\n<p>Le process 9725 avait presque 1,7M de pages r\u00e9serv\u00e9es, mais celui ci a \u00e9t\u00e9 kill\u00e9 car il d\u00e9passait 6,5Go en m\u00e9moire.<br \/>\nLe serveur de notre client ne disposant que de 8Go de RAM, et surtout , pas de swap affect\u00e9 au syst\u00e8me.<\/p>\n<p>Le log \u00e9tant assez explicite, nous savons maintenant que c&#8217;est la commande SQL &#8220;select result.fn_agreg_rumresultdaily()&#8221; qui a provoqu\u00e9 cette surconsommation m\u00e9moire.<\/p>\n<p>&nbsp;<\/p>\n<h4>Les bonnes pratiques avec PostgreSQL<\/h4>\n<p>&nbsp;<\/p>\n<p>Comme nous le savons, un serveur de bases de donn\u00e9es ne devrait pas swapper, c&#8217;est vrai dans la plupart des SGBDR. Cependant, les autres processus du syst\u00e8me ou pr\u00e9sents sur le serveurs peuvent disposer d&#8217;un espace de swap afin de consommer d&#8217;avantage de m\u00e9moire \u00e0 un instant donn\u00e9.<br \/>\nNous avons donc demand\u00e9 \u00e0 notre client de cr\u00e9er cet espace SWAP sur le syst\u00e8me, 4 Go pour le moment seront affect\u00e9s.<\/p>\n<p>Il est aussi de bonne pratique, pour un serveur base de donn\u00e9es, d&#8217;utiliser des pages larges (huges pages) afin de disposer de pages m\u00e9moire les moins fractionn\u00e9es possible. Cette configuration se fera via &#8220;sysctl&#8221; en d\u00e9finissant\u00a0 les param\u00e8tres &#8220;vm.nr_hugepages&#8221;.<br \/>\nPar d\u00e9faut, ce seront des pages de 2Mo que l&#8217;on pourra allouer.<\/p>\n<p>Pour un serveur disposant de 8Go de RAM, on place les pages li\u00e9s au param\u00e8tre &#8220;shared_buffers&#8221;, soit 2Go. Par cons\u00e9quence, ce sera la commande :<\/p>\n<pre><strong><span style=\"color: #0000ff;\">sysctl -w vm.nr_hugepages=1024\r\n<\/span><\/strong>ou bien : <strong><span style=\"color: #000000;\">echo \"vm.nr_hugepages=1024\" &gt;&gt; \/etc\/sysctl.conf<\/span><\/strong><\/pre>\n<p>&nbsp;<\/p>\n<p>Enfin l&#8217;autre solution si l&#8217;on ne met pas en place les &#8220;huges pages&#8221;, et ce en accord avec la documentation PostgreSQL, c&#8217;est de g\u00e9rer manuellement\u00a0 le over-commit sur le serveur en capant le ratio d&#8217;utilisation de la RAM pour un processus donn\u00e9.<\/p>\n<p>Comme le mentionne la documentation PostgreSQL sur <a href=\"https:\/\/www.postgresql.org\/docs\/12\/kernel-resources.html#id-1.6.5.6.5\">le site<\/a> ,\u00a0 il est recommand\u00e9 de passer le param\u00e8tre <span style=\"color: #000000;\"><strong>vm.overcommit_memory<\/strong> \u00e0<strong> 2<\/strong><\/span>\u00a0:<\/p>\n<pre><strong><span style=\"color: #0000ff;\">sysctl -w vm.overcommit_memory=2\r\n<\/span><\/strong>ou bien directement dans le fichier \/etc\/sysctl.conf : <strong>echo \"vm.overcommit_memory=2\" &gt;&gt; \/etc\/sysctl.conf<\/strong><\/pre>\n<p>Il restera alors \u00e0 changer le ratio de m\u00e9moire utilisable au maximum. On pourra d\u00e9finir celui ci \u00e0 75% par exemple.<\/p>\n<pre><strong><span style=\"color: #0000ff;\">sysctl -w vm.overcommit_ratio=75\r\n<\/span><\/strong>ou bien directement dans le fichier \/etc\/sysctl.conf : <strong>echo \"vm.overcommit_ratio=75\" &gt;&gt; \/etc\/sysctl.conf<\/strong><\/pre>\n<p>&nbsp;<\/p>\n<p>S&#8217;il l&#8217;on reprend la formule Linux pour la limite d&#8217;affectation de processus, nous aurons donc :<\/p>\n<p>Limite = 4096 + 8192 (75\/100) &#8211; &gt; soit une limite \u00e0 10Go. Le process peut utiliser jusqu&#8217;\u00e0 <strong>10Go<\/strong> en m\u00e9moire.<\/p>\n<p>&nbsp;<\/p>\n<p>Depuis ces modifications, nous n&#8217;avons plus rencontr\u00e9 ce souci avec &#8220;OOM-Killer&#8221;, le batch de nuit li\u00e9 \u00e0 &#8220;pg_partman&#8221; se d\u00e9roule correctement.<\/p>\n<p>&nbsp;<\/p>\n<p>N&#8217;h\u00e9sitez pas \u00e0 laisser des commentaires.<\/p>\n<p>@+<\/p>\n<p>&nbsp;<\/p>\n<p>Emmanuel RAMI<\/p>\n<p>&nbsp;<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507&#038;title=Linux%20Out-Of-Memory%20Killer%20%28OOM-Killer%29%20pour%20un%20serveur%20base%20de%20donn%C3%A9es%20PostgreSQL\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Linux%20Out-Of-Memory%20Killer%20%28OOM-Killer%29%20pour%20un%20serveur%20base%20de%20donn%C3%A9es%20PostgreSQL&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8507\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hello, bonjour \u00e0 toutes et tous et bonne ann\u00e9e 2021 \u00e0 vous ! Aujourd&#8217;hui nous allons nous pencher sur un nouveau sujet qui parlera \u00e0 beaucoup d&#8217;entre nous utilisateurs linux qui administrons des bases de donn\u00e9es sous ce syst\u00e8me&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":32,"featured_media":8508,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[30],"class_list":["post-8507","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe","tag-linux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Hello, bonjour \u00e0 toutes et tous et bonne ann\u00e9e 2021 \u00e0 vous ! Aujourd&#8217;hui nous allons nous pencher sur un nouveau sujet qui parlera \u00e0 beaucoup d&#8217;entre nous utilisateurs linux qui administrons des bases de donn\u00e9es sous ce syst\u00e8me&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-01T09:00:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-28T10:50:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/01\/oom-killer.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"581\" \/>\n\t<meta property=\"og:image:height\" content=\"133\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel RAMI\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel RAMI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\"},\"author\":{\"name\":\"Emmanuel RAMI\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\"},\"headline\":\"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL\",\"datePublished\":\"2021-02-01T09:00:22+00:00\",\"dateModified\":\"2021-01-28T10:50:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\"},\"wordCount\":1227,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"linux\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\",\"name\":\"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2021-02-01T09:00:22+00:00\",\"dateModified\":\"2021-01-28T10:50:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\",\"name\":\"Emmanuel RAMI\",\"sameAs\":[\"https:\/\/blog.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/","og_locale":"fr_FR","og_type":"article","og_title":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG","og_description":"&nbsp; Hello, bonjour \u00e0 toutes et tous et bonne ann\u00e9e 2021 \u00e0 vous ! Aujourd&#8217;hui nous allons nous pencher sur un nouveau sujet qui parlera \u00e0 beaucoup d&#8217;entre nous utilisateurs linux qui administrons des bases de donn\u00e9es sous ce syst\u00e8me&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2021-02-01T09:00:22+00:00","article_modified_time":"2021-01-28T10:50:57+00:00","og_image":[{"width":581,"height":133,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/01\/oom-killer.jpg","type":"image\/jpeg"}],"author":"Emmanuel RAMI","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Emmanuel RAMI","Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/"},"author":{"name":"Emmanuel RAMI","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae"},"headline":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL","datePublished":"2021-02-01T09:00:22+00:00","dateModified":"2021-01-28T10:50:57+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/"},"wordCount":1227,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["linux"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/","url":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/","name":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2021-02-01T09:00:22+00:00","dateModified":"2021-01-28T10:50:57+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/linux-out-of-memory-killer-oom-killer-pour-un-serveur-base-de-donnees-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Linux Out-Of-Memory Killer (OOM-Killer) pour un serveur base de donn\u00e9es PostgreSQL"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae","name":"Emmanuel RAMI","sameAs":["https:\/\/blog.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=8507"}],"version-history":[{"count":15,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8507\/revisions"}],"predecessor-version":[{"id":8514,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8507\/revisions\/8514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/8508"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=8507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=8507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=8507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}