
CentOS release 4.6(カーネル 2.6.9-67)上でUDPサーバーを開発していますが、同一ポートに対して複数クライアントからの通信を確認しています。250クライアント位までは同時通信してもパケットロスはほとんど発生しないのですが、250クライアント以上で同時通信を行うと、最大250クライアント位まで通信可能ですが、残りのクライアントについてクライアントからのパケットロスが発生します。
UDPなので多少のパケットロスしかたないのですが、なぜ最大250クライアント位までしか同時通信ができないかを調べています。
UDPサーバー側の送受信バッファはソケットオプションで大きめに設定しています。
カーネルパラメータやソケットオプションなどで、同一ポートに対しての同時通信が可能なクライアントを制限するようなパラメータはあるのでしょうか?
有識者の方がいましたらご教示下さい。
宜しくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>ネットワーク全体は別担当が管理しており、ネットワーク全体からみると問題ないパケット量。
>linux側でなにかパラメータなどがあるのではという見解になり。
netstat -sコマンドを利用すると、
Linux側(プログラム)で取りこぼしが発生しているかどうかがわかります。
Udp:
390529424 packets received
13288 packets to unknown port received.
848 packet receive errors ←受信したが、プログラムが取りこぼしたパケットの数
243773 packets sent
No.3
- 回答日時:
>同一ポートに対しての同時通信が可能なクライアントを制限するような
>パラメータはあるのでしょうか?
ありません。UDPプロトコル自体にそのような仕組みがないため、無理です。
必要であれば、上位プロトコルで制御の仕組みを実装してください。
>UDPサーバー側の送受信バッファはソケットオプションで大きめに設定しています。
いくらバッファを大きめに設定しても、サーバプログラムの処理性能を超える
勢いでパケットが到達すれば取りこぼしが発生します。
・カーネルバッファからの取り出し処理(recvfrom)
・取り出し後の雑多な処理
が並列動作するように考慮しないと、ある程度以上の処理性能は見込めません。
また、送受信バッファの大きさですが、
ソケットオプションでいくらおおきな値を入れても、net.core.rmem_maxが上限値となります。
ソケットオプションでnet.core.rmem_max以上の値を指定する場合は、
net.core.rmem_max値も合わせて大きくしてください。
回答ありがとうございます。
net.core.rmem_maxの設定とsocketoptの設定でどうにかなりました。
ありがとうございました。
No.2
- 回答日時:
> UDPサーバー側の送受信バッファはソケットオプションで大きめに設定しています。
これ(大きめに設定)ってUDPサーバのバッファですか、それともLinuxカーネルのバッファですか。
http://www.ibm.com/developerworks/jp/linux/libra …
※ 上記ページに『表1. TCP/IPスタックの性能を向上させる変更可能なカーネル・パラメータ
パラメータの調整で一番大事なことは、いろいろな設定で試してみるということです。アプリケーションの動作、プロセッサの速度、メモリーの使用率によって、これらのパラメータがシステムの性能をどう変えるかが決まります。システムの性能を上げるつもりが、逆に下げてしまう場合があるかもしれません(またはその逆の場合もあるかもしれません)。ですから、オプションを1つずつ実行し、その結果を確認するのが一番確実な方法です。』とあります。
http://opensuse-man-ja.berlios.de/opensuse-html/ …
http://www.anarg.jp/personal/t-tugawa/note/linux …
http://archive.linux.or.jp/JM/html/LDP_man-pages …
/proc インタフェース { udp_mem (Linux 2.6.25 以降) }
サーバ・クライアント側とも十分なカーネルバッファがないと処理できませんよ。
BSDだとnetstat -mでmbufの利用状況がわかるのだけどLinuxだとなんだったかな。(Linuxのnetstatコマンドには-mはありません)
% netstat -m
386/259/645 mbufs in use (current/cache/total)
384/134/518/20864 mbuf clusters in use (current/cache/total/max)
384/128 mbuf+clusters out of packet secondary zone in use (current/cache)
0/0/0/0 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/0 9k jumbo clusters in use (current/cache/total/max)
0/0/0/0 16k jumbo clusters in use (current/cache/total/max)
864K/332K/1197K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/5/5472 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
0 calls to protocol drain routines
回答ありがとうございます。
net.core.rmem_maxの設定とsocketoptの設定でどうにかなりました。
ありがとうございました。
No.1
- 回答日時:
上記だけでは詳しく構成がわからないのですが、例えばサーバも含めたネットワーク全体で考えなければいけないのではないかと思いました。
例えば、使用されているスイッチングHUBは、それだけの通信を一気に裁ける能力を有しているのかなど。
Gigabitのスイッチだから、全ポートが常に1Gbpsで通信可能なのかも、関わってくるのではないかと思います。
あくまで一例なので、その他ボトルネックになりそうなところを指摘してほしい場合は、構成図なども添えると、その道のプロからの回答もあるかもしれません。
早速の回答ありがとうございます。
150バイトのUDPパケットを一斉に送信をしているだなのです。
ネットワーク全体は別担当が管理しており、ネットワーク全体からみると問題ないパケット量。linux側でなにかパラメータなどがあるのではという見解になり。いろいろ調べております。その一環でOKwebに質問した次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- サーバー (童顔♀です)webサイト納品後,記事更新をこちらでする場合どうやりますか....? 3 2023/08/09 04:44
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- サーバー クライアントとサーバーを繋ぐ際に、リバースプロキシとロードバランサを使う時の違いはなんですか? 1 2023/01/13 14:27
- サーバー Webページに繋がるまでの流れについての質問です。 2 2023/03/19 23:15
- ネットワーク 自分のPC(ローカル環境)から,Webページにアクセスする過程についての質問です。 1 2023/03/19 23:00
- UNIX・Linux OpenSSHのサーバー設定ファイルsshd_config内のHostKey行について 4 2023/05/02 09:53
- ルーター・ネットワーク機器 ネットワーク共有フォルダーにWi-Fiで接続したい 4 2022/06/17 00:01
- サーバー active directory のユーザをローカルで使いたい 1 2023/07/22 07:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重厚長大なOSは必要か。
-
Linux
-
Linuxについて
-
カーネルパッケージがインスト...
-
/dev/nvme0n1p2 clean と表示さ...
-
「モジュールの場所を確認でき...
-
romfsってなんですか?
-
Win MAC 違い 説明
-
raspberrypiのkernel構築について
-
画像処理でのカーネルの意味
-
リナックス カーネルの c言...
-
KNOPPIXによるハードディスクの...
-
WinowsNT上でUNIXの環境を実現...
-
LINUXが立ち上がらないです
-
webカメラが映らなくて
-
カーネルのソースが無いのは。。
-
USB接続シリアル変換ケーブル
-
モジュールんの有効(?)に関す...
-
PERLとシェルについて
-
Vine Linuxって?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SolarisとLinuxの違い
-
パフォーマンスモニタの%Proces...
-
カーネル再構築でのエラー
-
割り込み不可能?なプロセスを...
-
Linuxって何?
-
/dev/nvme0n1p2 clean と表示さ...
-
Linux 32Bitと64Bitのメモリー...
-
androidがIPadに劣る、Linuxだ...
-
カーネルバッファとは何でしょうか
-
apacheのプロセス数が不安定
-
Redhat9のカーネルのアップにつ...
-
Debian で時間が経つと画面が消...
-
CentOSのデスクトップ画面が立...
-
/proc/sys/net/ipv4/route/flus...
-
エラー”Illegal seek”はどんな...
-
UNIXとBSDとLinuxの違いを小学...
-
どうしてwindowsはMacと比べ動...
-
カーネルの再構築の方法
-
Linuxでcrcエラー?
-
ツインCPUでのLinuxインス...
おすすめ情報