Visual Studio 2010 と Mono Develop 2.8 の両方で C# サーバーを開発しました。NET フレームワーク 4.0
このサーバーは、Linux よりも Windows の方が (スケーラビリティの点で) 動作がはるかに優れているようです。Apache の ab ツールを使用して、ネイティブ Windows (12 物理コア)、および 8 コアと 12 コアの Windows および Ubuntu 仮想マシンでサーバーのスケーラビリティをテストしました。
Windows の応答時間はほぼ一定です。同時実行レベルがコア数に近づく/超えると、回復し始めます。
何らかの理由で、Linux の応答時間が大幅に遅くなります。それらは、並行性のレベル 5 からほぼ直線的に増加します。また、8 コアおよび 12 コアの Linux VM も同様に動作します。
私の質問は、Linux でのパフォーマンスが悪いのはなぜですか? (そしてどうすれば修正できますか?)。
添付のグラフを見てください。リクエストの同時実行数の関数として、リクエストの 75% を満たす平均時間を示しています (範囲バーは 50% と 100% に設定されています)。
これは mono の Garbage Collector が原因ではないかと感じています。GC設定をいじってみましたが、成功しませんでした。なにか提案を?
追加の背景情報: サーバーは、リクエストをすばやく解析してスレッド プールのキューに入れる HTTP リスナーに基づいています。スレッド プールは、集中的な計算 (約 10 秒で回答を計算) を使用して、これらの要求に応答します。