GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit velikost vyrovnávací paměti soketu linuxu

Pokud chcete vidět velikost vyrovnávací paměti v terminálu, můžete se podívat na:

  • /proc/sys/net/ipv4/tcp_rmem (pro čtení)
  • /proc/sys/net/ipv4/tcp_wmem (pro zápis)

Obsahují tři čísla, což jsou hodnoty minimální, výchozí a maximální velikosti paměti (v bytech).


Zatímco, jak bylo zdůrazněno, je možné vidět aktuální výchozí velikosti vyrovnávací paměti soketu v /proc , je také možné je zkontrolovat pomocí sysctl (Poznámka:I když název zahrnuje ipv4, tyto velikosti platí také pro sokety ipv6 – kód ipv6 tcp_v6_init_sock() pouze volá funkci ipv4 tcp_init_sock()):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

Výchozí soketové vyrovnávací paměti jsou však nastaveny pouze při inicializaci socku, ale jádro je dynamicky rozděluje (pokud není nastaveno pomocí setsockopt() s SO_SNDBUF). Skutečnou velikost vyrovnávacích pamětí pro aktuálně otevřené sokety lze zkontrolovat pomocí ss příkaz (součást iproute /iproute2 balíček), který může také poskytnout spoustu dalších informací o zásuvkách, jako je parametr řízení přetížení atd. Např. Chcete-li zobrazit seznam aktuálně otevřených TCP (t volitelné) zásuvky a související paměť (m ) informace:

ss -tm

Zde je několik příkladů výstupu:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)

Zde je stručné vysvětlení skmem (socket memory) – pro více informací se budete muset podívat do zdrojů jádra (tj. sock.h):

r:sk_rmem_alloc
rb:sk_rcvbuf          # current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf          # current transmit buffer size
f:sk_forward_alloc
w:sk_wmem_queued      # persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops

Pro získání velikosti vyrovnávací paměti v programu c/c++ je následující postup

int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size

Linux
  1. Jak najít všechny řídké soubory v Linuxu

  2. Jak zjistím maximální velikost zásobníku?

  3. Jak získat fyzickou velikost souboru v Linuxu?

  1. Jak zjistit, zda je disk SSD nebo HDD v Linuxu

  2. Jak používat Linuxový příkaz find k hledání souborů

  3. Jak změnit velikost MTU v Linuxu

  1. Jak přenést výsledky 'najít' do mv v Linuxu

  2. Jak zjistit velikost nepřipojeného oddílu v Linuxu?

  3. Jak zjistit IP adresu brány v Linuxu