質問: AWSのEC2インスタンスにてNginx+Node.jsのサーバを作り色々試しているのですが、秒間のアクセス数500〜600くらいで限界がくるような感じです。 これはチューニングでなんとか出来るものなのでしょうか? 初めてなので手探りで進めており不安しかありません。 おすすめの設定などあればご教授いただけると助かります。 ### 試したこと limits.confを編集し、ソフトリミット、ハードリミットを60000に変更 nginx.confに以下を追記 worker_rlimit_nofile 150000; events { worker_connections 65535; } ### 補足情報(言語/FW/ツール等のバージョンなど) EC2インスタンス c4.2xlarge vCPU 8,メモリ 15GiB,専有 EBS 帯域幅 1000Mbps Nginx/1.8.1
回答: 追加依頼ではなく、回答面に書きます。 ・帯域幅を「実際どのくらい」使っていますでしょうか ・ローカルで(ab とかを用いて)リクエストを投げた場合の挙動と同じでしょうか、異なりますでしょうか ・静的ファイルへのリクエストで良いでしょうか ・CPU はどの程度使用していますか、何にリソースを使っていますか が気になります。また、 ・limits.conf で変更したのは何の limit でしょうか。ファイルディスクリプタの上限...だとすれば「どの程度、クライアントのアクセスが分散するか」が気になってきます。ほとんどの人が特定のファイルしか読まないのであれば、設定してもあまり意味はないです。 ・ディスク読み込みがボトルネックになっている場合(IOPS の関係で) は理由・次の手を考える必要がありそう ・ログはどの程度とっているか、ファイル書き込みが多くないか といったところでしょうか。現在のご自分の見立てや分析を付記すると回答もしやすいかと思います。 >・帯域幅を「実際どのくらい」使っていますでしょうか ?・ローカルで(ab とかを用いて)リクエストを投げた場合の挙動と同じでしょうか、異なりますでしょうか 上記2点ですが、調査できておりません。 特に、帯域幅を実際どのくらい使っているか、の調査はどのように行ったらよろしいのでしょうか? 帯域幅は、(ネットワーク系)モニタリングツール(netstat, dstat)を用いるか、ifconfig の外向きの通信量(TX)の変化を自分で読みます。 >・静的ファイルへのリクエストで良いでしょうか Nginx + Node.jsの環境なので静的ファイルへのリクエストではないです。 それは大きいです。Node.js を用いていることを質問自体に追記してください。 >・CPU はどの程度使用していますか、何にリソースを使っていますか Node.jsのワーカープロセスが8つ動いており、主にそこに使っています。 ということは、ボトルネックは nginx ではないのではないかと思います。 >・limits.conf で変更したのは何の limit でしょうか ファイルディスクリプタの上限になります。 静的ファイルをサーブしていないのなら、おそらく設定は無意味です。 >・ログはどの程度とっているか Nginxはアクセスログはoffになっていて、エラーログのみです。 レベルはデフォルトのままなのでerrorのはずです。 ということは、書き込み負荷が高いことはないでしょう。 詳しい調査もいりますが、おそらく、Node.js の限界です。