{"id":21443,"date":"2026-09-16T08:36:31","date_gmt":"2026-09-16T06:36:31","guid":{"rendered":"https:\/\/webhosting.de\/linux-numa-statistiken-auswerten\/"},"modified":"2026-09-16T08:36:31","modified_gmt":"2026-09-16T06:36:31","slug":"analysera-statistik-i-linux-numa","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/linux-numa-statistiken-auswerten\/","title":{"rendered":"Att tolka Linux NUMA-statistiken p\u00e5 r\u00e4tt s\u00e4tt"},"content":{"rendered":"<p><strong>Linux NUMA<\/strong> Statistiken visar mig hur v\u00e4l processerna hanterar sitt lokala minne och var fj\u00e4rr\u00e5tkomst \u00f6kar latensen. Jag f\u00f6rklarar hur jag tolkar dessa siffror p\u00e5 ett m\u00e5linriktat s\u00e4tt, utv\u00e4rderar trender \u00f6ver tid och utifr\u00e5n detta tar fram tydliga \u00e5tg\u00e4rder f\u00f6r optimering av <strong>Prestanda<\/strong> avleda.<\/p>\n\n<h2>Centrala punkter<\/h2>\n<ul>\n  <li><strong>Att f\u00f6rst\u00e5 r\u00e4knare<\/strong>: numa_hit, numa_miss, numa_foreign, local_node, other_node, interleave_hit<\/li>\n  <li><strong>Utv\u00e4rdera sammanhanget<\/strong>: Lastprofil, topologi, typ av arbetsbelastning<\/li>\n  <li><strong>M\u00e4ta trender<\/strong>: F\u00f6re\/efter och \u00f6ver tidsintervall<\/li>\n  <li><strong>Granska processer<\/strong>: Systemomfattande j\u00e4mf\u00f6rt med per process<\/li>\n  <li><strong>Till\u00e4mpa inst\u00e4llningar<\/strong>: Affinitet, riktlinjer, placering<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/linux-numa-analyse-8293.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vad NUMA-statistiken egentligen visar<\/h2>\n\n<p>Jag betraktar NUMA-siffror som en karta \u00f6ver <strong>F\u00f6rvaringsplats<\/strong> och datav\u00e4gar. En h\u00f6g <strong>numa_hit<\/strong> betyder att allokeringarna har hamnat p\u00e5 den \u00f6nskade noden. D\u00e4remot indikerar numa_miss att k\u00e4rnan har tvingats utnyttja en annan nod. R\u00e4knaren numa_foreign visar motsvarigheten p\u00e5 m\u00e5lnoden och kompletterar bilden. Med local_node och other_node kan jag se om \u00e5tkomsten skedde lokalt eller om fj\u00e4rrminne anv\u00e4ndes.<\/p>\n\n<p>Dessa v\u00e4rden ska aldrig tolkas isolerat, eftersom <strong>Arbetsbelastning<\/strong> reagerar mycket olika. Korta processer ger enstaka missar utan att den totala prestandan p\u00e5verkas m\u00e4rkbart. Interleave-policyer \u00e5 sin sida skapar avsiktligt spridda tilldelningar, vilket g\u00f6r att interleave_hit \u00f6kar. D\u00e4rf\u00f6r kontrollerar jag alltid den avsedda policyn och den aktuella belastningen. F\u00f6rst d\u00e4refter avg\u00f6r jag om ett v\u00e4rde kr\u00e4ver \u00e5tg\u00e4rder eller om det passar in i designen.<\/p>\n\n<p>F\u00f6r mig \u00e4r k\u00e4rnid\u00e9n f\u00f6ljande: <strong>r\u00e4knare<\/strong> ger signaler, inte bed\u00f6mningar. Jag letar efter m\u00f6nster \u00f6ver tid, inte enskilda siffror. P\u00e5 s\u00e5 s\u00e4tt kan jag se om en f\u00f6r\u00e4ndring i systemet f\u00f6rskjuter lokaliteten. F\u00f6rst n\u00e4r jag har denna trendbild bed\u00f6mer jag om jag ska flytta processer, anpassa policyer eller st\u00e4lla in CPU-bindningar. Varje NUMA-analys b\u00f6rjar d\u00e4rf\u00f6r med en tydlig fr\u00e5gest\u00e4llning och repeterbara m\u00e4tpunkter.<\/p>\n\n<h2>Tolka k\u00e4rnr\u00e4knare i sitt sammanhang<\/h2>\n\n<p>Jag j\u00e4mf\u00f6r alltid <strong>numa_hit<\/strong> och j\u00e4mf\u00f6r numa_miss med varandra, ist\u00e4llet f\u00f6r att utv\u00e4rdera absoluta v\u00e4rden. Om missarna \u00f6kar kontrollerar jag samtidigt utvecklingen av numa_foreign p\u00e5 den potentiella m\u00e5lnoden. Om b\u00e5da st\u00e4mmer \u00f6verens tyder det p\u00e5 en verklig f\u00f6rskjutning och inte enbart en artefakt fr\u00e5n avl\u00e4sningen. local_node och other_node kompletterar denna bild genom att visa de faktiska \u00e5tkomsterna. P\u00e5 s\u00e5 s\u00e4tt kan jag se om en allokering visserligen b\u00f6rjade lokalt, men om verksamheten senare l\u00e4ste fr\u00e5n mer avl\u00e4gset minne.<\/p>\n\n<p>En enda h\u00f6g <strong>other_node<\/strong> Det st\u00f6r mig inte om arbetsbelastningen f\u00f6rdelas medvetet. Webbservrar med m\u00e5nga arbetare drar d\u00e4remot nytta av en konsekvent lokalisering. D\u00e4rf\u00f6r tittar jag p\u00e5 enskilda processer, inte bara p\u00e5 helhetsbilden. S\u00e5 fort enskilda tj\u00e4nster avviker fr\u00e5n m\u00f6nstret granskar jag deras placering. F\u00f6rst n\u00e4r fel \u00f6kar system\u00f6vergripande letar jag efter orsaker som har med topologi eller belastning att g\u00f6ra.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/linux_numa_meeting_8326.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>J\u00e4mf\u00f6relser \u00f6ver tid: en m\u00e4trutin som ger resultat<\/h2>\n\n<p>Jag avl\u00e4ser m\u00e4tarst\u00e4llningarna i b\u00f6rjan och slutet av en <strong>Slutfas<\/strong> och ber\u00e4knar skillnaden. Enstaka v\u00e4rden d\u00f6ljer effekter, medan skillnader visar p\u00e5 f\u00f6r\u00e4ndringar. Upprepade intervall p\u00e5 till exempel 30 till 60 sekunder r\u00e4cker ofta f\u00f6r att uppt\u00e4cka trender. Efter drifts\u00e4ttningar, k\u00e4rnuppdateringar eller h\u00e5rdvaruf\u00f6r\u00e4ndringar j\u00e4mf\u00f6r jag samma intervall p\u00e5 nytt. Om det d\u00e5 uppst\u00e5r fler missar eller om local_node f\u00f6rskjuts, f\u00f6religger en verklig f\u00f6r\u00e4ndring.<\/p>\n\n<p>S\u00e5dana tidsserier omfattar <strong>Placeringsfel<\/strong> snabbare \u00e4n \u00f6gonblicksbilder. Jag korrelerar linjerna med CPU-utnyttjande, kontextbyten och minnesanv\u00e4ndning per nod. P\u00e5 s\u00e5 s\u00e4tt kan jag se om flaskhalsar i en nods RAM-minne leder till avvikande beteenden. Eller om nya processer rubbar balansen i noderna. Den rena andelen tr\u00e4ffar och missar redovisar jag alltid som en kurva, inte som ett enskilt tal.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/linux-numa-stat-analysis-4857.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Granska hela systemet, och zooma sedan in p\u00e5 processerna<\/h2>\n\n<p>Jag b\u00f6rjar med helhetsbilden fr\u00e5n <strong>numastat<\/strong> och granskar f\u00f6rst d\u00e4refter enskilda processer. Denna ordning sparar tid, eftersom m\u00e5nga effekter blir synliga p\u00e5 \u00f6vergripande niv\u00e5. F\u00f6r processvyn anv\u00e4nder jag den processspecifika utskriften f\u00f6r att isolera tj\u00e4nster som sticker ut. S\u00e5 snart kandidaterna \u00e4r fastst\u00e4llda justerar jag <strong>Placering<\/strong> om CPU- och minnesanv\u00e4ndning. Praktiska tips om detta sammanfattas i artikeln om <a href=\"https:\/\/webhosting.de\/sv\/server-numa-lokalitet-cpu-minne-affinitet-optimering-kaerna\/\">CPU- och minnesaffinitet<\/a>.<\/p>\n\n<p>S\u00e4rskilt n\u00e4r det g\u00e4ller Java-tj\u00e4nster, PHP-FPM eller databaser r\u00e4cker det ofta med en ren <strong>Affinitet<\/strong>, f\u00f6r att avsev\u00e4rt minska missarna. Containerorkestrering d\u00f6ljer ofta dessa problem, eftersom schemal\u00e4ggare f\u00f6rdelar resurser utan h\u00e4nsyn till NUMA. D\u00e4rf\u00f6r kontrollerar jag nodtilldelningen per pod eller VM. Om CPU-upps\u00e4ttningar och RAM-tilldelning st\u00e4mmer \u00f6verens \u00f6kar local_node m\u00e4rkbart. Vissa problem l\u00f6ser sig s\u00e5 snart processen k\u00f6rs n\u00e4ra den n\u00f6dv\u00e4ndiga datam\u00e4ngden.<\/p>\n\n<h2>\u00d6versikt \u00f6ver NUMA-r\u00e4knare (tabell)<\/h2>\n\n<p>N\u00e4r jag utv\u00e4rderar ett nytt system fyller jag i f\u00f6ljande tabell s\u00e5 att jag kan se varje <strong>Nyckeltal<\/strong> snabbt kunna placera in. Den visar betydelse, typisk tolkning och m\u00f6jliga \u00e5tg\u00e4rder. Jag ser den inte som ett fast schema, utan som en checklista. Det avg\u00f6rande \u00e4r fortfarande j\u00e4mf\u00f6relsen med belastningsprofilen och servertopologin. F\u00f6rst med detta sammanhang kan jag fatta ett v\u00e4lgrundat beslut.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>r\u00e4knare<\/strong><\/th>\n      <th><strong>Betydelse<\/strong><\/th>\n      <th><strong>tolkning<\/strong><\/th>\n      <th><strong>Tillv\u00e4gag\u00e5ngss\u00e4tt<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>numa_hit<\/td>\n      <td>Allokering vid \u00f6nskad nod<\/td>\n      <td>Ett h\u00f6gt v\u00e4rde \u00e4r positivt<\/td>\n      <td>Beh\u00e5lla placeringen<\/td>\n    <\/tr>\n    <tr>\n      <td>numa_miss<\/td>\n      <td>Allokeringen flyttades till andra noder<\/td>\n      <td>\u00d6kad risk f\u00f6r f\u00f6rdr\u00f6jningar<\/td>\n      <td>Kontrollera Affinity\/Policy<\/td>\n    <\/tr>\n    <tr>\n      <td>numa_utl\u00e4ndsk<\/td>\n      <td>Fr\u00e4mmande allokering p\u00e5 denna nod<\/td>\n      <td>Motsvarighet till numa_miss<\/td>\n      <td>Analysera m\u00e5lnoder<\/td>\n    <\/tr>\n    <tr>\n      <td>local_node<\/td>\n      <td>\u00c5tkomst till lokalt lagringsutrymme<\/td>\n      <td>Ju h\u00f6gre, desto billigare<\/td>\n      <td>Processen n\u00e4rmare RAM-minnet<\/td>\n    <\/tr>\n    <tr>\n      <td>other_node<\/td>\n      <td>\u00c5tkomst till fj\u00e4rrlagring<\/td>\n      <td>Bara lite oroande, utan avsikt<\/td>\n      <td>Kontrollera topologi\/belastning<\/td>\n    <\/tr>\n    <tr>\n      <td>interleave_hit<\/td>\n      <td>Tr\u00e4ffar vid interleave-f\u00f6rdelning<\/td>\n      <td>F\u00f6rv\u00e4ntat vid interleave-policy<\/td>\n      <td>Bed\u00f6ma j\u00e4mnheten<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Med detta <strong>\u00d6versikt<\/strong> d\u00e5 kan jag snabbare avg\u00f6ra n\u00e4r jag ska ingripa. En \u00f6kning av numa_miss utan n\u00e5gon f\u00f6rklarlig f\u00f6r\u00e4ndring utl\u00f6ser en orsaksanalys. Om interleave_hit f\u00f6rblir h\u00f6gt kontrollerar jag om policyn \u00e4r avsiktligt aktiv. Om other_node \u00f6kar utan att belastningen stiger unders\u00f6ker jag om det finns arbetsbelastningar som tr\u00e4nger undan andra. P\u00e5 s\u00e5 s\u00e4tt blir tabellen en utg\u00e5ngspunkt f\u00f6r m\u00e5linriktade \u00e5tg\u00e4rder.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/NUMA_Statistik_Auswertung_1023.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Att f\u00f6rst\u00e5 och anv\u00e4nda NUMA-topologi<\/h2>\n\n<p>Innan jag b\u00f6rjar tr\u00e4na kontrollerar jag <strong>Topologi<\/strong> p\u00e5 servern: socklar, k\u00e4rnor, minneskanaler, latensv\u00e4gar. Om en process k\u00f6rs p\u00e5 sockel 0 men lagrar arbetssatserna p\u00e5 sockel 1 \u00f6kar \u00e5tkomsttiden. Detta minskar genomstr\u00f6mningen och g\u00f6r att svarstiderna varierar. S\u00e4rskilt minneskr\u00e4vande tj\u00e4nster m\u00e4rker varje on\u00f6dig avst\u00e5nd. Jag placerar d\u00e4rf\u00f6r dataintensiva processer p\u00e5 noder med tillr\u00e4ckligt med ledigt RAM-minne.<\/p>\n\n<p>Asymmetriska <strong>Anslutningar<\/strong> f\u00f6rst\u00e4rker effekterna, till exempel n\u00e4r en nod anv\u00e4nder f\u00e4rre kanaler. I s\u00e5dana fall flyttar jag den cachade datam\u00e4ngden p\u00e5 ett m\u00e5linriktat s\u00e4tt ist\u00e4llet f\u00f6r att f\u00f6rdela processen. Jag konfigurerar VM- och container-v\u00e4rdar s\u00e5 att varje instans f\u00e5r en konsekvent nodkoppling. P\u00e5 s\u00e5 s\u00e4tt minskar jag den fj\u00e4rrdata\u00f6verf\u00f6ringen utan att begr\u00e4nsa kvoterna. Maskinens fysiska begr\u00e4nsningar s\u00e4tter ramarna, och jag h\u00e5ller mig till dem.<\/p>\n\n<h2>Att f\u00f6rst\u00e5 interleave och balansering p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n\n<p>Interleave-policyer f\u00f6rdelar minnet medvetet \u00f6ver noderna s\u00e5 att <strong>Genomstr\u00f6mning<\/strong> per process \u00f6kar eller att hotspots minskar. I den h\u00e4r konfigurationen r\u00e4knas h\u00f6ga interleave_hit som \u00f6nskv\u00e4rda. Jag kontrollerar d\u00e5 framf\u00f6r allt j\u00e4mnheten, inte den absoluta lokaliteten. AutoNUMA respektive NUMA-balansering kan hj\u00e4lpa, men inte i alla situationer.<\/p>\n\n<p>Jag avg\u00f6r utifr\u00e5n situationen om automatisk <strong>Balansering<\/strong> f\u00f6rblir aktiv. F\u00f6r stabila, l\u00e5ngvariga tj\u00e4nster f\u00f6redrar jag fasta bindningar. Vid varierande belastning kan AutoNUMA reagera p\u00e5 ett l\u00e4mpligt s\u00e4tt. En bra \u00f6versikt \u00f6ver f\u00f6rdelar och risker finns i artikeln <a href=\"https:\/\/webhosting.de\/sv\/inaktivera-eller-behall-numa-balansering-foer-optimal-prestanda-i-linux\/\">NUMA-balansering<\/a>. F\u00f6rst n\u00e4r m\u00e5let och ramarna \u00e4r klara v\u00e4ljer jag det l\u00e4mpliga l\u00e4get.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/NUMA_Statistik_Auswertung_1023.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Arbetsbelastningsm\u00f6nster: databaser, virtuella maskiner, webbtj\u00e4nster<\/h2>\n\n<p>Databaser \u00e4r k\u00e4nsliga f\u00f6r <strong>F\u00f6rdr\u00f6jning<\/strong> mellan CPU och RAM. D\u00e4rf\u00f6r h\u00e5ller jag instansen, buffertcachen och aktiva shards p\u00e5 samma nod. Virtuella maskiner drar nytta av tydliga CPU-upps\u00e4ttningar plus nodens RAM, s\u00e5 att g\u00e4stoperativsystemen ser konsekventa v\u00e4gar. Webbtj\u00e4nster med m\u00e5nga arbetare fungerar b\u00e4st n\u00e4r arbetsgrupper f\u00f6rblir bundna till en nod. F\u00f6r lagringsstrategin anv\u00e4nder jag, beroende p\u00e5 fallet, riktade <a href=\"https:\/\/webhosting.de\/sv\/numa-minnesprinciper-databasserver-optimering-server\/\">NUMA-minnesprinciper<\/a>.<\/p>\n\n<p>Analytiska uppgifter och omfattande genoms\u00f6kningar sk\u00f6ter jag d\u00e4remot delvis <strong>f\u00f6rdelat<\/strong> . H\u00e4r ger interleave ofta b\u00e4ttre bandbredd \u00e4n h\u00e5rd lokalitet. Det \u00e4r viktigt att noggrant analysera arbetsbelastningens I\/O-m\u00f6nster. Skrivning dominerar p\u00e5 ett annat s\u00e4tt \u00e4n l\u00e4sning, och slumpm\u00e4ssiga \u00e5tkomstf\u00f6rfr\u00e5gningar p\u00e5 ett annat s\u00e4tt \u00e4n sekventiella. Jag v\u00e4ljer den policy som passar \u00e5tkomstm\u00f6nstret, inte den som l\u00e5ter bra i l\u00e4roboken.<\/p>\n\n<h2>Praktiska m\u00e4trutiner och verktyg<\/h2>\n\n<p>F\u00f6r att komma ig\u00e5ng r\u00e4cker det f\u00f6r mig med <strong>numastat<\/strong> och processvyn. Jag dokumenterar m\u00e4tarst\u00e4llningar med datum, PID och belastningsindikatorer. Det \u00e4r viktigt att m\u00e4ta under identiska tidsf\u00f6nster. P\u00e5 s\u00e5 s\u00e4tt kan man tydligt visa skillnaderna f\u00f6re och efter. Under produktiva tidsf\u00f6nster antecknar jag delta-v\u00e4rdena och korrelerar dem med release-tidpunkter.<\/p>\n\n<p>Vid p\u00e5fallande <strong>Tj\u00e4nster<\/strong> Jag kontrollerar dessutom CPU-bindningen och nodvyn med verktyg som lscpu, numactl och perf-vyn f\u00f6r att se p\u00e5 fj\u00e4rrbelastningen. Jag dokumenterar den valda policyn f\u00f6r varje m\u00e4tomg\u00e5ng. Efter en \u00e4ndring m\u00e4ter jag igen. F\u00f6rst n\u00e4r trendlinjerna stabiliseras betraktar jag effekten som lyckad. Att byta policy i blindo leder l\u00e4tt till skenbara f\u00f6rb\u00e4ttringar.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/linux_numa_auswertung_7463.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Undvika vanliga missuppfattningar<\/h2>\n\n<p>En h\u00f6g <strong>interleave_hit<\/strong> \u00e4r inget fel om interleave \u00e4r avsiktligt aktiverat. P\u00e5 samma s\u00e4tt \u00e4r en enstaka avvikelse f\u00f6rsumbar vid l\u00e5ng k\u00f6rtid. Jag granskar alltid t\u00e4theten och f\u00f6rdelningen \u00f6ver hela intervallet, inte bara toppv\u00e4rdena. Vissa tolkar other_node som generellt negativt och f\u00f6rbiser belastningens karakt\u00e4r. D\u00e4rf\u00f6r tittar jag f\u00f6rst p\u00e5 designm\u00e5let och utv\u00e4rderar sedan siffrorna.<\/p>\n\n<p>Ytterligare en missuppfattning: <strong>\u00d6vergripande syn<\/strong> Okej, d\u00e5 \u00e4r allt bra. Ofta g\u00f6mmer sig avvikelser bara i vissa PID:er. Eller s\u00e5 f\u00f6rdelar containerschedulern pods \u00f6ver olika noder, trots att en lokal grupp skulle vara mer l\u00e4mpligt. S\u00e5dana effekter uppt\u00e4cker jag f\u00f6rst n\u00e4r jag m\u00e4ter per process. Utan den h\u00e4r djupg\u00e5ende analysen blir resultatet ofullst\u00e4ndigt.<\/p>\n\n<h2>Effektiva inst\u00e4llningssteg<\/h2>\n\n<p>Jag b\u00f6rjar med <strong>Placering<\/strong>: Processer p\u00e5 de noder d\u00e4r data finns eller ska finnas. Sedan st\u00e4ller jag in CPU-affinitet s\u00e5 att tr\u00e5dar inte hoppar mellan socklar. D\u00e4refter f\u00f6ljer minnesbindning, s\u00e5 att k\u00e4rnan allokerar p\u00e5 \u00f6nskad plats. F\u00f6r varierande belastningar kontrollerar jag policyer och, om det \u00e4r l\u00e4mpligt, AutoNUMA.<\/p>\n\n<p>D\u00e4refter ser jag till att <strong>Samst\u00e4mmighet<\/strong> I livscykeln: Omstarter, drifts\u00e4ttningar och skalningar f\u00e5r inte \u00e4ndra nodreferenser p\u00e5 m\u00e5f\u00e5. Jag dokumenterar kopplingarna i kod s\u00e5 att de f\u00f6rblir reproducerbara. D\u00e4refter m\u00e4ter jag p\u00e5 nytt, utv\u00e4rderar avvikelserna och beslutar om finjusteringar. Varje \u00e4ndring f\u00f6rtj\u00e4nar ett tydligt m\u00e4tbevis.<\/p>\n\n<h2>Praktiskt exempel: Fr\u00e5n flopp till succ\u00e9<\/h2>\n\n<p>Anta att en <strong>Databas<\/strong> visar fler \u201dnuma_miss\u201d och stigande \u201dother_node\u201d under belastning. Latensen f\u00f6r fr\u00e5gorna varierar mer. Jag kontrollerar f\u00f6rst processbindningen och konstaterar att tj\u00e4nsten efter en utrullning k\u00f6rs p\u00e5 nod A, men att cachen har tilldelats nod B. Efter en fast CPU- och minnesbindning till nod B v\u00e4nds f\u00f6rh\u00e5llandet: numa_hit stiger, missarna minskar. Svarstiderna blir mer konstanta och CPU-belastningen sjunker n\u00e5got eftersom fj\u00e4rr\u00e5tkomsten f\u00f6rsvinner.<\/p>\n\n<p>Samtidigt kontrollerar jag <strong>Policy<\/strong>. Interleave var oavsiktligt aktiverat och har f\u00f6rdelat allokeringar. Efter \u00f6verg\u00e5ngen till den prioriterade noden f\u00f6rblir cachen st\u00e4ngd lokalt. Efter en timmes m\u00e4tning bekr\u00e4ftar delta-v\u00e4rdena f\u00f6rb\u00e4ttringen. F\u00f6rst d\u00e5 betraktar jag optimeringen som lyckad. Utan denna kontrollm\u00e4tning skulle en \u00f6gonblicksbild ha varit missvisande.<\/p>\n\n<h2>M\u00e4tv\u00e4rden och riktlinjer f\u00f6r praktiken<\/h2>\n\n<p>N\u00e4r jag fattar beslut anv\u00e4nder jag tillf\u00f6rlitliga <strong>Odds<\/strong> ist\u00e4llet f\u00f6r enskilda r\u00e5v\u00e4rden. F\u00f6r varje process ber\u00e4knar jag allokeringsgraden local_alloc = numa_hit \/ (numa_hit + numa_miss). Dessutom utv\u00e4rderar jag <strong>Tillg\u00e5ngsgrad<\/strong> local_access = local_node \/ (local_node + other_node). Tillsammans visar dessa v\u00e4rden om minnet f\u00f6rblir lokalt \u00e4ven efter allokeringen. Mina grova riktlinjer \u00e4r f\u00f6ljande: F\u00f6r latenskritiska tj\u00e4nster str\u00e4var jag efter att fj\u00e4rr\u00e5tkomsten ska ligga under 5\u201310 %. Vid analytiska bandbreddsbelastningar tolererar jag 20\u201330 %, f\u00f6rutsatt att genomstr\u00f6mningen \u00f6kar. Avg\u00f6rande \u00e4r <strong>Stabilitet<\/strong> \u00f6ver tid. Jag f\u00f6redrar ett v\u00e4rde som f\u00f6rblir stabilt under belastning framf\u00f6r en kort topp med perfekta v\u00e4rden. Jag dokumenterar dessa m\u00e5lintervall f\u00f6r varje service, s\u00e5 att senare m\u00e4tningar tydligt kan placeras i sitt sammanhang.<\/p>\n\n<h2>Cgroups, containrar och schemal\u00e4ggningsf\u00e4llor<\/h2>\n\n<p>I container-milj\u00f6er kontrollerar jag f\u00f6rst <strong>cpuset<\/strong>\u2011Tilldelning: CPU-upps\u00e4ttningar och <em>cpuset.mems<\/em> m\u00e5ste avbilda samma nodutrymme, annars uppst\u00e5r oundvikligen problem. Jag ser till att poddar med fasta CPU-beg\u00e4randen inte str\u00e4cker sig \u00f6ver flera NUMA-noder, och att schemal\u00e4ggaren inte f\u00f6rdelar arbetare fr\u00e5n samma applikation \u00f6ver flera noder. F\u00f6r burst-typer begr\u00e4nsar jag det maximala antalet tr\u00e5dar per pod s\u00e5 att de h\u00e5lls inom en enda nod. Jag dokumenterar <strong>NUMA-dom\u00e4n<\/strong> per distribution och kr\u00e4ver konsekventa repliker (en arbetsgrupp per nod, inte halva grupper f\u00f6rdelade p\u00e5 tv\u00e5 noder). Om jag ber\u00e4knar lagringsutrymmet per pod f\u00f6r sn\u00e4vt skapar jag o\u00f6nskad press: ett litet utrymme per nod f\u00f6rhindrar att k\u00e4rnan tvingas byta till andra noder i f\u00f6rtid. Om containrar startas om ofta ser jag till att anv\u00e4nda deterministisk bindning, s\u00e5 att <strong>Kallstart<\/strong> inte av en slump hamna p\u00e5 en s\u00e4mre plats.<\/p>\n\n<h2>Synkronisera virtuella maskiner och vNUMA<\/h2>\n\n<p>N\u00e4r det g\u00e4ller virtuella maskiner riktar jag min uppm\u00e4rksamhet mot <strong>vNUMA<\/strong>: Den virtuella topologin m\u00e5ste st\u00e4mma \u00f6verens med den fysiska. Jag f\u00f6rdelar vCPU:er s\u00e5 att varje vNUMA-nod hamnar p\u00e5 exakt en fysisk NUMA-nod. P\u00e5 v\u00e4rdsidan kopplar jag QEMU\/hypervisor-tr\u00e5darna till denna dom\u00e4n och ser till att det tilldelade RAM-minnet tillhandah\u00e5lls helt och h\u00e5llet fr\u00e5n denna nod. <strong>Ballongflygning<\/strong> och jag accepterar \u00f6verutnyttjande med f\u00f6rsiktighet f\u00f6r latenskritiska virtuella maskiner; aggressivt \u201dballooning\u201d kan tr\u00e4nga bort hotsets fr\u00e5n noden och \u00f6ka antalet fj\u00e4rr\u00e5tkomster. Vid livemigrering verifierar jag bindningarna p\u00e5 nytt efter flytten \u2013 vissa milj\u00f6er f\u00f6rlorar n\u00e4mligen de noggrant inst\u00e4llda CPU- och minnesbindningarna vid detta tillf\u00e4lle. F\u00f6rst n\u00e4r vNUMA-inriktningen \u00e4r korrekt utv\u00e4rderar jag numastat systemomfattande: annars \u00e5tg\u00e4rdar jag symptomen, inte orsaken.<\/p>\n\n<h2>THP, Hugepages och sidmigrering<\/h2>\n\n<p><strong>Transparenta stora sidor<\/strong> (THP) kan b\u00e5de vara till hj\u00e4lp och orsaka problem. St\u00f6rre sidor minskar antalet TLB-missar och f\u00f6rb\u00e4ttrar bandbredden, men om k\u00e4rnan f\u00f6rst sent b\u00f6rjar anv\u00e4nda Hugepages <em>kollapsar<\/em> eller migreras, kan ol\u00e4mpliga <strong>Avst\u00e5nd mellan orter<\/strong> uppst\u00e5r. Jag f\u00f6ljer tv\u00e5 regler: F\u00f6r det f\u00f6rsta, den <strong>Policy<\/strong> definiera tydligt (t.ex. prioriterad nod) och i m\u00f6jligaste m\u00e5n tilldela stora lokala resurser redan fr\u00e5n b\u00f6rjan. F\u00f6r det andra, vid arbetsbelastningar med fasta, stora cacher anv\u00e4nder jag om m\u00f6jligt statiska hugepages (hugetlb), som jag uttryckligen reserverar p\u00e5 en nod. Detta minskar fragmentering och kompensationsrelaterade omf\u00f6rdelningar. Om jag i tidsserier ser att efter en l\u00e4ngre k\u00f6rtid har <em>other_node<\/em>\u2013 andelen \u00f6kar, s\u00e5 unders\u00f6ker jag om <strong>Sidmigrering<\/strong> eller om komprimering sker och om THP-inst\u00e4llningarna passar m\u00f6nstret. Det \u00e4r viktigt f\u00f6r mig att inte st\u00e4nga av eller sl\u00e5 p\u00e5 funktionen globalt \u2013 jag fattar beslut f\u00f6r varje tj\u00e4nst och m\u00e4ter effekten p\u00e5 lokalitet och latens.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/linux-numa-analyse-4746.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Att tolka Reclaim, Swap och Memory\u2011Pressure p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n\n<p>Om missar uppst\u00e5r utan n\u00e5gon uppenbar f\u00f6r\u00e4ndring i placeringen, letar jag efter <strong>minnesutskrift<\/strong> per nod. Fulla noder tvingar k\u00e4rnan att \u00e5tervinna utrymme och komprimera, delvis utl\u00f6st av <em>kswapd<\/em> p\u00e5 en annan nod \u2013 det ger upphov till sidoeffekter i r\u00e4knarna. Jag kontrollerar det lediga minnet och utnyttjandet av sidcachen f\u00f6r varje nod. Aktiverad <strong>Byta<\/strong> kan tr\u00e4nga undan Hotsets och f\u00e5 latenserna att skjuta i h\u00f6jden; f\u00f6r s\u00e4rskilt k\u00e4nsliga tj\u00e4nster inaktiverar jag swap eller begr\u00e4nsar den strikt. I loggar och perf-vyer letar jag efter Reclaim-toppar under belastningstoppar. M\u00e5let \u00e4r att ha tillr\u00e4ckligt med ledigt, <strong>lokala<\/strong> Att beh\u00e5lla RAM-minnet p\u00e5 m\u00e5lnoden s\u00e5 att allokeringarna inte glider iv\u00e4g. Om cacheminnena m\u00e5ste minskas f\u00f6r detta \u00e4ndam\u00e5l prioriterar jag tj\u00e4nstens arbetsupps\u00e4ttning framf\u00f6r den generiska sidcachen.<\/p>\n\n<h2>Praktiska kommandon och utv\u00e4rdering<\/h2>\n\n<p>F\u00f6r processvyn anv\u00e4nder jag <code>numastat -p<\/code> och l\u00e4gg till <code>cat \/proc\/\/numa_maps<\/code>, f\u00f6r att se tilldelningar per omr\u00e5de (anonymt, filbaserat) och per nod. <code>numactl --h\u00e5rdvara<\/code> ger mig latensmatriser och nodstorlekar, <code>lscpu --extended<\/code> visar CPU-tilldelningen till noder. F\u00f6r minnes\u00e5tkomst med fokus p\u00e5 l\u00e5nga v\u00e4gar anv\u00e4nder jag <code>perf mem<\/code> f\u00f6r att verifiera belastningsm\u00f6nster. Jag samlar in delta-v\u00e4rden p\u00e5 ett reproducerbart s\u00e4tt, t.ex.:<\/p>\n\n<p><em>M\u00e4tningsrutin<\/em><\/p>\n<ul>\n  <li>t0: spara numastat (totalt) och numastat -p f\u00f6r de fr\u00e4msta PID:erna<\/li>\n  <li>30\u201360 sekunders belastningsk\u00f6rning, identisk arbetsbelastningsfas<\/li>\n  <li>t1: L\u00e4s in numastat p\u00e5 nytt, ber\u00e4kna delta per r\u00e4knare<\/li>\n  <li>Logga parallella CPU-, kontextv\u00e4xlings- och nodminnesv\u00e4rden<\/li>\n<\/ul>\n\n<p>D\u00e4refter ber\u00e4knar jag <strong>Odds<\/strong> och markerar vilka processer som avviker v\u00e4sentligt fr\u00e5n de systemomfattande trenderna. Om os\u00e4kerhet kvarst\u00e5r upprepar jag m\u00e4tningen minst tre g\u00e5nger. F\u00f6rst n\u00e4r avvikelserna \u00e4r konsekventa betraktar jag dem som tillf\u00f6rlitliga. F\u00f6r kontinuerlig \u00f6vervakning kartl\u00e4gger jag r\u00e4knarna mot tidsserier och kopplar dem till release-metadata \u2013 p\u00e5 s\u00e5 s\u00e4tt kan jag uppt\u00e4cka <strong>Regressionspunkter<\/strong> omedelbart.<\/p>\n\n<h2>Checklista f\u00f6r strukturerad NUMA-optimering<\/h2>\n\n<ul>\n  <li>Definiera m\u00e5let: latens kontra genomstr\u00f6mning, fast belastning kontra variabel belastning<\/li>\n  <li>Registrera topologi: noder, latenser, ledigt RAM-minne per nod<\/li>\n  <li>M\u00e4ta utg\u00e5ngsv\u00e4rden: numastat totalt och per process, ber\u00e4kna andelar<\/li>\n  <li>Korrigera placering: CPU-affinitet, minnesbindning, policyer<\/li>\n  <li>Konfigurera containrar\/VM: cpuset.cpus = noder, cpuset.mems anpassade; korrekt mappning av vNUMA<\/li>\n  <li>V\u00e4lj THP\/Hugepages medvetet \u2013 h\u00e5ll koll p\u00e5 fragmenteringen<\/li>\n  <li>Minska minnesbelastningen: Headroom per nod, kontrollera swap-strategin<\/li>\n  <li>Uppf\u00f6ljning: J\u00e4mf\u00f6ra delta-v\u00e4rden, s\u00e4kerst\u00e4lla stabilitet \u00f6ver tid<\/li>\n  <li>Dokumentera: Kopplingar som kod, releaseanteckningar med NUMA-sammanhang<\/li>\n<\/ul>\n\n<h2>Kortfattat sammanfattat<\/h2>\n\n<p>Jag analyserar NUMA-siffror genom att <strong>Signaler<\/strong> L\u00e4s \u00e4ven: r\u00e4knarpar, tidsf\u00f6rlopp och processvy. Nyckelv\u00e4rdena numa_hit, numa_miss, numa_foreign, local_node, other_node och interleave_hit visar mig lokalitet, avvikelser och f\u00f6rdelningsstrategier. Jag fattar beslut utifr\u00e5n topologin och arbetsbelastningen, inte utifr\u00e5n fasta gr\u00e4nsv\u00e4rden. Optimering b\u00f6rjar med placering, affinitet, l\u00e4mplig policy och en ren m\u00e4trutin. P\u00e5 s\u00e5 s\u00e4tt levererar jag konstanta <strong>Prestanda<\/strong>, eftersom processorn och RAM-minnet \u00e4r anpassade till applikationen och l\u00e5nga \u00f6verf\u00f6ringsv\u00e4gar \u00e4r s\u00e4llsynta.<\/p>","protected":false},"excerpt":{"rendered":"<p>Att korrekt tolka Linux NUMA-statistik: f\u00f6rst\u00e5 NUMA-statistik, kontrollera minneslokalitet och m\u00e5lmedvetet f\u00f6rb\u00e4ttra serverns prestanda.<\/p>","protected":false},"author":1,"featured_media":21436,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"76","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Linux NUMA","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21436","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=21443"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21443\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/21436"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=21443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=21443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=21443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}