FastRWebから変更した後、 Rserve (1.8.5)の組み込みHTTP サーバーを調べています。更新されたリクエスト関数では問題ありませんが、問題は、# 同時リクエストが多い場合、その一部またはほとんどが次のエラーをスローすることです。.http.request()
警告: fork() が fork_http() で失敗しました: メモリを割り当てられません
警告: Rserve_prepare_child() で fork() が失敗しました: メモリを割り当てられません
これは、十分な空きメモリが残っていないためであり、何らかの方法で # リクエストを制限する必要があります。
いくつかのクライアント レイヤーを試しました (1) Python のリクエスト + hug ライブラリ、(2) Python の pyRserve + hug ライブラリで、# ワーカー プロセスが # CPU によって調整されます。また、単一/複数のコンテナー設定の両方で Nginx を使用したリバース プロキシを試しました (3) (4)。
すべてのケースで、組み込みの HTTP サーバーを使用した Rserve のみのセットアップと比較して、ある程度のオーバーヘッド (約 300 ~ 450 ミリ秒) が見られます。
そのまま使用するのが最も効率的なオプションだと思いますが、フォークしようとし続けてエラーを返すだけではないかと心配しています。(エラーがすぐにスローされるだけでなく、CPU 使用率や平均応答時間などの一般的なメトリックで自動スケーリングするのは簡単ではありません。)
パフォーマンスを犠牲にしない、別のツールに依存する/しないでレート制限を実施する方法があるかどうか、誰かに知らせることができますか?
私のRserve設定はおおよそ次のとおりです。
http.port 8000
socket /var/rserve/socket
sockmod 0666
control disable
また、簡略化されたnginx.confもここにあります。
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream backend {
server 127.0.0.1:8000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}