{"id":8825,"date":"2023-01-16T17:49:24","date_gmt":"2023-01-16T20:49:24","guid":{"rendered":"https:\/\/swiv.com.br\/?p=8825"},"modified":"2023-01-16T17:49:24","modified_gmt":"2023-01-16T20:49:24","slug":"how-to-identify-cpu-bottlenecks-on-oracle-linux","status":"publish","type":"post","link":"https:\/\/swiv.com.br\/index.php\/2023\/01\/16\/how-to-identify-cpu-bottlenecks-on-oracle-linux\/","title":{"rendered":"How to identify CPU Bottlenecks on Oracle Linux"},"content":{"rendered":"\n<p>Este artigo vai expor alguns conceitos te\u00f3ricos e seu reflexo pr\u00e1tico para melhor entendimento. N\u00f3s, DBAs, quando nos deparamos com um cen\u00e1rio de lentid\u00e3o, geralmente precisamos avaliar como est\u00e1 o consumo de recurso de CPU dos servidores que hospedam o banco de dados. \u00c9 nessa an\u00e1lise que vamos nos ater.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Load Average<\/h2>\n\n\n\n<p>Para poder utilizar o processador do servidor, o S.O usa o conceito de fila de Jobs. A partir dessa fila, os Jobs poder\u00e3o assumir alguns status, mas vamos nos concentrar inicialmente em 2: os que est\u00e3o em execu\u00e7\u00e3o (status R) ou os que est\u00e3o aguardando recurso de I\/O de disco (status D). Essa quantidade m\u00e9dia de itens processando e aguardando processamento s\u00e3o apresentados como Load Average nos comandos &#8220;uptime&#8221; ou &#8220;top&#8221;, por padr\u00e3o dos \u00faltimos 1, 5 e 15 minutos. Exemplo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# uptime\n 18:39:25 up 19 min,  1 user,  load average: 0.38, 0.81, 0.72\n&#x5B;root@oel7 ~]#\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntop - 14:44:41 up 24 min,  1 user,  load average: 0.75, 0.82, 0.75\nTasks: 326 total,   1 running, 237 sleeping,   0 stopped,   0 zombie\n%Cpu(s):  0.8 us,  0.6 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st\nKiB Mem : 16150712 total, 10392080 free,  1152292 used,  4606340 buff\/cache\nKiB Swap:  1261564 total,  1261564 free,        0 used. 11646372 avail Mem\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">%CPU usage<\/h2>\n\n\n\n<p>Uma vez que sabemos a quantidade de Jobs em nossa fila, precisamos saber quantos Cores est\u00e3o dispon\u00edveis no S.O. Para isso, podemos usar os seguintes comandos (que reportam 6 cores em meu lab):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# cat \/proc\/cpuinfo | grep &quot;cpu cores&quot;\ncpu cores       : 6\ncpu cores       : 6\ncpu cores       : 6\ncpu cores       : 6\ncpu cores       : 6\ncpu cores       : 6\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# sar -r 1 1\nLinux 4.14.35-1902.3.2.el7uek.x86_64 (oel7.localdomain)         01\/16\/2023      _x86_64_        (6 CPU)\n<\/pre><\/div>\n\n\n<p>Para termos dimens\u00e3o de utiliza\u00e7\u00e3o das CPUs, podemos seguir os seguintes exemplos\/cen\u00e1rios como refer\u00eancia:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Servidor Single Core<\/td><td>Se o Load estiver em &#8220;1.0&#8221;, significa que a CPU sendo totalmente utilizada, e se novos Jobs forem criados, ficar\u00e3o no final da fila, aguardando execu\u00e7\u00e3o.<\/td><\/tr><tr><td>Servidor Single Core<\/td><td>Se o Load estiver em &#8220;2.0&#8221;, significa que a CPU sendo totalmente utilizado, alguns Jobs J\u00c1 est\u00e3o enfileirados (ou seja, aguardando processamento), e se novos Jobs forem criados, ficar\u00e3o no final da fila, aguardando execu\u00e7\u00e3o.<\/td><\/tr><tr><td>Servidor Multi-Core (6 cores)<\/td><td>Se o Load estiver em &#8220;1.0&#8221;, significa que a 1\/6 da capacidade total est\u00e1 sendo utilizada. Ou seja, 1 atividade est\u00e1 sendo executada por algum core, e os outros 5 estar\u00e3o em modo iddle.<\/td><\/tr><tr><td>Servidor Multi-Core (6 cores)<\/td><td>Se o Load estiver em &#8220;6.0&#8221;, significa que a CPU sendo totalmente utilizada, e se novos Jobs forem criados, ficar\u00e3o no final da fila, aguardando execu\u00e7\u00e3o.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Sendo assim, em condi\u00e7\u00f5es normais, o ideal \u00e9 que o Load fique no m\u00e1ximo com o n\u00famero de cores presentes no S.O. Caso esteja sempre no valor m\u00e1ximo ou em quantidades maiores, pode haver algum problema nos aplicativos que ali executam e que precisem de tuning, ou realmente o servidor est\u00e1 mal dimensionado para o n\u00edvel de processamento necess\u00e1rio.<\/p>\n\n\n\n<p>A porcentagem de utiliza\u00e7\u00e3o j\u00e1 \u00e9 calculada no comando top. No exemplo abaixo, 98.7% do meu recurso de CPU est\u00e1 Iddle.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntop - 15:08:22 up 48 min,  1 user,  load average: 0.32, 0.50, 0.59\nTasks: 324 total,   1 running, 239 sleeping,   0 stopped,   0 zombie\n%Cpu(s):  0.6 us,  0.6 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st\nKiB Mem : 16150712 total, 10368512 free,  1172140 used,  4610060 buff\/cache\nKiB Swap:  1261564 total,  1261564 free,        0 used. 11626436 avail Mem\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">VMSTAT Tool<\/h2>\n\n\n\n<p>Para nos dar uma vis\u00e3o de tudo quanto foi escrito, podemos ver na pr\u00e1tica as informa\u00e7\u00f5es no comando &#8220;vmstat&#8221;. Este \u00e9 um exemplo de seu output:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# vmstat 1 10 -S m\nprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st\n 1  0      0  10520     40   4749    0    0     8     0  327  433  1  1 98  0  0\n 0  0      0  10519     40   4749    0    0    40     0 1931 2579  1  1 99  0  0\n 1  0      0  10519     40   4749    0    0    32     0 1587 2227  1  1 99  0  0\n 0  0      0  10519     40   4749    0    0    16     0 1651 2209  1  1 98  0  0\n 0  0      0  10519     40   4749    0    0    32     0 1840 2258  1  1 98  0  0\n 0  0      0  10519     40   4749    0    0     0     0 1942 2487  1  1 98  0  0\n 1  0      0  10519     40   4749    0    0    16     0 1960 2622  1  1 98  0  0\n 0  0      0  10519     40   4749    0    0    44     0 1763 2517  1  1 99  0  0\n 0  0      0  10520     40   4749    0    0    32     0 1865 2531  1  1 99  0  0\n 0  0      0  10519     40   4749    0    0    16     0 1867 2499  1  1 99  0  0\n<\/pre><\/div>\n\n\n<p>A primeira coluna &#8220;r&#8221; representa a Run-Queue, que demonstra os Jobs em execu\u00e7\u00e3o e os que est\u00e3o aguardando processamento. Caso esta coluna tenha um n\u00famero maior do que a quantidade de cores do servidor, j\u00e1 podemos visualizar jobs enfileirados aguardando por execu\u00e7\u00e3o.<\/p>\n\n\n\n<p>A segunda coluna &#8220;b&#8221; s\u00e3o os processos em &#8220;Blocked state&#8221;, que podem ser vinculado ao status D que vimos no come\u00e7o do artigo (que aguardam o processo de I\/O de disco). Caso esta coluna apresente valores altos, pode ser um ind\u00edcio de problemas de Storage (ISCSI\/<em>NFS\/NIC\/HBA<\/em>). Nota: Problemas na camada de Network tamb\u00e9m podem provocar um alto valor de Load.<\/p>\n\n\n\n<p>Para simular um alto consumo de CPU devido wait de I\/O, vou fazer o seguinte teste: rodar o pacote stress no Linux, consumindo apenas 2 cores, por\u00e9m colocando 8 Jobs escrevendo 1GB em paralelo. Ser\u00e1 poss\u00edvel notar no vmstat um acr\u00e9scimo de valores na coluna &#8220;b&#8221;, um pico na coluna SY, e vemos que a CPU ficar\u00e1 em constante uso (coluna id):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# stress --cpu 2 --hdd 8 --timeout 100s\nstress: info: &#x5B;18038] dispatching hogs: 2 cpu, 0 io, 0 vm, 8 hdd\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# vmstat 1 100 -S m\nprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st\n 1  0      0   9989     73   5138    0    0    90     0  327  422  1  1 97  0  0\n 0  0      0   9989     73   5138    0    0     0     0 1494 2072  1  1 99  0  0\n 0  0      0   9989     73   5138    0    0     0     0 2057 2650  1  1 98  0  0\n13  0      0   9986     73   5138    0    0    48     0 2507 2802  6  1 93  0  0\n14  1      0   7313     73   7805    0    0 49192     0 8860 4847 24 76  0  0  0\n 3  7      0   6159     73   8960    0    0 36864     0 7841 4908 33 53  0 14  0\n 2  8      0   5848     73   9271    0    0 45104     0 6396 6052 36  8 17 39  0\n 4  8      0   5736     73   9383    0    0 188416     0 5846 5604 35  3 17 45  0\n 3  9      0   5685     73   9432    0    0 32808     0 5845 5522 35  1 29 35  0\n 2 10      0   5685     73   9433    0    0  4200     0 5418 4827 34  1 37 28  0\n 2 10      0   5685     73   9433    0    0    36     0 5403 4740 34  0 34 32  0\n 2 10      0   5685     73   9433    0    0     0     0 5417 4722 34  1 33 32  0\n 2  8      0   5645     73   9472    0    0 159780     0 5559 5078 34  2 34 30  0\n 2  9      0   5613     73   9504    0    0 65552     0 5602 5209 34  1 33 31  0\n 2 10      0   5604     73   9513    0    0 32836     0 5469 4756 34  1 33 32  0\n 2 10      0   5605     73   9513    0    0    32     0 5620 4894 34  1 33 32  0\n 2 10      0   5604     73   9513    0    0    44     0 5659 4900 35  1 32 32  0\n 2  9      0   5590     73   9528    0    0 24576     0 5485 5103 34  1 33 32  0\n 2  8      0   5564     73   9554    0    0 106588     0 5584 5199 34  2 33 31  0\n 2  1      0   5557     73   9561    0    0    16     0 5429 4898 34  0 43 22  0\n 2  9      0   5548     73   9570    0    0 28700     0 5449 4937 34  1 42 23  0\n 3  9      0   5527     73   9591    0    0 135284     0 5540 5029 34  2 33 31  0\n 3  9      0   5506     73   9612    0    0 100368     0 5479 5124 34  1 33 32  0\n 2  8      0   5490     73   9628    0    0 22528     0 5572 5350 34  1 33 32  0\n 4  9      0   5474     73   9643    0    0 59392     0 5713 5520 34  1 33 32  0\nprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st\n 3  1      0   5466     73   9651    0    0 32816     0 5755 5238 35  1 30 34  0\n 0 10      0   5466     73   9651    0    0  2100     0 2386 2778  7  0 48 45  0\n 0 10      0   5465     73   9651    0    0    52     0 1920 2534  1  1 50 49  0\n^C\n\n<\/pre><\/div>\n\n\n<p>Caso seja identificado um alto Load, \u00e9 poss\u00edvel verificar os processos que est\u00e3o mais consumindo CPU. Caso um PID espec\u00edfico apresente uma % maior que 100%, significa que ele est\u00e1 sendo executado por mais de um core. Exemplo: 300% = o PID est\u00e1 usando 3 cores para sua opera\u00e7\u00e3o.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# top -H\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntop - 16:39:13 up  2:19,  1 user,  load average: 0.60, 0.58, 0.59\nThreads: 602 total,   1 running, 517 sleeping,   0 stopped,   0 zombie\n%Cpu(s):  0.8 us,  0.7 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st\nKiB Mem : 16150712 total, 10244624 free,  1215848 used,  4690240 buff\/cache\nKiB Swap:  1261564 total,  1261564 free,        0 used. 11573988 avail Mem\n\n  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND\n27135 root      20   0  164124   4984   3808 R  1.6  0.0   0:00.36 top\n 3762 oracle    -2   0 2983032  60736  57468 S  1.0  0.4   1:19.47 ora_vktm_cortex\n 3642 grid      -2   0 1554232  64464  61232 S  0.7  0.4   1:19.24 asm_vktm_+asm\n 3659 grid      20   0 1559032  79188  72596 S  0.7  0.5   0:07.00 asm_dia0_+asm\n 4573 root      20   0  165688  10136   8568 S  0.7  0.1   0:11.28 sshd\n 3410 grid      20   0  974652  41844  30300 S  0.3  0.3   0:02.93 cssdagent\n 3400 grid      20   0 2143220 135968  90192 S  0.3  0.8   0:17.10 oraagent.bin\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Oracle <strong>Recommendations<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Manter seu workload com consumo n\u00e3o excedendo os 65-75%. Motivos: para que o S.O tenha f\u00f4lego suficiente para dar vaz\u00e3o em suas tarefas internas, como em ambientes com Alta Disponibilidade (com din\u00e2mica de Heartbeat, para evitar evictions), e ambientes com alta taxa de I\/O e tr\u00e1fego de rede.<\/li><li>Da porcentagem de utiliza\u00e7\u00e3o de CPU, podemos atrelar aos aplicativos que rodam no servidor o consumo apresentado na coluna &#8220;US&#8221; (User). Para o Kernel, a coluna SY (System). Problemas de rede ou I\/O v\u00e3o apresentar um valor alto na coluna SY, por exemplo. Mas nem sempre a origem do problema \u00e9 o Kernel. Podemos ter aplica\u00e7\u00f5es que fazem demasiadas &#8220;sys-calls&#8221; e provocam o problema. Exemplo: uma aplica\u00e7\u00e3o extremamente transacional e que abre um processo no banco de dados por vez.<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;root@oel7 ~]# vmstat 1 5 -S m\nprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----\n r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st\n 1  0      0  10483     49   4755    0    0     6     0  316  418  1  1 98  0  0\n 0  0      0  10483     49   4755    0    0    48     0 1916 2664  1  1 99  0  0\n 4  0      0  10483     49   4755    0    0     0     0 1971 2620  1  1 99  0  0\n 0  0      0  10483     49   4755    0    0    16     0 1634 2231  1  1 98  0  0\n 3  0      0  10483     49   4755    0    0    48     0 1825 2657  0  0 99  0  0\n&#x5B;root@oel7 ~]#\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Hyper-Threading considerations<\/h2>\n\n\n\n<p>Em minhas investiga\u00e7\u00f5es, ao ler um artigo do Jared Still (link <a rel=\"noreferrer noopener\" href=\"https:\/\/blog.pythian.com\/cpu-utilization-not-useful-metric\/\" target=\"_blank\">AQUI<\/a>), o mesmo questiona essa % de utiliza\u00e7\u00e3o que \u00e9 geralmente reportada em ambientes com HT habilitado. E creio que o faz com certa raz\u00e3o, e isso tamb\u00e9m \u00e9 citado pela pr\u00f3pria Oracle no Note &#8220;<strong>Oracle Linux: How to understand OS load average and run queue \/ blocked queue in terms of CPU utilization (Doc ID 2221159.1)<\/strong>&#8220;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-21-1024x268.png\" alt=\"\" class=\"wp-image-8849\"\/><\/figure>\n\n\n\n<p>O referido documento da Intel n\u00e3o consegui acessar pelo link citado, mas creio que achei o mesmo <a rel=\"noreferrer noopener\" href=\"http:\/\/meseec.ce.rit.edu\/eecc722-fall2006\/papers\/smt\/9\/vol6iss1_art06.pdf\" target=\"_blank\">AQUI<\/a>. Neste artigo, pelo que pude compreender, \u00e9 feito um teste de desempenho em diferentes tipos de aplica\u00e7\u00f5es para aferir sua melhora de desempenho (sem mexer em c\u00f3digo) ao utilizar o HT. Vou colocar abaixo os destaques que fiz durante meus estudos:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-22.png\" alt=\"\" class=\"wp-image-8852\"\/><figcaption>Defini\u00e7\u00e3o da tecnologia de HT.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-23.png\" alt=\"\" class=\"wp-image-8854\"\/><figcaption>Coment\u00e1rio sobre o ILP, que j\u00e1 existia e foi aprimorado conforme sess\u00e3o abaixo.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-24.png\" alt=\"\" class=\"wp-image-8856\"\/><figcaption>Pormenores t\u00e9cnicos da tecnologia usada, que permite escalar o trabalho de processamento.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-25.png\" alt=\"\" class=\"wp-image-8858\"\/><figcaption>Tipos de aplica\u00e7\u00f5es utilizadas no teste realizado.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-26.png\" alt=\"\" class=\"wp-image-8859\"\/><figcaption>&#8220;Naturally, highly scalable applications; that is, those that<br>speed up best when run on multiple, physical<br>processors, are the best candidates for performance<br>improvement on a threaded processor.&#8221;<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2023\/01\/image-27.png\" alt=\"\" class=\"wp-image-8861\"\/><\/figure>\n\n\n\n<p>Ou seja, a mensagem que fica \u00e9 que sendo HT, a quantidade de cores n\u00e3o \u00e9 t\u00e3o linear quanto podemos pensar. Em suma, \u00e9 um core l\u00f3gico competindo por um recurso f\u00edsico, e cabe a n\u00f3s considerarmos isso em nossas an\u00e1lises e investiga\u00e7\u00f5es.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este artigo vai expor alguns conceitos te\u00f3ricos e seu reflexo pr\u00e1tico para melhor entendimento. N\u00f3s, DBAs, quando nos deparamos com um cen\u00e1rio de lentid\u00e3o, geralmente precisamos avaliar como est\u00e1 o consumo de recurso de CPU dos servidores que hospedam o banco de dados. \u00c9 nessa an\u00e1lise que vamos nos ater. Load Average Para poder utilizar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-8825","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/8825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=8825"}],"version-history":[{"count":0,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/8825\/revisions"}],"wp:attachment":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=8825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=8825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=8825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}