0

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;
        }
    }
}
4

1 に答える 1