0

FastRWeb修改后,我正在研究Rserve (1.8.5)的内置 HTTP 服务器。更新后的请求函数没问题,但问题是,每当 # 并发请求很高时,其中一些/大多数会抛出以下错误。.http.request()

警告:fork_http() 中的 fork() 失败:无法分配内存

警告:Rserve_prepare_child() 中的 fork() 失败:无法分配内存

这是由于没有足够的可用内存剩余,有必要以一种或另一种方式限制 # 个请求。

我尝试了几个客户端层(1)Python 的请求 + 拥抱库,(2)Python 的 pyRserve + 拥抱库,其中 # 工作进程由 # CPU 调整。此外,我在单个/多个容器设置 (3) (4) 中尝试了使用 Nginx 的反向代理。

在所有情况下,与仅使用内置 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

0

我被 Locust(负载测试工具)误导,它显示了使用内置 HTTP 服务器设置 Rserve 的缓存输出。

手动调查显示 Rserve + Nginx 返回的结果略有改善。

于 2017-10-31T07:05:17.023 回答