GNU/Linux >> Linux の 問題 >  >> Linux

Linuxのソケットバッファサイズを見つける方法

ターミナルでバッファ サイズを確認したい場合は、以下を参照してください。

  • /proc/sys/net/ipv4/tcp_rmem (読むため)
  • /proc/sys/net/ipv4/tcp_wmem (書き込み用)

これらには、それぞれ最小、デフォルト、および最大のメモリ サイズ値 (バイト単位) である 3 つの数値が含まれます。


指摘されているように、現在の default を確認することは可能です。 /proc のソケット バッファ サイズ 、 sysctl を使用してそれらを確認することも可能です (注:名前には ipv4 が含まれていますが、これらのサイズは ipv6 ソケットにも適用されます - ipv6 tcp_v6_init_sock() コードは ipv4 tcp_init_sock() 関数を呼び出すだけです):

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

ただし、デフォルトのソケット バッファは、sock が初期化されるときに設定されますが、カーネルは動的にサイズを変更します (setsockopt() を使用して SO_SNDBUF を使用して設定しない限り)。現在開いているソケットのバッファの実際のサイズは、ss を使用して調べることができます。 コマンド (iproute の一部) /iproute2 パッケージ)、輻輳制御パラメーターなどのソケットに関するより多くの情報を提供することもできます。現在開いている TCP (t オプション) ソケットと関連メモリ (m ) 情報:

ss -tm

出力例を次に示します:

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)

skmem (ソケット メモリ) の簡単な説明は次のとおりです。詳細については、カーネル ソース (つまり、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

c/c++ プログラムでバッファ サイズを取得するには、次のフローを使用します

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. Linux の find コマンドを使用してファイルを検索する方法

  2. Linux ですべてのスパース ファイルを見つける方法

  3. 最大スタック サイズを確認するにはどうすればよいですか?

  1. Linux で「find」の結果を mv にパイプする方法

  2. Linuxでファイルの物理サイズを取得するには?

  3. Linux でゲートウェイ IP アドレスを見つける方法

  1. LinuxでディスクがSSDかHDDかを確認する方法

  2. Linux で MTU サイズを変更する方法

  3. Linuxでマウントされていないパーティションのサイズを見つける方法は?