{"id":20890,"date":"2026-08-22T11:51:32","date_gmt":"2026-08-22T09:51:32","guid":{"rendered":"https:\/\/webhosting.de\/so-reuseport-linux-webserver-performance-optimierung-core\/"},"modified":"2026-08-22T11:51:32","modified_gmt":"2026-08-22T09:51:32","slug":"sa-reuseport-linux-webbserver-prestandaoptimering-kaerna","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/so-reuseport-linux-webserver-performance-optimierung-core\/","title":{"rendered":"SO_REUSEPORT under Linux: B\u00e4ttre prestanda f\u00f6r webbservrar"},"content":{"rendered":"<p>Jag visar hur SO_REUSEPORT p\u00e5skyndar Linux-webbservrar med m\u00e5nga samtidiga anslutningar och eliminerar flaskhalsar vid <strong>Acceptera<\/strong> tas bort. Jag satsar p\u00e5 tydliga praktiska metoder s\u00e5 att du kan f\u00e5 ut mer av multicore-system <strong>Effekt<\/strong> tar fram.<\/p>\n\n<h2>Centrala punkter<\/h2>\n<ul>\n  <li><strong>Accept-flaskhals<\/strong> undvika och minska latensen<\/li>\n  <li><strong>Multicore<\/strong> Effektiv utnyttjande genom f\u00f6rdelning av k\u00e4rnor<\/li>\n  <li><strong>\u00c5skande spis<\/strong> minska avsev\u00e4rt<\/li>\n  <li><strong>Arkitektur<\/strong> f\u00f6renkla utan anv\u00e4ndarniv\u00e5-dispatcher<\/li>\n  <li><strong>Nginx<\/strong> och anv\u00e4nda andra servrar direkt<\/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\/08\/webserver-performance-3471.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vad SO_REUSEPORT l\u00f6ser ur teknisk synvinkel<\/h2>\n\n<p>SO_REUSEPORT tilldelar varje arbetare en egen lyssningssockel, s\u00e5 att jag kan anv\u00e4nda den klassiska <strong>flaskhals<\/strong> vid den centrala Accept-behandlingen. Tidigare var allt kopplat till en enda socket, vilket ledde till konkurrerande tr\u00e5dar och \u00f6kade v\u00e4ntetider. Idag f\u00f6rdelar k\u00e4rnan nya anslutningar direkt p\u00e5 flera socketer, vilket <strong>F\u00f6rdr\u00f6jning<\/strong> minskar m\u00e4rkbart. P\u00e5 s\u00e5 s\u00e4tt undviker jag behovet av separata dispatcher-processer och sparar in p\u00e5 kontextbyten. Vid h\u00f6g belastning f\u00f6rblir svarstiderna mer konstanta, eftersom ingen enskild lyssnare bromsar upp systemet.<\/p>\n\n<h2>SO_REUSEPORT j\u00e4mf\u00f6rt med SO_REUSEADDR \u2013 en kort \u00f6versikt<\/h2>\n\n<p>SO_REUSEADDR hj\u00e4lper mig att snabbt starta om, eftersom jag kan anv\u00e4nda portar trots <strong>TIME_WAIT<\/strong> kan binda p\u00e5 nytt. SO_REUSEPORT l\u00f6ser n\u00e5got annat: flera lyssnare samtidigt p\u00e5 samma IP\/port-kombination. F\u00f6rst n\u00e4r jag st\u00e4ller in SO_REUSEPORT innan bind()-anropet till\u00e5ter k\u00e4rnan parallell <strong>Bind<\/strong>-Operation. Ordningsf\u00f6ljden \u00e4r viktig: Om en port \u00e4r upptagen utan denna option kan inga ytterligare socklar l\u00e4ggas till. F\u00f6r parallella arbetare \u00e4r d\u00e4rf\u00f6r SO_REUSEPORT en nyckeloption.<\/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\/08\/optimierte_webserver_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Hur det fungerar i k\u00e4rnan: Reuseport-grupper och hash<\/h2>\n\n<p>Alla socklar med samma IP\/port-kombination och med SO_REUSEPORT aktiverat hamnar i en <strong>Grupp<\/strong>. K\u00e4rnan ber\u00e4knar en hash \u00f6ver k\u00e4ll- och m\u00e5lparametrarna f\u00f6r varje ny anslutning. Utifr\u00e5n detta tilldelar den anslutningen till en l\u00e4mplig lyssnare och f\u00f6rdelar d\u00e4rmed anslutningarna relativt r\u00e4ttvist. Jag drar nytta av b\u00e4ttre cache-lokalitet, eftersom varje CPU oftare hanterar \u201esina\u201c anslutningar. F\u00f6r specialfall kan BPF <strong>Urval<\/strong> anpassa ytterligare, till exempel f\u00f6r att genomf\u00f6ra egna strategier.<\/p>\n\n<h2>Praktisk \u00f6vning: Konfigurera Nginx p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n\n<p>I Nginx aktiverar jag `reuseport` med direktivet `listen` och anv\u00e4nder flera <strong>Arbetare<\/strong>-processer. Ett exempel: st\u00e4ll in `worker_processes` p\u00e5 antalet k\u00e4rnor och skriv \u201elisten 80 reuseport;\u201c i serverblocket. D\u00e4refter f\u00e5r varje arbetare sin egen lyssnare, och k\u00e4rnan f\u00f6rdelar nya anslutningar automatiskt. F\u00f6r mer information om det optimala antalet arbetare h\u00e4nvisar jag till <a href=\"https:\/\/webhosting.de\/sv\/konfigurera-nginx-arbetsprocesser-optimalt-foer-baettre-prestanda\/\">Nginx-arbetsprocesser<\/a>. P\u00e5 s\u00e5 s\u00e4tt uppn\u00e5r jag h\u00f6gre beg\u00e4randehastigheter och en j\u00e4mn belastning p\u00e5 k\u00e4rnorna.<\/p>\n\n<h2>Att utnyttja flerk\u00e4rniga processorer effektivt<\/h2>\n\n<p>Med flera arbetare och SO_REUSEPORT anv\u00e4nder jag <strong>Multicore<\/strong>-systemen mer j\u00e4mnt. Jag kopplar arbetare till k\u00e4rnor via CPU-affinitet f\u00f6r att minska cache-hoppning. RSS\/RPS p\u00e5 n\u00e4tverkskortet hj\u00e4lper till att f\u00f6rdela inkommande paket till l\u00e4mpliga k\u00f6er. P\u00e5 s\u00e5 s\u00e4tt hamnar anslutningarna oftare hos \u201el\u00e4mpliga\u201c k\u00e4rnor, vilket <strong>Genomstr\u00f6mning<\/strong>-hastigheten \u00f6kar. Effekten m\u00e4rks s\u00e4rskilt vid m\u00e5nga korta anslutningar och TLS-handshakes.<\/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\/08\/linux-server-performance-boost-2341.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u00d6vervakning, rullande omstarter och fallgropar<\/h2>\n\n<p>Jag planerar rullande omstarter noggrant, eftersom st\u00e4ngningen av en lyssnande socket kan leda till f\u00f6rlorade <strong>Eftersl\u00e4pning<\/strong>-poster. Innan jag avslutar arbetare l\u00e5ter jag deras k\u00f6er t\u00f6mmas och tar dem f\u00f6rst d\u00e4refter ur drift. F\u00f6r loggar v\u00e4ljer jag separata filer per arbetare, s\u00e5 att jag senare kan sp\u00e5ra f\u00f6rdelningen. \u00d6vervakningsverktyg m\u00e5ste ta h\u00e4nsyn till flera processer, annars blir m\u00e4tv\u00e4rdena missvisande. N\u00e4r det g\u00e4ller IP-bindningar ser jag till att de \u00e4r konsekventa, eftersom 0.0.0.0 och specifika IP-adresser annars <strong>Konflikter<\/strong> kan generera.<\/p>\n\n<h2>SO_REUSEPORT bortom HTTP<\/h2>\n\n<p>Denna princip hj\u00e4lper mig ocks\u00e5 med <strong>UDP<\/strong>-tj\u00e4nster som DNS, streaming eller spelservrar. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rdelas m\u00e5nga nya paket per sekund \u00f6ver flera lyssnare utan att jag beh\u00f6ver en loadbalancer i anv\u00e4ndarmilj\u00f6n. TCP-proxyservrar, gateways och IoT-plattformar drar ocks\u00e5 nytta av detta. Det \u00e4r viktigt att ha r\u00e4tt antal arbetare s\u00e5 att h\u00e5rdvara och mjukvara arbetar i takt. Jag kombinerar denna konfiguration med tydliga <strong>Gr\u00e4nser<\/strong> f\u00f6r filbeskrivare och korrekta timeout-v\u00e4rden.<\/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\/08\/linux_nacht_webserver_7834.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Justering av n\u00e4tverksstacken: IRQ, avlastningar, buffertar<\/h2>\n\n<p>Jag kontrollerar n\u00e4tverkskortets IRQ-f\u00f6rdelning s\u00e5 att k\u00f6erna kopplas till l\u00e4mpliga <strong>CPU<\/strong>-k\u00e4rnor. N\u00e4r det \u00e4r l\u00e4mpligt anv\u00e4nder jag GRO\/LRO och offloads, men testar alltid latensen. Jag st\u00e4ller in socket-buffertar medvetet, eftersom f\u00f6r l\u00e5ga v\u00e4rden bromsar upp vid toppar och f\u00f6r h\u00f6ga v\u00e4rden sl\u00f6sar bort minne; mer om detta under <a href=\"https:\/\/webhosting.de\/sv\/server-socket-buffertar-hosting-hosting-tuning-bufferopti\/\">Buffert f\u00f6r uttag<\/a>. Jag j\u00e4mf\u00f6r \u00e4ven sysctl-parametrar som somaxconn och net.core.somaxconn med arbetsbelastningsprofilen. Jag m\u00e4ter effekten av varje \u00e4ndring separat f\u00f6r att f\u00e5 fram verkliga <strong>Vinster<\/strong> att se.<\/p>\n\n<h2>J\u00e4mf\u00f6relse av vanliga webbserverkonfigurationer<\/h2>\n\n<p>Tabellen nedan visar typiska egenskaper hos olika lyssnarmodeller och hj\u00e4lper mig att <strong>Val<\/strong> av designen. Jag fokuserar p\u00e5 acceptansv\u00e4g, latens under belastning, skalbarhet, arkitekturaff\u00e4rskostnad och CPU-utnyttjande. P\u00e5 s\u00e5 s\u00e4tt kan jag snabbt se vilken konfiguration som passar min trafikprofil. Jag skiljer teori fr\u00e5n praktik genom att d\u00e4refter kontrollera faktiska m\u00e4tv\u00e4rden. Den <strong>Matris<\/strong> fungerar som utg\u00e5ngspunkt f\u00f6r riktade tester.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Inst\u00e4llning<\/th>\n      <th>Accept-s\u00f6kv\u00e4g<\/th>\n      <th>F\u00f6rdr\u00f6jning under belastning<\/th>\n      <th>Skalning<\/th>\n      <th>Arkitektkostnader<\/th>\n      <th>CPU-anv\u00e4ndning<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>En lyssnare utan SO_REUSEPORT<\/td>\n      <td>En <strong>Sockel<\/strong><\/td>\n      <td>stiger tidigt<\/td>\n      <td>begr\u00e4nsad<\/td>\n      <td>l\u00e5g<\/td>\n      <td>oj\u00e4mn<\/td>\n    <\/tr>\n    <tr>\n      <td>Flera arbetare med SO_REUSEPORT<\/td>\n      <td>K\u00e4rn-<strong>Distribution<\/strong><\/td>\n      <td>mer konstant<\/td>\n      <td>h\u00f6g<\/td>\n      <td>l\u00e5g<\/td>\n      <td>j\u00e4mnare<\/td>\n    <\/tr>\n    <tr>\n      <td>Userland-dispatcher<\/td>\n      <td>centralt mottagande<\/td>\n      <td>Medium<\/td>\n      <td>Medium<\/td>\n      <td>h\u00f6g<\/td>\n      <td>v\u00e4xlande<\/td>\n    <\/tr>\n    <tr>\n      <td>SO_REUSEPORT + BPF-logik<\/td>\n      <td>anpassat urval<\/td>\n      <td>mycket j\u00e4mnt<\/td>\n      <td>Mycket h\u00f6g<\/td>\n      <td>Medium<\/td>\n      <td>mycket j\u00e4mnt<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\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\/08\/entwicklerschreibtisch0391.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Planera prestandatester p\u00e5 ett ordentligt s\u00e4tt<\/h2>\n\n<p>Jag testar b\u00e5de med och utan SO_REUSEPORT f\u00f6r att f\u00e5 fram verkliga <strong>Skillnader<\/strong> att se. Relevanta nyckeltal \u00e4r antal f\u00f6rfr\u00e5gningar per sekund, p95\/p99-latenser och CPU-utnyttjande per k\u00e4rna. Jag varierar antalet arbetare och unders\u00f6ker den optimala balansen mellan kontextbyten och utnyttjande. Jag v\u00e4ljer testdata som \u00e4r verklighetstrogna, inklusive TLS, Keep-Alive samt statiskt och dynamiskt inneh\u00e5ll. Jag dokumenterar resultaten p\u00e5 ett reproducerbart s\u00e4tt s\u00e5 att jag senare <strong>F\u00f6r\u00e4ndringar<\/strong> kan j\u00e4mf\u00f6ra.<\/p>\n\n<h2>Apache: Att anv\u00e4nda Event-MPM p\u00e5 ett effektivt s\u00e4tt<\/h2>\n\n<p>\u00c4ven Apache drar nytta av det om jag kopplar bort Accept-v\u00e4gen och <strong>Evenemang<\/strong>-Anv\u00e4nda MPM p\u00e5 r\u00e4tt s\u00e4tt. Valet mellan Event-MPM och Worker-MPM beror p\u00e5 anslutningsprofilen och resurserna. Jag tar h\u00e4nsyn till keep-alive, tr\u00e5dpooler och gr\u00e4nsv\u00e4rden f\u00f6r klienter. Den h\u00e4r \u00f6versikten hj\u00e4lper mig att snabbt f\u00e5 en \u00f6verblick: <a href=\"https:\/\/webhosting.de\/sv\/apache-event-mpm-jaemfoert-med-worker-mpm-instaellning-och-optimering-av-webbserver\/\">Event-MPM j\u00e4mf\u00f6rt med Worker-MPM<\/a>. Tillsammans med SO_REUSEPORT arbetar jag m\u00e5lmedvetet f\u00f6r att uppn\u00e5 en j\u00e4mn <strong>Last<\/strong> per process.<\/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\/08\/server-performance-linux-4852.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Begr\u00e4nsningar och nyanser i f\u00f6rdelningen<\/h2>\n<p>SO_REUSEPORT f\u00f6rdelar inkommande anslutningar relativt r\u00e4ttvist med hj\u00e4lp av hash, men inte helt j\u00e4mnt. Vid belastningstoppar kan enskilda arbetare drabbas h\u00e5rdare under korta perioder om k\u00e4ll- och m\u00e5lparametrarna leder till en olycklig f\u00f6rdelning. Jag \u00f6vervakar d\u00e4rf\u00f6r arbetarnas statistik (accepterade anslutningar, aktiva anslutningar, CPU) och justerar antalet arbetare, affiniteter och RSS-k\u00f6er. Keep-Alive-anslutningar stannar kvar hos den ursprungliga lyssnaren, vilket ger \u00f6nskad cache-lokalitet men ocks\u00e5 kan leda till \u201eklibbiga\u201c belastningsm\u00f6nster. F\u00f6r mycket heterogena f\u00f6rfr\u00e5gningar (blandade CPU- och I\/O-tunga) planerar jag in buffertar f\u00f6r att d\u00e4mpa korta toppar.<\/p>\n\n<h2>Accept-v\u00e4gen i detalj: Backlog, somaxconn och SYN-k\u00f6er<\/h2>\n<p>Jag skiljer mellan listk\u00f6n (SYN-backlog) och acceptk\u00f6n. Parametrar som net.ipv4.tcp_max_syn_backlog, tcp_syncookies och net.core.somaxconn p\u00e5verkar hur m\u00e5nga anslutningsf\u00f6rs\u00f6k och fullt etablerade socklar som h\u00e5lls kvar. Backloggen g\u00e4ller separat f\u00f6r varje lyssnarsockel \u2013 med SO_REUSEPORT multipliceras den teoretiska buffertkapaciteten \u00f6ver alla arbetare. I praktiken begr\u00e4nsas den dock av n\u00e4tverkskortet och CPU-belastningen. Jag h\u00e5ller backloggarna konsistenta och m\u00e4ter andelen borttappade paket och \u00e5teruts\u00e4ndningar f\u00f6r att tidigt uppt\u00e4cka flaskhalsar.<\/p>\n\n<h2>Nginx-detaljer: accept_mutex, avst\u00e4ngning av arbetare och TLS<\/h2>\n<p>S\u00e5 snart jag anv\u00e4nder reuseport inaktiverar jag accept_mutex i Nginx, eftersom k\u00e4rnan sk\u00f6ter den r\u00e4ttvisa f\u00f6rdelningen. Vid en rullande omstart v\u00e4ljer jag \u201egraceful\u201c och v\u00e4ntar p\u00e5 att Keep-Alive-anslutningarna ska avslutas, s\u00e5 att inga l\u00e5nga \u00f6verf\u00f6ringar avbryts. P\u00e5 TLS-sidan ser jag till att det finns gemensamma biljettnycklar mellan arbetare\/instanser, s\u00e5 att \u00e5terupptagning och sessions-ID:n fungerar oberoende av den tilldelade lyssnaren. Jag ser till att arbetarna inte blir f\u00f6r stora (cache- och minnesavtryck) f\u00f6r att undvika kalla cacher vid processbyten.<\/p>\n\n<h2>Aktivering av systemd-socklar, containrar och orkestrering<\/h2>\n<p>Om systemd \u00f6ppnar socklar i f\u00f6rv\u00e4g m\u00e5ste det st\u00e4lla in SO_REUSEPORT, annars blockeras parallella bindningar. I containermilj\u00f6er ser jag till att det \u00f6nskade antalet arbetare verkligen skapar processer per pod\/container och att cgroup-CPU-tilldelningen st\u00e4mmer \u00f6verens med affinitetsstrategin. I orkestratorer planerar jag strategin f\u00f6r rullande uppdateringar s\u00e5 att Reuseport-gruppen f\u00f6rblir stabil under distributioner och inte blockerar n\u00e5gon port exklusivt. H\u00e4lsokontroller b\u00f6r inte skapa on\u00f6digt brus per arbetare och f\u00f6rvr\u00e4nga f\u00f6rdelningen.<\/p>\n\n<h2>NUMA-medvetenhet och minneslokalitet<\/h2>\n<p>P\u00e5 NUMA-system kopplar jag arbetare till k\u00e4rnor i samma NUMA-nod och ser till att NIC-IRQ:er helst hamnar d\u00e4r. Jag \u00f6vervakar \u00e5tkomst till fj\u00e4rrminne och sidmigreringar, eftersom de orsakar latensspikar. Om arbetsbelastningen skalar kraftigt kan det vara l\u00e4mpligt med en replikering per NUMA-nod med egen port\/frontend; i kombination med SO_REUSEPORT uppn\u00e5r jag mycket stabila latenser, s\u00e5 l\u00e4nge data- och kodv\u00e4garna f\u00f6rblir nodlokala.<\/p>\n\n<h2>HTTP\/3 och fokus p\u00e5 UDP<\/h2>\n<p>Med HTTP\/3 (QUIC) drar jag s\u00e4rskilt nytta av SO_REUSEPORT i UDP-v\u00e4gen: M\u00e5nga handskakningar och korta anslutningar f\u00f6rdelas utan n\u00e5gon extra lastbalanserare p\u00e5 anv\u00e4ndarniv\u00e5. Jag ser till att UDP-buffertarna \u00e4r tillr\u00e4ckligt stora och kontrollerar drop-r\u00e4knarna f\u00f6r varje k\u00f6. Eftersom QUIC-anslutningar logiskt kopplas till 5-tuplen f\u00f6rblir f\u00f6rdelningen stabil, men jag s\u00e4kerst\u00e4ller \u00e4nd\u00e5 med konsekventa strategier f\u00f6r omf\u00f6rs\u00f6k och token att valet av worker f\u00f6rblir transparent och prestandastarkt.<\/p>\n\n<h2>Finjustering av eBPF f\u00f6r Reuseport<\/h2>\n<p>Med ett Reuseport-BPF-program kan jag styra socket-valet ytterligare, till exempel utifr\u00e5n m\u00e5lv\u00e4rdets namn (SNI), lokala prioriteringar eller belastning per arbetare. Jag anv\u00e4nder detta endast n\u00e4r standardf\u00f6rdelningen med hash inte r\u00e4cker till, eftersom ytterligare logik \u00f6kar komplexiteten. Vid fels\u00f6kning kontrollerar jag om BPF-programmen verkligen har laddats och fungerar felfritt, och har en reservstrategi redo ifall policyn m\u00e5ste avlastas.<\/p>\n\n<h2>Motst\u00e5ndskraft och s\u00e4kerhet mot DDoS<\/h2>\n<p>SO_REUSEPORT \u00f6kar mottagningskapaciteten \u2013 det \u00e4r b\u00e5de en v\u00e4lsignelse och en risk. Jag s\u00e4tter hastighetsbegr\u00e4nsningar och anslutningsbegr\u00e4nsningar per arbetare s\u00e5 att enskilda processer inte blir \u00f6verbelastade p\u00e5 ett obalanserat s\u00e4tt. I kombination med SYN-cookies, m\u00e5ttliga timeouts och tydliga L7-begr\u00e4nsningar f\u00f6rhindrar jag att belastningstoppar binder resurser permanent. Jag separerar loggarna f\u00f6r att snabbare kunna uppt\u00e4cka missbruksm\u00f6nster per arbetare och anv\u00e4nder vid behov iptables\/nftables f\u00f6r att i ett tidigt skede strypa skadliga k\u00e4llor.<\/p>\n\n<h2>Fels\u00f6kning och verifiering<\/h2>\n<p>Jag kontrollerar konfigurationen med ss -ltnp (TCP) respektive ss -lunp (UDP) f\u00f6r att se om det finns flera lyssnare p\u00e5 samma IP\/port-kombination. Med perf, top\/htop och mpstat kontrollerar jag att CPU-anv\u00e4ndningen \u00e4r j\u00e4mn. Netstat-\/ss-r\u00e4knare, dmesg-meddelanden och NIC:s drop-statistik (ethtool -S) visar om k\u00f6erna \u00f6verfl\u00f6das. F\u00f6r mer ing\u00e5ende analyser ger tcpdump och Perf-h\u00e4ndelser inblick i accept-v\u00e4gar, retransmissioner och omf\u00f6rs\u00f6k. Korrelationen \u00e4r fortsatt viktig: betrakta alltid m\u00e4tv\u00e4rdena per arbetare, per CPU och per k\u00f6.<\/p>\n\n<h2>Undvik vanliga felkonfigurationer<\/h2>\n<ul>\n  <li>En Worker utan SO_REUSEPORT ansluter f\u00f6rst och blockerar alla andra.<\/li>\n  <li>0.0.0.0 och specifika IP-adresser anv\u00e4nds parallellt \u2013 lyssnare placeras i separata grupper.<\/li>\n  <li>accept_mutex aktiveras i Nginx trots reuseport \u2013 on\u00f6dig serialisering.<\/li>\n  <li>Ol\u00e4mpliga backloggar: somaxconn \u00e4r mindre \u00e4n den backlog som \u00e4r inst\u00e4lld p\u00e5 servern.<\/li>\n  <li>Ingen gemensam TLS-biljettkonfiguration \u2013 \u00e5terupptagningsgraden rasar.<\/li>\n  <li>RSS felaktigt dimensionerad \u2013 IRQ-belastningen koncentreras till ett f\u00e5tal k\u00e4rnor.<\/li>\n<\/ul>\n\n<h2>Kapacitetsplanering: Arbetstagarstorlek och FD-gr\u00e4nser<\/h2>\n<p>Jag avv\u00e4ger antalet arbetare mot RAM per arbetare, \u00f6ppna filer och antalet anslutningar. F\u00f6r m\u00e5nga processer \u00f6kar kontextbyten och cachebelastningen, medan f\u00f6r f\u00e5 g\u00e5r miste om parallellitet. Jag s\u00e4tter gener\u00f6sa och konsekventa gr\u00e4nser f\u00f6r filbeskrivare (ulimit, systemd-gr\u00e4nser, h\u00e5rda\/mjuka gr\u00e4nser), eftersom varje arbetare beh\u00f6ver egna filbeskrivare f\u00f6r socklar, loggar och uppstr\u00f6msanslutningar. Jag planerar dessutom in tillr\u00e4ckligt m\u00e5nga tillf\u00e4lliga portar och \u00f6vervakar TIME_WAIT-volymen s\u00e5 att kortvariga toppar inte g\u00e5r till spillo.<\/p>\n\n<h2>Prestandatester: vanliga fallgropar<\/h2>\n<p>Jag v\u00e4rmer upp servrar och cacher, kalibrerar belastningsgeneratorn (inga dolda flaskhalsar) och separerar kontroll- och datan\u00e4tverket. Testerna k\u00f6rs tillr\u00e4ckligt l\u00e4nge f\u00f6r att stabilt kunna m\u00e4ta p99\/p999, och jag varierar t\u00e4nktider, keep-alive-frekvenser och TLS-parametrar. Jag loggar \u00e4ven k\u00e4rn- och serverinst\u00e4llningar s\u00e5 att senare k\u00f6rningar f\u00f6rblir j\u00e4mf\u00f6rbara. N\u00e4r jag anv\u00e4nder eBPF-policyer dokumenterar jag deras version och effekt separat f\u00f6r att inte blanda ihop orsak och verkan.<\/p>\n\n<h2>Checklista f\u00f6r start<\/h2>\n\n<p>Jag kontrollerar f\u00f6rst k\u00e4rnversionen och ser till att SO_REUSEPORT finns tillg\u00e4ngligt och \u00e4r korrekt <strong>fastst\u00e4llt<\/strong> \u00e4r. D\u00e4refter aktiverar jag alternativet i webbserverkonfigurationen och st\u00e4ller in \u00f6nskat antal arbetare. Jag kontrollerar somaxconn, filbeskrivningsgr\u00e4nser och NIC-k\u00f6erna. D\u00e4refter utf\u00f6r jag belastningstester, j\u00e4mf\u00f6r m\u00e4tv\u00e4rden och itererar. Till sist finjusterar jag loggningen, omstartsstrategin och <strong>affinitet<\/strong> fr\u00e5n.<\/p>\n\n<h2>Sammanfattning<\/h2>\n\n<p>SO_REUSEPORT eliminerar Accept-flaskhalsen, f\u00f6rdelar nya anslutningar via en kernel-hash och ger b\u00e4ttre prestanda p\u00e5 flerk\u00e4rniga system <strong>Genomstr\u00f6mning<\/strong> ut. Jag anv\u00e4nder flera lyssnare per port, undviker \u201eThundering Herd\u201c-problemet och slipper en separat dispatcher. I Nginx uppn\u00e5s detta med \u201dlisten \u2026 reuseport\u201d och ett l\u00e4mpligt antal arbetare. Tillsammans med CPU-affinitet, en v\u00e4lordnad IRQ-f\u00f6rdelning och l\u00e4mpliga buffertar s\u00e4kerst\u00e4ller jag en konstant <strong>F\u00f6rdr\u00f6jningar<\/strong> under belastning. Den som granskar, testar och finjusterar dessa steg kan f\u00f6rb\u00e4ttra prestandan utan extra h\u00e5rdvarukostnader i euro.<\/p>","protected":false},"excerpt":{"rendered":"<p>Uppt\u00e4ck hur SO_REUSEPORT f\u00f6rb\u00e4ttrar prestandan hos din webbserver i Linux. L\u00e4r dig hur socket-alternativet fungerar och hur du anv\u00e4nder det i Nginx och andra tj\u00e4nster.<\/p>","protected":false},"author":1,"featured_media":20883,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-20890","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"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":"105","_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":"SO_REUSEPORT Linux","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":"20883","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20890","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=20890"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20890\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20883"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}